在使用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>
有什么想法吗?
答案 0 :(得分:1)
我之前做了类似的事情,我认为您需要指定要使用XPath选择的节点,如下所示:
//xs:element[@name='isFoobar']/xs:complexType
或者将xs:complexType替换为您在此处使用的任何类型。希望它能解决你的问题。
答案 1 :(得分:1)
我第一次尝试解决这个问题是试图以某种方式使用XPath或多个jxb:绑定元素,但这不起作用。据我所知,XPath只是没有针对导入的模式进行正确验证,除非将它们全部重写并与DOM一起使用。
因此我解决此问题的方法是在导入的XSD中使用inline customizations。我没有使用多个嵌套导入来测试这种方法,但是如果你有权访问并且有时间修改所有导入的XSD,那么这应该没问题。在我看来,这只有在你需要生成映射时才有必要,并且一旦映射完成就可以从XSD中清除/删除。
答案 2 :(得分:1)
很抱歉,我遇到了这个问题,虽然这是谷歌出现在谷歌上的第一个答案之一,并且没有得到我最终使用的答案。
对于导入的模式,在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”:
<强> customBindings.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
(注意:在源代码中,解决方案似乎更复杂,所以我的情况可能比他们描述的更简单,我发现我的解决方案正在使用它!)