我的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>
以前这可以通过轴提供的类型映射来解决(我们将其硬编码为大量丑陋的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对象拥有一个自定义命名空间,而不是每次重新生成它们时手动修改生成的文件(有数百个)?
答案 0 :(得分: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>