【问题标题】:change package of generated jaxb class更改生成的 jaxb 类的包
【发布时间】:2012-01-08 22:22:10
【问题描述】:

我在 wsdl 中定义了以下数据类型:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0">
            <xs:simpleType name="MyEnum">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="one"/>
                    <xs:enumeration value="two"/>
                </xs:restriction>
            </xs:simpleType>
            <!-- SNIP other data types -->
        </xs:schema>
    </wsdl:types>
</wsdl:definitions>

我希望 MyEnum 属于它自己的包。于是,我使用了一个jaxws绑定文件,并使用XPATH遍历schema和jaxb绑定设置包,如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws">
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']">
      <jxb:schemaBindings>
          <jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace-->
      </jxb:schemaBindings>
      <jxb:bindings node="//xs:simpleType[@name='MyEnum']">
          <jxb:package name="a.b.c"/> <!-- this does not work -->
      </jxb:bindings>
    </jaxws:bindings>
    <!-- SNIP - other functional jaxws bindings -->
</jaxws:bindings>

现在,schemaBindings 中设置的路径采用 - 并将该模式​​/目标命名空间中的所有数据类型放入包 abra.ca.dabra。但是,我似乎无法只设置 MyEnum 的包——这正是我想要的。

我使用 cxf 的 wsdl2java 来提供绑定文件。我错过了什么吗?

【问题讨论】:

  • 我遇到了同样的问题。你的解决了吗?
  • 绑定文件不正确:命名空间前缀“jaxws”未绑定到任何命名空间。
  • 类似,前缀'xs'未绑定。
  • 根据 wsdl2java (Apache CXF 2.6.1) 的输出,您不能将“类型”指定为绑定节点。它必须是一个“模式”。这就是您的“abra.ca.dabra”示例有效以及“MyEnum”失败的原因。因此,问题与“枚举”类型相关。其他所有类型的节点也会失败。

标签: java jaxb jax-ws cxf wsdl2java


【解决方案1】:

您是否尝试将第二个模式添加到仅包含 MyEnum 的 WSDL,但具有不同的命名空间?然后,原始模式定义应从新命名空间中导入该类型。

【讨论】:

    【解决方案2】:

    我会尝试这样的:

    <jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
    
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
    
    <!-- set default package structure -->
    <jaxws:package name="abra.ca.dabra" />
    
    <!-- set package structure for complex schema types -->
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:simpleType[@name='MyEnum']">
        <jaxb:schemaBindings>
            <jaxb:package name="a.b.c" />
        </jaxb:schemaBindings>
    </jaxws:bindings>
    

    更准确地说,您应该使整个 wsdl 可用

    希望这会有所帮助......

    【讨论】:

      猜你喜欢
      • 2016-08-10
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多