JAXB unmarshalling исключение: неожиданный элемент, когда весна webservice 1.0.4 - PullRequest
3 голосов
/ 05 января 2011

Я написал пример весеннего webservice cleint. Это отлично работает с springws1.5, но при работе с spring ws 1.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 Следующие изменения, которые я сделал: Создание классов с использованием wsconsume командного файла из jboss bin, я сохранил jars

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.Тем не менее я сталкиваюсь с этой проблемой, ранее это работало.Я не сделал много chanegs.что-то мешает в моем коде?Как chesk .. Как отследить это.Любая помощь высоко ценится.Моя 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")

1 Ответ

10 голосов
/ 06 января 2011

Исключение, которое вы получаете, говорит вам, что контекст JAXB ожидает получения элементов без пространства имен XML.Он ожидает этого, потому что ваши аннотированные классы JAXB не имеют нигде определенного пространства имен.Можно ожидать, что он будет объявлен как @XmlNamespace где-то в связанных классах (или в package-info.java), но у вас его нет нигде.

Однако Spring-WS получает ответычто do имеет пространство имен (http://yyy.org в вашем примере), и поэтому не удается выполнить демонтирование.

Чего я не могу объяснить, так это когда-то работало с Spring-WS 1.5.x - несоответствие пространства имен должно завершаться неудачей для каждой версии.

Независимо от того, какой инструмент вы использовали для генерации классов JAXB , должен создать файл package-info.java, который объявил пространство имен.Вы уверены, что его где-то нет?

...