JAXB定制—WSDL和schemaLocation中的多个模式
我有一个WSDL,它的“类型”元素中包含3个模式。模式不是在外部XSD中定义的,而是在types元素中定义的 我想在模式2中自定义一个元素,并更改其名称以避免冲突 那么在schemaLocation中我怎么能做到呢?尽管提出了这个问题,我还是有办法做到这一点:JAXB定制—WSDL和schemaLocation中的多个模式,wsdl,jaxb,Wsdl,Jaxb,我有一个WSDL,它的“类型”元素中包含3个模式。模式不是在外部XSD中定义的,而是在types元素中定义的 我想在模式2中自定义一个元素,并更改其名称以避免冲突 那么在schemaLocation中我怎么能做到呢?尽管提出了这个问题,我还是有办法做到这一点: schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2"> ... <jxb:bindings node="some xpath schemaLo
schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2">
...
<jxb:bindings node="some xpath
schemaLocation=“../wsdl文件/mywsdl.wsdl#types?schema2”>
...
JAXBRI v2.1增加了对[Schema Component Designators][1]的支持,从理论上讲,它允许您以符号方式引用模式组件,而不是通过它们的文件位置和xpath位置。原则上,这是更好地使用,但我从来没有用过它自己
然而,我不确定这是否得到广泛支持。除了那篇博文,其他地方很少提到它。它确实提到了它是jaxb2.1的拟议规范的一部分,所以如果通过了,那么它应该由每个jaxb2.1实现实现,包括Java6。不过,有可能它从未真正添加到规范中。也有类似的问题(五种模式的类型都有共同的名称),并且不知何故无法使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>
ant构建文件中的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中模式的位置-如果这是第二个模式
e、 g:mywsdl.wsdl#types2
如果是第10个,那么mywsdl.wsdl#类型10
希望它能帮助别人
<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>
我的问题是schemaLocation值(../wsdl files/mywsdl.wsdl#types?schema2)而不是xpath等。我想知道在wsdl等中引用模式的所有可能性。我需要一份文档。再次感谢您使用什么工具绑定WSDL?您应该编辑您的问题,并将您的评论内容作为“更新:”部分放入其中。然后删除注释。您给出的用于在WSDL文件中指定模式的语法非常糟糕-但它可以工作!在CXF中,我能够使用后缀#types6
进行基于XPATH的节点访问,其中所讨论的模式是文件中的第6个。skaffman建议的SCD确实工作得更好,但您帮助我解决了这个特殊问题,非常感谢!谢谢你,伙计!看起来不错。但是你有什么东西可以描述这些:#类型吗?谢谢@DaUltimateTrooper:SCD的要点是,您不需要在绑定定制中指定模式位置,您可以按名称引用模式元素。从我发现的情况来看,SCD仍然不受正式支持,但Sun的xjc将使用它(如果提供了-extension
选项),并且依赖工具(如CXF)也可以使用它。语法甚至比XPATH更难理解,但可以让它工作。