我有一个 WSDL,它使用xsd:any
其中一种方法的返回类型中的元素,如下所示:
<xs:element name="Method_XMLResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Method_XMLResult">
<xs:complexType mixed="true">
<xs:sequence>
<xs:any/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
当我通过该工具运行 WSDL 时wsimport
,我得到一个生成的类,该类将该xs:any
字段映射为对象列表:
public static class MethodXMLResult {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
}
使用生成的代码调用服务时,我会org.w3c.dom.Node
在content
列表中获得com.sun.org.apache.xerces.internal.dom.ElementNSImpl
需要自己解析的实例(准确地说)。然而,我为实际返回的对象提供了一个单独的外部模式文档——我试图以某种方式将它提供给它,wsimport
以便它也为它们生成类。
我正在尝试通过这样的 JAX-WS / JAXB 自定义文件来实现这一点:
<jaxws:bindings xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:a="http://www.w3.org/2001/XMLSchema"
wsdlLocation="wsdlLocation.wsdl">
<jaxws:bindings node="wsdl:definitions">
<jaxws:bindings node="wsdl:types" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<jaxws:bindings node="//s:schema[@targetNamespace='wsNamespace']">
<jaxb:bindings node="//s:element[@name='Method_XMLResponse']//s:any">
...
</jaxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
</jaxws:bindings>
</jaxws:bindings>
看起来wsimport
选择了正确的位置进行自定义(给了我许多错误消息,并在 WSDL 中正确指定了行号),但我不知道如何填充<jaxb:bindings>
元素以wsimport
从外部模式生成类。甚至可能吗?任何帮助将非常感激。