4

サーバー上で同じクラスを使用する3つの異なるJAX-WSサービスがあります(たとえば、、、ServiceAおよびServiceBServiceCすべてがMyCommonClassパラメーターとして使用されます)。私たちが開発している別のモジュールはwsimport、これらのサービスのクライアントを作成するために使用していますが、問題は、wsimportがMyCommonClassサービスごとに個別のインスタンスを作成することです。

  • com.company.servicea.endpoint.MyCommonClass
  • com.company.serviceb.endpoint.MyCommonClass

このオプションを使用してエンドポイントごとに共通のパッケージを指定できることはわかっていwsimport -pますが、ほとんどのクラスを別々のパッケージに保持したいのですが、特定の共通のパッケージを共有するだけです。私が読んだことから、JAXBバインディングファイルが役立つかもしれないように思えますが、望ましい結果を達成するための正確な構文はまだわかりません。サービスごとに個別のバインディングファイルが必要になると思います(各サービスに対してwsimportを1回呼び出すため)。これは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1" xmlns:tns="http://endpoint.servicea.company.com/">
  <bindings node="//xsd:complexType[@name='myCommonClass']">
    <class name="com.company.model.MyCommonClass"/>
  </bindings>
</bindings>

私は正しい方向に進んでいますか?または、問題に対する代替の解決策はありますか?

4

1 に答える 1

2

xsdで共通クラスを定義し、それをサービスWSDLにインポートします。次に、スキーマのカスタマイズを使用して、このスキーマの定義を「com.company.model」などの別のパッケージに生成します。

<jxb:bindings
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
   version="1.0">
    <jxb:bindings schemaLocation="model.xsd" node="/xsd:schema">
        <jxb:schemaBindings>
        <jxb:package name="com.company.model"/>
        </jxb:schemaBindings>
</jxb:bindings>

..。

参照:http://jax-ws.java.net/jax-ws-21-ea1/docs/customizations.html#2.6_Class_Customization

于 2011-06-24T18:25:26.170 に答える