2011-01-04 22 views
3

Ich habe spring webservice cleint Beispiel geschrieben Das funktioniert gut mit springwings1.5, aber wenn mit Frühling ws 1.0.4 läuft, bin ich unter Ausnahme. Bitte helfen Sie mir, warum wir diese Ausnahme bekommen und wie wir sie lösen können. Ich muss nur die Version down verwenden, da meine Federversion 2.0.4 ist. Bitte antworten Sie so bald wie möglich.JAXB unmarshalling Ausnahme: unerwartetes Element bei 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) 

ich unter Verwendung der codierten folgendes Beispiel http://justcompiled.blogspot.com/2010/11/web-service-client-with-spring-ws.html Folgende Änderungen ich getan habe: Genereate Klassen wsconsume Batch-Datei von jboss ist, Ich habe gehalten Gläser

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 

in jboss/../lib

Folgendes ist in meinem Frühling configurati auf Datei:

<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> 

Jetzt habe ich ersetzt alles und legen webservice 1.5.0 jar. Stil ich bin mit diesem Problem konfrontiert, zuvor hat es funktioniert. Ich habe nicht viel Chanegs gemacht. Ist irgendetwas in meinem Code gestört? Wie man check .. Wie man das verfolgt. Jede Hilfe wird sehr geschätzt. Mein Object ist einfach:

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

}

Eingang Im Folgenden sind classlevel Anmerkungen

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

Antwort:

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

Bitte geben Sie mir eine Antwort, wenn wir diesen Fehler erhalten. Wo zu sehen? – vishnu

+0

Bitte schlagen Sie mir vor, wie Sie Protokolle führen und wie Sie diese Fehler beheben können? – vishnu

+0

Niemand antwortet? Brauchen Sie weitere Informationen oder diese Frage ist nicht klar. Bitte helfen Sie mir, ich suche wirklich danach. – vishnu

Antwort

10

OK, jetzt haben wir genug Informationen für eine Diagnose haben :)

Die Ausnahme, die Sie erhalten, sagt Ihnen, dass der JAXB-Kontext Elemente ohne XML-Namespace erwartet. Dies wird erwartet, da Ihre JAXB-annotierten Klassen keinen definierten Namespace haben. Sie würden erwarten, dies als @XmlNamespace, irgendwo in den gebundenen Klassen (oder in package-info.java) deklariert zu finden, aber Sie haben das nirgendwo.

Spring-WS empfängt jedoch Antworten, die do haben einen Namespace (das http://yyy.org in Ihrem Beispiel), und so das Unmarshalling fehlschlägt.

Was ich nicht erklären kann ist, wie dies jemals mit Spring-WS 1.5.x gearbeitet hat - der Namespace Mismatch sollte für jede Version fehlschlagen.

Welches Werkzeug Sie auch verwendet haben, um die JAXB-Klassen zu generieren, sollte eine package-info.java-Datei erzeugt haben, die den Namespace deklarierte. Bist du sicher, dass es nicht irgendwo drin ist?

+2

Danke, mein Herr. Das ist wirklich mein schlechtes. Ich wusste nicht, dass dieses package-info.java so wichtig ist. Ich habe diese Datei nicht behalten, dass sie nur Paketname enthält. Jetzt behielt ich und alles funktionierte richtig. Bei der Suche nach Google habe ich versucht, den Namespace für AddrCheck- und AddrCheckResponse-Dateien in XmlRootElement zu behalten. Aber dieses Mal habe ich null Ergebnis bekommen. Wie auch immer, vielen Dank, Sir. Thatswhy ich hielt noch eine Frage zu verstehen, wie diese Marshaller funktioniert, Auf jeden Fall vielen Dank Herr noch einmal. – vishnu

+0

Ich habe genau das gleiche Problem, aber ich habe nie die Datei package-info.java gelöscht und überprüft, ob sie wirklich da ist. Könnten Sie mir bitte ein paar Hinweise geben? –