Замена XmlType.namespace с использованием привязок jaxb во время генерации типа - PullRequest
5 голосов
/ 08 апреля 2011

Мое приложение веб-служб перемещается из 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 имели собственное пространство имен, не изменяя сгенерированные файлы вручную каждый раз, когда я их регенерирую (их сотни)?

1 Ответ

1 голос
/ 24 июня 2011

Указание другой настройки xjb с v2 в качестве расположения схемы при создании клиентских классов с помощью wsimport может решить проблему.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...