【问题标题】:CXF JAXB JAXBEncoderDecoder unmarshalling error : unexpected element when having qualified elementsCXF JAXB JAXBEncoderDecoder 解组错误:具有合格元素时出现意外元素
【发布时间】:2011-06-01 09:27:30
【问题描述】:

我遇到以下问题,找不到解决方案:
WSDL 有elementFormDefault="qualified",在我在 CXF 客户端收到的响应中,所有元素都以命名空间为前缀,但 JAXB 抛出异常

org.apache.cxf.interceptor.Fault:解组错误:意外元素(uri:“unm:ENTSCWS”,本地:“searchReturn”)。预期的元素是 在 org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:661) 在 org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:533) 在 org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128) ...

如果我在 WSDL elementFormDefault="unqualified" 中更改它正在工作,但我不允许更改 WSDL,它应该具有以命名空间为前缀的元素。

package-info.java 包含注释:

@javax.xml.bind.annotation.XmlSchema(namespace = "unm:ENTSCWS", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package entscws;

响应类包含注解:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "searchReturn"
})
@XmlRootElement(name = "searchResponse")
public class SearchResponse {

你知道我为什么会收到这个错误吗?

【问题讨论】:

  • cxf 用户列表更有可能对此提供答案。

标签: web-services wsdl jaxb cxf


【解决方案1】:

您是否在 OSGi 中运行?我已经看到一些类似的问题,包裹信息在那里没有被正确提取。

另一种选择是在 wsdl2java 命令中添加 -xjc-npa 标志,使其完全不使用 package-info 并将命名空间粘贴在所有其他位置。

【讨论】:

  • 非常感谢您的帮助。这不仅解决了我在响应元素以命名空间为前缀时出现“意外元素”错误的问题,而且还解决了另一个问题,即 wsdl2java 没有在生成的 java 类中为 @XmlType 注释创建“命名空间”属性。我在 JVM 中将我的应用程序作为独立应用程序运行,并有一个自定义类加载器,它加载由 wsdl2java 生成的类。我可以看到 package-info.java 是由类加载器加载的,但是 package 中的命名空间属性是用于 @XmlSchema 而不是 @XmlType
猜你喜欢
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 2018-08-27
  • 2012-05-22
  • 2014-10-04
  • 2023-04-02
相关资源
最近更新 更多