使用 wsimport 时,如何为 WSDL 中导入的 XSD 指定 JAXB 绑定?
我尝试了以下绑定,这会导致错误“ //xs:element[@name='isFoobar'] 的 XPath 计算导致空目标节点”。
<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="example.wsdl"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<jaxws:bindings node="wsdl:definitions">
<jaxws:bindings node="wsdl:types" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<jaxws:bindings
node="//xs:schema[@targetNamespace='http://www.example.org/']">
<jaxb:globalBindings>
<xjc:serializable uid="10000001" />
</jaxb:globalBindings>
<jaxb:bindings
node="//xs:element[@name='isFoobar']">
<jaxb:typesafeEnumClass name="IsFoobar">
<jaxb:typesafeEnumMember value="01" name="TRUE" />
<jaxb:typesafeEnumMember value="02" name="FALSE" />
</jaxb:typesafeEnumClass>
</jaxb:bindings>
</jaxws:bindings>
</jaxws:bindings>
</jaxws:bindings>
</jaxws:bindings>
有任何想法吗?
抱歉,死线程,我遇到了这个问题,虽然这是谷歌上出现的带有各种关键字组合的第一个答案之一,但它没有包含我最终使用的答案。
对于导入的模式,在 WSDL 内的导入的 XSD 上指定 JAXB 绑定的最简单方法是...将其视为完全不同的模式!
简短的例子:
MyXSD.xsd
<xsd:schema targetNamespace="whatever"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ThingThatNeedsToBeBound">
<!-- Whatever this is made of -->
</xs:complexType>
</xsd:schema>
无论这个 xsd 导入到哪里(无论是在 wsdl 的根目录还是在嵌套导入中),我需要编写的内容来在自定义绑定中绑定“ThingThatNeedsToBeBound”:
自定义绑定.xml
<jaxb:bindings schemaLocation="Path/To/MyXSD.xsd" node="/xs:schema/xs:complexType[@name='ThingThatNeedsToBeBound']">
<!-- your custom binding -->
</jaxb:bindings>
因此,它就像常规情况一样,只是您指定了 schemaLocation,但是您可以将导入的模式视为一个整体,而不是某个事物的一部分。
我希望这能帮助其他人解决这个问题。
来源 :http://www.oracle.com/technetwork/articles/grid/jax-ws-jaxb-customization-082750.html
(注意:在源代码中,解决方案似乎更复杂,所以我的情况可能比他们描述的更简单,我发现我的解决方案仍然使用它!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)