wsdl - 结合 JAXB 和 JAXWS 以获取导入的 XML 模式

标签 wsdl xsd jaxb jax-ws wsimport

如何在使用 wsimport 时为 WSDL 中导入的 XSD 指定 JAXB 绑定(bind)?

我尝试了以下绑定(bind),这会导致错误“XPath evaluation of//xs:element[@name='isFoobar'] results in an empty target node”。

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="example.wsdl"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    <jaxws:bindings node="wsdl:definitions">
        <jaxws:bindings node="wsdl:types" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
            <jaxws:bindings
                node="//xs:schema[@targetNamespace='http://www.example.org/']">
                <jaxb:globalBindings>
                    <xjc:serializable uid="10000001" />
                </jaxb:globalBindings>
                <jaxb:bindings
                    node="//xs:element[@name='isFoobar']">
                    <jaxb:typesafeEnumClass name="IsFoobar">
                        <jaxb:typesafeEnumMember value="01" name="TRUE" />
                        <jaxb:typesafeEnumMember value="02" name="FALSE" />
                    </jaxb:typesafeEnumClass>
                </jaxb:bindings>
            </jaxws:bindings>
        </jaxws:bindings>
    </jaxws:bindings>
</jaxws:bindings>

有什么想法吗?

最佳答案

很抱歉死线程,我遇到了这个问题,虽然这是在谷歌上出现的第一个答案,其中包含各种关键字组合,但它并没有包含我最终使用的答案。


对于导入的模式,在 WSDL 中对导入的 XSD 指定 JAXB 绑定(bind)的最简单方法是……将其视为完全不同的模式!

简短示例:

MyXSD.xsd

<xsd:schema targetNamespace="whatever"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="ThingThatNeedsToBeBound">
        <!-- Whatever this is made of -->
    </xs:complexType>
</xsd:schema>

无论这个 xsd 是在哪里导入的(它是在我的 wsdl 的根目录还是在嵌套导入中),我需要写的所有我需要写的来绑定(bind)我的自定义绑定(bind)中的“ThingThatNeedsToBeBound”是:

customBindings.xml

<jaxb:bindings schemaLocation="Path/To/MyXSD.xsd" node="/xs:schema/xs:complexType[@name='ThingThatNeedsToBeBound']">
    <!-- your custom binding -->
</jaxb:bindings>

所以,这就像一个常规案例,只是您指定了 schemaLocation,但是您可以将导入的架构本身视为一个整体,而不是某些东西的一部分。

我希望这能帮助其他遇到这个问题的人。


来源:http://www.oracle.com/technetwork/articles/grid/jax-ws-jaxb-customization-082750.html

(注意:在源代码中,解决方案似乎要复杂得多,所以我的案例可能比他们描述的要简单,但我发现我的解决方案仍然使用它!)

关于wsdl - 结合 JAXB 和 JAXWS 以获取导入的 XML 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484345/

相关文章:

ruby - 如何使用 WSDL 并在 Ruby 中实现 SOAP 服务器?

java - 来自 XML Java Jaxb 的 XSD

java - 以编程方式从表示 xsd 架构的字符串创建 java 类

xml - XSD 架构 - 多次使用相同的 namespace

java - 为什么 Jackson 序列化到 XML 中的命名空间结构不正确

java - 如何配置 axis2-java2wsdl-maven-plugin 使用多个类生成一个 wsdl?

soap - 带有键/值对的 WSDL 枚举限制

java - JAXB 将分组元素添加到列表中,类似于 .NET

Maven jaxb2 :xjc failing to generate code

python - 用Python的spyne修改soap webservice中的WSDL