我有一个WSDL,其中的“ types”元素中包含3个模式。模式不是在外部XSD中定义的,而是在类型元素中定义的。
我想在模式编号2中自定义元素并更改其名称以避免冲突。
所以在schemaLocation中该怎么做?尽管提出了问题,我还是有办法做到这一点:
schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2">
...
<jxb:bindings node="some xpath
但我不是发现它的人,而是我的一个不再与我合作的同事。即使我理解,是否有资源可以找到其解释?链接还是书?在某个地方,我还可以找到其他示例。
我的问题是schemaLocation值(../wsdl-files/mywsdl.wsdl#types?schema2)而不是xpath。我想知道在WSDL中引用架构的所有可能性。我需要有关此内容的文档。
非常感谢
JAXB Ri v2.1添加了对[模式组件指示符] [1]的支持,从理论上讲,它使您可以象征性地引用模式组件,而不是按文件位置和xpath位置进行引用。原则上,这要好用得多,但我从来没有亲自使用过。
但是,我不确定这有多广泛支持。除了该博客条目外,几乎没有其他提及它。它确实提到它是所提议的JAXB 2.1规范的一部分,因此,如果通过该规范,则应该由包括Java6在内的每个JAXB 2.1实现来实现。但是,有可能它从未真正添加到规范中。
存在类似的问题(具有相同名称的五个模式),并且以某种方式无法使SCD正常工作。我的解决方案是:
custombinding.xml:
<jxb:bindings version="2.1"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jxb:bindings schemaLocation="file:wsdlfile.wsdl" node="*/xs:schema[1]">
<jxb:schemaBindings>
<jxb:package name="my.custom.package"/>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
蚂蚁构建文件中的xjc调用:
<target name="xjc_generate">
<exec executable="xjc" >
<arg value="-wsdl" />
<arg value="${wsdl.base}/service/wsdlfile.wsdl" />
<arg value="-d" />
<arg value="${dir.src}" />
<arg value="-b" />
<arg value="${wsdl.base}/service/custombinding.xjb" />
</exec>
</target>
您需要这样指定wsdl中模式的位置-如果这是第二个模式。
例如:mywsdl.wsdl#types2如果是10号,则为mywsdl.wsdl#types10
希望它可以帮助某人。
<jxb:bindings version="2.1"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<jxb:bindings schemaLocation="../wsdl-files/mywsdl.wsdl#types2" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="my.custom.package"/>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>