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 オブジェクトを再生成するたびに手動で変更せずに、生成された 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 に答える