JAXB自定义 - WSDL和schemaLocation中的多个模式

时间:2010-02-28 14:20:35

标签: wsdl jaxb

我有一个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中引用模式的所有可能性。我需要这个或类似的文档。

非常感谢

3 个答案:

答案 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>