2

Axis2を使用してWebサービスを実行しています。services.xmlサービスを定義するファイルは次のとおりです 。

<service name="XEWS" scope="transportsession" class="com.mc.xews.XEWS">
<messageReceivers>
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
    <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">com.mc.xews.XEWS</parameter>

私の問題は、API全体が1つのJavaファイルXEWS.javaにあり、このクラスがに送信されることjava2wsdlです。入力として複数のクラスを持つ方法はありjava2wsdlますか?このファイルは、WSDLWebサービスを生成するために使用されます。現在、への入力として1つのクラスのみを使用しているjava2wsdlため、API関数が多数あるため、このクラスは巨大になりました。java2wsdlに複数のファイルを送信する方法を知っていれば、別々のクラスにうまくグループ化できます。このクラスから生成されたJavaDocsドキュメントも読みにくいです。

Webサービスに複数のJavaクラスのAPIを含めることはできますか?

おそらくこれに使用されることになっているextra classesからのオプションパラメータjava2wsdlですか?

4

2 に答える 2

2

いいえ、これはできません。Axis2 生成ツールは Java クラス : WSDL をコード ファーストのアプローチで 1:1 としてマップするためです。仮説的には、複数の Java クラスを単一の WSDL にマップする機能を提供できた可能性があります (生成ツールで追加のパラメーターが必要になります)。

Axis2 は、追加の型 (入力/出力として使用される元の複合型のサブクラス) に「追加クラス」を使用します。

きちんとしたコンパクトなコードが唯一の問題である場合は、必要なすべての操作を 1 つのクラスだけで定義し、実行を特定の適切な (複数の) クラスに委任するようにリファクタリングすることをお勧めします。これはFaçade パターンの適用と考えることができます。

于 2012-12-04T20:43:17.217 に答える
2

WSDL では、最大の名前空間はサービス自体です (そのメソッドは最小です)。WSDL は、ネストされた名前空間をサポートしていません。Java と WSDL の間の最も論理的なマッピングは、WSDL サービスに対する Java クラスです。これが、単一の WSDL を取得するために複数の Java クラスを渡すという要求を不可能にする理由です。いつでも複数の WSDL をホストできますが、それらを個別に生成する必要があります。

w3cの引用:

Related concrete endpoints are combined into abstract endpoints (services)

WSDL を結合するための IMPORT メカニズムがありますが、これは WSDL2Java (またはその他の SOAP クライアント) に対して単一のサービスと見なされるため、依然として単一のサービスを表します。

実装のサイズが気になる場合は、PayPal の Web サービスを参照してください。

于 2012-12-04T18:23:46.007 に答える