4

私はspringwebservicecleintの例を書きました。これはspringws1.5で正常に動作していますが、springws1.0.4で実行すると例外を下回ります。この例外が発生する理由と解決方法を教えてください。春のバージョンは2.0.4なので、ダウンバージョンのみを使用する必要があります。できる限り早くご回答ください。

Unhandled exception: 
    org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException: JAXB unmarshalling exception: unexpected element (uri:"http://yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>; nested exception is javax.xml.bind.UnmarshalException: unexpected element (uri:"yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>
    Caused by: 
    javax.xml.bind.UnmarshalException: unexpected element (uri:"http://yyy.org", local:"xxxResponse"). Expected elements are <{}xxx>,<{}xxxResponse>
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:603)
     at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:244)
     at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:239)
     at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1009)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:446)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:427)
     at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:71)
     at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137)
     at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:240)
     at com.sun.xml.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:123)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:314)
     at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:297)
     at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:107)
     at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:395)
     at org.springframework.ws.support.MarshallingUtils.unmarshal(MarshallingUtils.java:62)
     at org.springframework.ws.client.core.WebServiceTemplate$2.extractData(WebServiceTemplate.java:276)
     at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:417)
     at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:265)
     at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:253)
     at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:245)
     at encompass.mtm.webservices.Code1ServiceClient.getAddressCheckResponse(Code1ServiceClient.java:24)

次の例を使用してコーディングし ましたhttp://justcompiled.blogspot.com/2010/11/web-service-client-with-spring-ws.html 次の変更を行いました 。jbossbinwsconsumeからバッチファイルを使用してクラスを生成します。瓶を保管しました

saaj1.3.jar, spring-ws-core-1.0.4.jar,spring-xml-1.0.4.jar
spring-oxm-tiger-1.0.4.jar,spring-oxm-1.0.4.jar 

jboss/../lib

以下は私の春の設定ファイルにあります:

<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
        <property name="messageFactory">
            <bean class="com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/>
        </property>
    </bean>

    <bean id="test1ObjectFactory" class="test.webservices.ObjectFactory"/>
    <bean id="test1ServiceMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="contextPath" value="test.webservices" />
    </bean>
    <bean id="test1ServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
        <constructor-arg ref="messageFactory" />
        <property name="marshaller" ref="test1ServiceMarshaller"></property>
        <property name="unmarshaller" ref="test1ServiceMarshaller"></property>
        <property name="messageSender">
            <bean
                class="org.springframework.ws.transport.http.CommonsHttpMessageSender">
            </bean>
        </property>
        <property name="defaultUri" value="${webservice.url}" />
    </bean>
    <bean id="test1ServiceClient" class="test.webservices.test1ServiceClient">
        <constructor-arg ref="test1ServiceTemplate"></constructor-arg>
        <property name="test1ObjectFactory" ref="test1ObjectFactory"></property>
    </bean>

今、私はすべてを交換して配置しましたwebservice 1.5.0 jar。私がこの問題に直面しているまで、以前はうまくいきました。私はあまりチャネグをしていません。私のコードで何か邪魔されているものはありますか?チェスクする方法..これを追跡する方法。どんな助けでも大歓迎です。私のObjectFactoryは単純です:

@XmlRegistry
public class ObjectFactory {

    /**
     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: test.webservices
     * 
     */
    public ObjectFactory() {
    }

    /**
     * Create an instance of {@link xxxResponse }
     * 
     */
    public XxxResponse createxxxResponse() {
        return new xxxResponse();
    }

    /**
     * Create an instance of {@link xxx }
     * 
     */
    public Xxx createXXX() {
        return new XXX();
    }

}

以下はクラスレベルのアノテーションです

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "xxxData"
})
@XmlRootElement(name = "Xxx")

応答:

  @ XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "xxxResult"
    })
    @XmlRootElement(name = "XxxResponse")
4

1 に答える 1

11

取得している例外は、JAXBコンテキストがXML名前空間のない要素を受け取ることを期待していることを示しています。JAXB注釈付きクラスには名前空間がどこにも定義されていないため、これが予想されます。@XmlNamespaceバインドされたクラスのどこか(またはのどこか)で、これがとして宣言されていることを期待しますが、どこにpackage-info.javaもありません。

ただし、Spring-WSは名前空間(この例では)を持つ応答を受信http://yyy.orgて​​いるため、アンマーシャリングは失敗します。

私が説明できないのは、これがSpring-WS 1.5.xでどのように機能したかということです。名前空間の不一致は、すべてのバージョンで失敗するはずです。

JAXBクラスの生成に使用したツールが何であれ、名前空間を宣言するファイルを生成する必要があります。package-info.javaどこかにないのですか?

于 2011-01-05T23:44:41.207 に答える