Apache CXF解析WSDL Schema xsd:任何类型

时间:2016-12-22 06:28:35

标签: java web-services soap wsdl cxf

我正在努力寻找肥皂网服务的优秀和最通用的解决方案。问题。我需要解决的问题是使用给定的WSDL文件替换Apache Axis使用wsdl2java命令使用Apache CXF genereta的代理生成的代理。 但是,当我使用CXF生成代理并在IDE中打开类时,我意识到我有:

@XmlAnyElement(lax = true)
    protected List<Object> any;

元素作为Class字段。这很奇怪。我查看了纯wsdl,在complextype个属性中有xsd:any个元素。我一直在寻找问题是什么,以及解决问题的最佳解决方案。我找到了this。看来apache CXF运行时无法确定元素的实际数据类型。所以我需要使用DOM解析器手动解析它。

Apache Axis生成以下内容:

private org.apache.axis.message.MessageElement[] _any;

标签:

<any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />

我的问题是:解决这个问题的最佳方法是什么?我真的需要DOM解析器吗?有什么我想念的吗? 谢谢。

1 个答案:

答案 0 :(得分:1)

<xsd:any>用于在架构中允许任何元素。见this link

  

该元素使我们能够使用未由模式指定的元素扩展XML文档。

因此,CXF的映射是正确的。 JAXB注释@XmlAnyElement(lax = true)表示对于该字段,如果包含使用@XmlRootElement@XmlElementDecl注释的元素,则将使用相应类的实例来填充该字段,否则该元素将是设置为org.w3c.dom.Element的实例。

查看示例here