我有一个WSDL,其中包含3个模式的“types”元素。模式不在外部XSD中定义,而是在types元素中定义。
我想自定义架构编号2中的元素并更改其名称以避免冲突。
所以在schemaLocation中我该怎么做?尽管提出了问题,我仍然可以这样做:
schemaLocation="../wsdl-files/mywsdl.wsdl#types?schema2">
...
<jxb:bindings node="some xpath
但我不是那个找到它的人,而是我的同事,不再与我合作了。是否有资源我可以找到它的解释,即使我理解它?一个链接还是一本书?我可以在其他地方找到其他例子。
我的问题是schemaLocation值(../ wsdl-files / mywsdl.wsdl #s types?schema2)而不是xpath。我想知道在WSDL中引用模式的所有可能性。我需要这个或类似的文档。
非常感谢
答案 0 :(得分:3)
JAXB Ri v2.1增加了对[Schema Component Designators] [1]的支持,理论上它允许您以符号方式引用模式组件,而不是它们的文件位置和xpath位置。原则上,使用起来要好得多,但我自己从未使用过它。
但是,我不确定这是多么广泛的支持。除了那篇博客文章之外,其他任何地方都没有提及它。它确实提到它是JAXB 2.1的建议规范的一部分,所以如果通过它,它应该由每个JAXB 2.1实现实现,包括Java6。但是,它可能从未实际添加到规范中。答案 1 :(得分: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>
在ant build文件中调用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>
答案 2 :(得分:0)
您需要这样指定wsdl中模式的位置-如果这是第二个模式。
例如:mywsdl.wsdl#types2
如果是第十,则为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>