2017-02-07 13 views
0

私は、WSDLからApache CXFを使用してクライアントスタブアプリケーションを作成しました。このプロセスは比較的簡単でした。私はSoapUIインターフェースの中でそれをやった。私はWSDLの場所を指定し、CXFにクライアントスタブを生成し、大丈夫と命じました。Apache CXFでのクラス生成はどのように機能しますか?

次に、Eclipseにプロジェクトをインポートし、Apache CXFライブラリを追加し、セキュリティオプション、証明書などを設定しました。
私は、私のwebserviceにいくつかのテストコールを使ってメインを書いてくれました... それは働いた。

私の問題は、それがなぜ機能するのかわかりません。具体的には、Eclipseで実行したときに、CXFクラスが呼び出されていることをデバッグ出力が明確に示しています。私main()

INFO: Loaded configuration file cxf.xml.
org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL


私は

MyServices ss = new MyServices(wsdlURL, SERVICE_NAME); 
port = ss.getWSHttpBindingMyService(); 

を呼び出しています。しかしMyServicesクラスはjavax.xml.ws.Serviceを拡張し、CXFにヒント何もありません。

wsdl2javaもMyServiceインターフェイスと同じパッケージ内にあるMyServiceImplクラスを生成しました。それは良い候補のように見えます。私のmain()では、port.someMethod(someRequest)のようなものを書くことができます。 someMethodをCtrlキーを押しながらクリックして実装に従うと、実際にはMyServiceImplクラスになりますが、そこにはダミーコードしかありません。

public Boolean someMethod(SomeRequest request) { 
      LOG.info("Executing operation"); 
      System.out.println(request); 
      try { 
       Boolean _return = null; 
       return _return; 
      } catch (java.lang.Exception ex) { 
       ex.printStackTrace(); 
       throw new RuntimeException(ex); 
      } 
     } 

したがって、どの実装を使用するかはランタイムに指示する必要があります。しかし、私はそれがどこにあるのか、どれがどれであるのか理解できません。あなたは、クライアントのコードを生成するためにCXFやWSDL2Javaのを使用するかどうか

おかげ

答えて

0

。 クライアントコードは、J2EE仕様に従って生成されます。

生成されるコードはサービスの宣言にすぎず、サービスの実装はサーバー上にあります。

クライアントコードは、webservice wsdlの場所を使用して、サービスとそれによって公開される操作を検索します。

MyServicesにチェックインすると、サービスのURLが表示されます。 例

wsdlLocation = `"http://127.0.0.1/bookstore/services/search?wsdl"` 

おかげ

+0

こんにちは、私は何を求めていることは、それは、クライアント側でCXF実装で生成されたJavaコードをフックアップない方法です。 – TXV

+0

コード内にクライアントインスタンスを作成していますか。つまり、org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy .getClient(port); –

+0

はい、私は 'Client client = clientProxy.getClient(service);' – TXV

関連する問題