如何告诉wsimport单独的WSDL文件引用相同的对象类?

时间:2011-04-06 14:18:17

标签: jaxb jax-ws xjc wsimport

我有三种不同的JAX-WS服务,它们在服务器上使用相同的类(例如ServiceAServiceBServiceC,所有这些都使用MyCommonClass作为一个参数)。我们正在开发的另一个模块是使用wsimport为这些服务创建客户端,但问题是wsimport为每个服务创建了MyCommonClass的单独实例:

  • com.company.servicea.endpoint.MyCommonClass
  • com.company.serviceb.endpoint.MyCommonClass

我知道我可以使用wsimport -p选项为每个端点指定一个公共包,但是我想将大多数类保存在单独的包中,但只是为了共享某些常见的包。从我所看到的,它听起来像一个JAXB绑定文件可能会有所帮助,但我还没有找到确切的语法来实现所需的结果。我想我需要为每个服务单独的绑定文件(因为我为每个服务调用wsimport一次),看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1" xmlns:tns="http://endpoint.servicea.company.com/">
  <bindings node="//xsd:complexType[@name='myCommonClass']">
    <class name="com.company.model.MyCommonClass"/>
  </bindings>
</bindings>

我是否在正确的轨道上?或者您有解决问题的替代方案吗?

1 个答案:

答案 0 :(得分:2)

在xsd中定义公共类并将其导入服务WSDL。 然后使用模式自定义将此模式中的定义生成到单独的包中,如“com.company.model”

<jxb:bindings
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
   version="1.0">
    <jxb:bindings schemaLocation="model.xsd" node="/xsd:schema">
        <jxb:schemaBindings>
        <jxb:package name="com.company.model"/>
        </jxb:schemaBindings>
</jxb:bindings>

...

参考:http://jax-ws.java.net/jax-ws-21-ea1/docs/customizations.html#2.6_Class_Customization