JAXB解组异常:SpringWebService 1.0.4时出现意外元素
我已经编写了SpringWebService cleint示例,这在springws1.5中运行良好,但在springws1.0.4中运行时,我遇到了以下异常。请帮助我为什么会出现此异常以及如何解决。我只需要使用down版本,因为我的spring版本是2.0.4。请尽快回复JAXB解组异常:SpringWebService 1.0.4时出现意外元素,spring,spring-ws,jaxb2,Spring,Spring Ws,Jaxb2,我已经编写了SpringWebService cleint示例,这在springws1.5中运行良好,但在springws1.0.4中运行时,我遇到了以下异常。请帮助我为什么会出现此异常以及如何解决。我只需要使用down版本,因为我的spring版本是2.0.4。请尽快回复 Unhandled exception: org.springframework.oxm.jaxb.JaxbUnmarshallingFailureException: JAXB unmarshalling exc
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)
在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>
}
输入
下面是类级注释
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"xxxData"
})
@XmlRootElement(name = "Xxx")
答复:
@ XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"xxxResult"
})
@XmlRootElement(name = "XxxResponse")
得到的例外情况是,JAXB上下文希望接收没有XML名称空间的元素。这是因为JAXB注释的类没有在任何地方定义名称空间。您可能会在绑定类(或在
package info.java
中)的某个地方找到声明为@XmlNamespace
,但您在任何地方都没有
然而,SpringWS正在接收具有名称空间的响应(代码http://yyy.org
在您的示例中),因此解组失败
我无法解释的是SpringWS1.5.x是如何工作的——对于每个版本,名称空间不匹配都应该失败
无论使用什么工具生成JAXB类,都应该生成一个声明名称空间的
package info.java
文件。您确定它不在那里吗?当我们收到此错误时,请给我答复。在哪里查看?请建议我如何保存日志以及如何解决这些错误?没有人回答??需要更多信息,或者这个问题不清楚。请帮助我我真的在寻找这个。我在我的问题中添加了配置文件,请帮助我。我正在工作几天,得到所有类型的错误,请帮我一个忙。我没有jaxb.properties。我的结构中没有保留package-info.java。需要吗?我已经发布了ObjectFactory.java。有xxx是为AddrCheck屏蔽的。谢谢你的时间谢谢你,先生。这真是我的错。我不知道这个包-info.java有那么重要。我保存这个文件并不是因为它只包含包名。现在我保存了这个文件,所有的东西都正常工作了。通过搜索google,我试图在XmlRootElement中保留AddrCheck和AddrCheckResponse文件的名称空间。但那一次我得到了零结果。无论如何谢谢你,先生。这就是为什么我还保留了一个问题来理解这些封送员是如何工作的,无论如何,再次非常感谢您,先生。我有完全相同的问题,但我从未删除package-info.java文件,并再次检查它是否真的存在。你能给我一些提示吗?
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"xxxData"
})
@XmlRootElement(name = "Xxx")
@ XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"xxxResult"
})
@XmlRootElement(name = "XxxResponse")