1

バックグラウンド :

以前に Apache CXF Web サービスを使用した経験がありますが、Apache CXF ディストリビューションに付属する wsdl2java ツールを使用してサービス エンドポイント インターフェイス (SEI) とサービス実装を生成するのは初めてです。

タスク :

私は現在、外部システムによって消費される SOAP ベースの Web サービスの実装に取り​​組んでいます。メッセージ (XSD) と WSDL ファイルは既に定義済みです。Apache CXF の wsdl2java ツールを使用して SEI を生成しようとしました。SEI は、入力パラメーターとして JAXB 型を使用して正しく生成され、型が Web サービス メソッドに返されます。

サービス実装クラス用に生成されたコードを見ると、javax.xml.ws.Service クラスを拡張していることがわかります。また、メソッド名に「Soap12Http」が追加されたサービス エンドポイント インターフェイスのメソッドと同じ名前を持つ、オーバーロードされたメソッドが多数生成されます。これらのメソッドのいくつかは、タイプ WebServiceFeature... features のパラメーターを受け取りますが、他のメソッドはパラメーターを受け取りません。例 :

public class Query extends Service {

        @WebEndpoint(name = "product_query-soap12-http")
    public IQuery getProductsSoap12Http(WebServiceFeature... features) {
        return super.getPort(getProductsSoap12Http, IQuery.class,features);
    }
}

*ここで、IQuery はサービス エンドポイント インターフェイスです

問題 :

  1. javax.xml.ws.Service を拡張する代わりに、サービス実装クラスがサービス エンドポイント インターフェイスを実装することを期待していました。これは有効な期待ですか?
  2. サービス実装クラスがサービス エンドポイント インターフェイスからメソッドを実装することを期待していました。これは有効な期待ですか?
  3. また、クラス ファイルとして生成する代わりに、wsdl2java コマンドで JAXB POJOS 用の jar を生成するように要求できるかどうかも知りたいです。
4

1 に答える 1

1

1 と 2 については、答えはノーです。生成された XXXXService クラスは、WSDL 内のさまざまな SEI のプロキシのファクトリです。wsdl 内のエンドポイント/バインディング/ポートタイプの組み合わせごとに、サービス オブジェクトに対する一連の「getXYZPort(...)」呼び出しが発生し、その特定の SEI のインスタンスが返されます。

3 については、-clientjar オプションが先週 cxf のツールに追加されました (まだリリースされていません。最新のスナップショットが必要です)。これは、必要なものに近い可能性があります。

于 2013-03-11T13:06:57.723 に答える