gpt4 book ai didi

spring - JAXB 解码异常 : unexpected element when spring webservice 1. 0.4

转载 作者:行者123 更新时间:2023-12-01 08:39:56 25 4
gpt4 key购买 nike

我已经编写了 spring webservice 客户端示例 这在 springws1.5 上运行良好,但是当使用 spring ws 1.0.4 运行时,我遇到了异常。请帮助我为什么我们会得到这个异常以及如何解决。我只需要使用 down 版本,因为我的 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$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 的批处理文件,
我保留了 jar
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
以下是我的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>

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

最佳答案

您得到的异常是告诉您 JAXB 上下文期望接收没有 XML namespace 的元素。这是预期的,因为您的 JAXB 注释类没有在任何地方定义命名空间。你会发现这个声明为 @XmlNamespace ,在绑定(bind)类中的某个地方(或在 package-info.java 中),但你在任何地方都没有。

但是,Spring-WS 正在接收具有命名空间的响应(在您的示例中为 http://yyy.org),因此解码失败。

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

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

关于spring - JAXB 解码异常 : unexpected element when spring webservice 1. 0.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4598987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com