6

我的 Web 服务应用程序正在从 Axis 迁移到 JAX-WS,我在进行某些转换时遇到了麻烦。我的主要问题是我有几个相同类型的 XSD,它们的定义略有不同,但名称相同。在我的 wsimport 期间,我能够使用外部 JAXB 绑定文件来解析包,但生成的类仍然以相同的 @XmlType 注释结束。

V1:

package com.service.v1.bill.request;
@XmlType(name = "FileBillReqType", namespace = "http://epayments.metavante.com/types/bill/request"})
public class FileBillReqType extends AbstractContextMethodRequest...

V2:

package com.service.v2.bill.request;
@XmlType(name = "FileBillReqType", namespace = "http://epayments.metavante.com/types/bill/request"})
public class FileBillReqType extends AbstractContextMethodRequest...

捆绑:

<jaxb:bindings schemaLocation="file:../wsdl/v1/bill/BillRequest.xsd" 
    node="/xs:schema[@targetNamespace='http://service.example.com/bill/request']">
    <jaxb:schemaBindings>
        <jaxb:package name="com.service.v1.bill.request" />
    </jaxb:schemaBindings>
</jaxb:bindings>

以前,这可以通过axis提供的类型映射来解决(我们将其硬编码成一个非常丑陋的wsdd):

<service name="v1" provider="java:RPC" style="document" use="literal">...
<typeMapping
    xmlns:ns="http://service.example.com/bill/request"
    qname="ns:FileBillReqType"
    type="java:com.service.v1.bill.request.FileBillReqType"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""
  />...

有没有办法让我生成的 JAXB 对象拥有一个自定义命名空间,而无需在每次重新生成它们时手动修改生成的文件(有数百个)?

4

1 回答 1

1

在使用 wsimport 生成客户端类时,使用 v2 指定另一个 xjb 定制作为模式位置可能会解决该问题。

<jaxb:bindings schemaLocation="file:../wsdl/v2/bill/BillRequest.xsd"
node="/xs:schema[@targetNamespace='http://service.example.com/bill/request']">
    <jaxb:schemaBindings>
        <jaxb:package name="com.service.v2.bill.request" />
    </jaxb:schemaBindings>
</jaxb:bindings>
于 2011-06-24T18:11:22.647 回答