java - 更改生成的 jaxb 类的包

标签 java jaxb jax-ws cxf wsdl2java

我在 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绑定(bind)文件,使用XPATH遍历schema和jaxb绑定(bind)来设置包,如下:

<?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 中设置的路径采用 - 并将该架构/目标 namespace 中的所有数据类型放入包 abra.ca.dabra 中。但是,我似乎无法设置 MyEnum 的包——这正是我想要的。

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

最佳答案

我会用这样的东西来尝试:

<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 可用

希望这有助于...

关于java - 更改生成的 jaxb 类的包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8313122/

相关文章:

java - 如何使用 ConcurrentHashMap 执行线程安全的获取然后删除?

java - 在启动时向 JApplet 添加组件

java - 将命名空间设置为 @XmlRootElement 时解码失败且没有错误

java - JaxB 将属性解码到 HashMap 中

web-services - 如何获取证书信息

java - 棋盘格不显示?应用程序部分只是黑色?

java - Eclipse e4 应用程序 - 包含在插件中时未找到 ContextFactory

java - CXF ClassNotFoundException : javax. ws.rs.MessageProcessingException 异常

web-services - 未部署 Websphere 8.5 Web 服务

Java Swing 范围 slider 用户界面