我的外部绑定文件中的 XPath 表达式不能针对导入到我的 WSDL 中的 XML 模式中的元素。
如果我进行内联绑定自定义,一切都会运行,但我真的希望拥有外部绑定文件,这样我就不会意外覆盖(刷新)包含我的自定义的文件。
我的绑定文件的开始:
<jaxb:bindings
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
version="2.1">
<jaxb:bindings schemaLocation="../wsdl/localhost_7001/ExampleSessionBean/ExampleSessionBeanService.wsdl#types?schema1">
<jaxb:bindings node="//xs:schema[@targetNamespace='urn:myExample']">
我的 WSDL 包含:
<types>
<xsd:schema>
<xsd:import namespace="urn:myExample" schemaLocation="http://localhost:7001/ExampleSessionBean/ExampleSessionBeanService?xsd=1"/>
</xsd:schema>
<xsd:schema>
<xsd:import namespace="http://ejbs/" schemaLocation="http://localhost:7001/ExampleSessionBean/ExampleSessionBeanService?xsd=2"/>
</xsd:schema>
</types>
无论我做什么,XPath 在 xsd:import'ed 模式中都找不到任何东西。我得到的错误是:
[ERROR] XPath evaluation of "//xs:schema[@targetNamespace='urn:myExample']" results in empty target node
我尝试通过索引号而不是命名空间访问 xs:schema,但这也不起作用。似乎我的 XPath 表达式无法从导入的模式中访问元素……有没有办法解决这个问题?
这是在 NetBean 7.2 下开发的 Java SE 7 项目。如果这很重要,我正在使用 NetBeans 来完成我所有的 wsimport 工作,但命令输出对于 RI/Metro 来说看起来相当标准。
编辑:我发现如果我使用 SCD,我可以让外部绑定文件工作。此 XPath 示例不起作用:
<bindings node="//xsd:schema[@targetNamespace='urn:myExample']">
<bindings node="//xs:complexType[@name='myType']">
<class name="MyClass"/>
</bindings>
</bindings>
但是这个 SCD 示例可以。
<bindings scd="x-schema::tns" xmlns:tns="urn:myExample">
<bindings scd="~tns:myType">
<class name="MyClass"/>
</bindings>
</bindings>
这是一个已知的事情,即使用 wsimport 时 XPath 在 xjb 文件中不起作用但 SCD 起作用?