开发者

Replacing XmlType.namespace using jaxb bindings during type generation

开发者 https://www.devze.com 2023-02-22 22:04 出处:网络
My web-services application is moving from Axis to JAX-WS and I\'m having trouble doing some of the conversions.My primary issue is that I have several XSD\'s with the same types defined slightly diff

My web-services application is moving from Axis to JAX-WS and I'm having trouble doing some of the conversions. My primary issue is that I have several XSD's with the same types defined slightly differently, but with the same names. During my wsimport I'm able to use an external JAXB bindings file to resolve the packages, but the generated classes still end up with the same @XmlType annotations.

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.bil开发者_开发百科l.request;
@XmlType(name = "FileBillReqType", namespace = "http://epayments.metavante.com/types/bill/request"})
public class FileBillReqType extends AbstractContextMethodRequest...

Binding:

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

Previously this would have been resolved with the type mappings provided by axis (which we hard coded into a massively ugly 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=""
  />...

Is there anyway to get my generated JAXB objects to have a custom namespace without modifying the generated files manually every time I regenerate them (there are hundreds)?


Specifying another xjb customization with v2 as schema location while generating the client classes using wsimport might solve the problem.

<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>
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号