2011-01-04 20 views
3

spring webservice cleintの例これはspringws1.5でうまくいきますが、spring ws 1.0.4で動作しているときは例外よりも少なくなっています。この例外が発生する理由と解決方法を教えてください。私は春のバージョンが2.0.4であるのでバージョンをダウンする必要があります。できる限り早くご回答ください。JAXBアンマーシャリング例外:予期せぬ要素の場合spring webservice 1.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 次の変更次の例を使用してコード化している: GenereateクラスのJBossビンからwsconsumeバッチファイルを使用して、 私が保持している瓶jboss/../lib

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 

次は私の春の設定ですファイル:

<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(); 
    } 

}

入力 がclasslevel注釈

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

レスポンスです:OK、今、私たちは、診断のための十分な情報を持っている

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

このエラーが発生した場合は、私に返信してください。どこを見ますか? – vishnu

+0

ログを保存する方法と、これらのエラーを解決する方法を教えてください。 – vishnu

+0

誰も答えていない??もう少し情報が必要な場合や、この質問が明確でない場合私は本当にこれを探しています。 – vishnu

答えて

10

:)

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

しかし、Spring-WSでは、にdoには名前空間(例ではhttp://yyy.org)があるので、アンマーシャリングは失敗します。

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

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

+2

ありがとうございます。これは本当に私の悪いです。私はこのpackage-info.javaが重要であることを知りませんでした。私はこのファイルにパッケージ名だけが含まれていると思っているわけではありませんでした。 Googleを検索すると、XmlRootElementのAddrCheckとAddrCheckResponseファイルの名前空間を維持しようとしました。しかし、その時私はヌルの結果を得ました。いずれにしても、ありがとうございます。そう、私はこれらのマーシャルがどのように働くかを理解するためにもう1つの質問を残しました。どうもありがとうございました。 – vishnu

+0

私はまったく同じ問題を抱えていますが、package-info.javaファイルを削除したことはありません。私にいくつかのヒントをお願いしますか? –

関連する問題