Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAXB定制—WSDL和schemaLocation中的多个模式_Wsdl_Jaxb - Fatal编程技术网

JAXB定制—WSDL和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

我有一个WSDL,它的“类型”元素中包含3个模式。模式不是在外部XSD中定义的,而是在types元素中定义的

我想在模式2中自定义一个元素,并更改其名称以避免冲突

那么在schemaLocation中我怎么能做到呢?尽管提出了这个问题,我还是有办法做到这一点:

 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更难理解,但可以让它工作。