JAXB 解组异常:spring webservice 1.0.4 时出现意外元素

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4598987/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-08 04:16:28  来源:igfitidea点击:

JAXB unmarshalling exception: unexpected element when spring webservice 1.0.4

springspring-wsjaxb2

提问by vishnu

I have written spring webservice cleint example This is working fine with springws1.5 but when running with spring ws 1.0.4 i am getting below exception. Please help me why we will get this exception and how to resolve. I need to use down version only as my spring version is 2.0.4. Please reply as soon as possible.

我已经编写了 spring webservice 客户端示例这在 springws1.5 上运行良好,但是在使用 spring ws 1.0.4 运行时,我遇到了异常。请帮助我为什么我们会收到此异常以及如何解决。我只需要使用向下版本,因为我的 spring 版本是 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.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)

I have coded using following example http://justcompiled.blogspot.com/2010/11/web-service-client-with-spring-ws.htmlThe following changes i have done:Genereate classes using wsconsumebatch file from jboss bin, I have kept jars

我使用以下示例进行编码 http://justcompiled.blogspot.com/2010/11/web-service-client-with-spring-ws.html我所做的以下更改:使用wsconsumejboss bin 中的批处理文件生成类,我有罐子

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

jboss/../lib

Following is in my spring configuration file:

以下是我的spring配置文件:

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

Now i have replaced everything and place webservice 1.5.0 jar. Stil i am facing this problem, Previously it worked. I haven't done much chanegs. is any thing disturbed in my code? How to chesk ..How to track this. Any help is highly appreciated. My ObjectFactory is simple:

现在我已经更换了所有东西并放置了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();
    }

}

}

Input Following are classlevel annotations

输入以下是类级别的注释

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

Response:

回复:

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

回答by skaffman

The exception you're getting is telling you that the JAXB context is expecting to receive elements with no XML namespace. It's expecting this because your JAXB-annotated classes do not have a namespace defined anywhere. You'd expect to find this declared as @XmlNamespace, somewhere in the bound classes (or in package-info.java), but you don't have that anywhere.

您得到的例外是告诉您 JAXB 上下文期望接收没有 XML 命名空间的元素。这是因为您的 JAXB 注释类没有在任何地方定义命名空间。您希望@XmlNamespace在绑定类(或在package-info.java)中的某处找到声明为, 但您在任何地方都没有。

Spring-WS, however, is receiving responses that dohave a namespace (the http://yyy.orgin your example), and so the unmarshalling fails.

春天-WS,即然而,接收响应有一个命名空间(在http://yyy.org你的例子),所以解组失败。

What I can't explain is how this ever worked with Spring-WS 1.5.x - the namespace mismatch should fail for every version.

我无法解释的是这如何与 Spring-WS 1.5.x 一起使用 - 每个版本的命名空间不匹配都应该失败。

Whatever tool you used to generate the JAXB classes shouldhave produced a package-info.javafile that declared the namespace. Are you sure it's not in there somewhere?

您用来生成 JAXB 类的任何工具都应该生成一个package-info.java声明命名空间的文件。你确定它不在某个地方吗?