Axis2のWebサービスクライアントを開発するには、3つの方法

RPC第1の実施形態では、クライアントコードが生成されていません

第二に、ドキュメントモード、クライアントコードが生成されていません

第三に、WSDL2Javaツールを使用してクライアントの呼び出しを生成します

パッケージsamples.quickstart.client。  
  
輸入javax.xml.namespace.QName;  
輸入org.apache.axiom.om.OMAbstractFactory。  
輸入org.apache.axiom.om.OMElement;  
輸入org.apache.axiom.om.OMFactory。  
輸入org.apache.axiom.om.OMNamespace。  
輸入org.apache.axis2.AxisFault;  
輸入org.apache.axis2.addressing.EndpointReference。  
輸入org.apache.axis2.client.Options。  
輸入org.apache.axis2.client.ServiceClient;  
輸入org.apache.axis2.rpc.client.RPCServiceClient;  
輸入samples.quickstart.StockQuoteServiceStub;  
インポートsamples.quickstart.xsd.GetPrice;  
 インポートsamples.quickstart.xsd.GetPriceResponse、   
  
パブリック クラスStockQuoteClient {   
  
  / **  
   *方法:
   この方法のRPCアプリケーションがリモート・コールを呼び出すことと等価である*、
   *伝えるすなわち遠隔に位置するURLサーバー、結果を取得し、リモートサービスを呼び出し、メソッド名とパラメータを通知します。
   Webサービスと呼ばれる*使用org.apache.axis2.rpc.client.RPCServiceClientクラス
   * 
    [注:
     
        メソッドが呼び出された場合Webサービスの戻り値は、メソッドをinvokeBlocking使用する必要があり、3つのパラメータ持つ
          QNameオブジェクトが表す最初のパラメータの型があるのメソッド名を呼び出すために、
          第2のパラメータは、Webサービスメソッドと呼ばれるパラメータ値を表す、Object型のパラメータを[]; 
            この方法は、パラメータを取らない場合、対策をinvokeBlocking第2のパラメータ値が新しいオブジェクトを使用する、nullにすることはできません[] {}。
          3番目のパラメータは] [戻り型Webサービスクラスオブジェクトメソッド、タイプクラスのパラメータを示しています。
         
         
        この方法は、invokeRobust使用方法のWebServiceの戻り値と呼ばれていない場合は
          その2つのパラメータのみ、その意味invokeBlocking方法と同じ意味の最初の2つのパラメータを。
 
        あなたはQNameオブジェクトを作成すると、クラスの最初のパラメータQNameコンストラクタは、WSDLファイルの名前空間名が代表
        であるの<wsdl:定義>要素のtargetNamespace属性値。
   * 
   * /   
  公共の 静的な 無効testRPCClient(){  
     試み{  
       // AXIS1サーバ  
 // 文字列のURL = " HTTP:// localhostを:8080 /のStockQuote /サービス/ StockQuoteServiceSOAP11port WSDLの?";  
       // Axis2のサーバーの   
      文字列のURL =「HTTP ?:// localhostを:8080 / axis2ServerDemo /サービス/ WSDLのStockQuoteService " ;   
  
      //は、RPC呼び出しWebサービスを使用します  
      ServiceClient = RPCServiceClient 新しい新RPCServiceClient();  
       // のWebサービスURLを呼び出す指定   
      のEndpointReference targetEPR = 新しい新;のEndpointReference(URL)   
      オプションオプション = serviceClient.getOptionsを();  
       //は、対象サービスのアドレスを決定   
      options.setTo(targetEPRを);  
       //は、コールを決定メソッド   
      options.setAction(「URN:getPrice」);   
  
      / **  
       *呼び出される名前空間getPriceメソッドとWSDLファイル
       のAxis2書かれたことにより、Webサービスのサービス終了の場合* 
       ご質問*名前空間の不整合が発生する
       * org.apache.axis2を。 AxisFault:java.lang.RuntimeException:予期しないサブエレメントのarg0に
       * /  
      QNameのQName = 新しい新規のQName( "HTTP://quickstart.samples/xsd"は、 "getPriceは" );  
       // 指定されたパラメータは、getPriceメソッド値   
      オブジェクトを[] =パラメータ新しい新しいオブジェクト[] { "13は" };   
        
      // 指定getPriceメソッドの戻り値のデータ型クラスオブジェクト   
      クラス[] = returnTypes 新しい新しいクラス[] { ダブルクラス};   
  
      //は、パラメータを渡す方法を呼び出し、サービスコール、サービスリターン結果セットが取得   
      = OMElement要素を(のQNameをserviceClient.invokeBlocking、パラメータ);  
       // 結果はOMElementは、オブジェクトパッケージxml文字列セクションで返されていることは注目に値します。  
      // 私たちは柔軟なアプリケーションのために、ここで私は、最初の要素の値を取り、それを印刷することができます。メソッド呼び出しが結果を返すので   
      文字列の結果を=element.getFirstElement()のgetText();.   
      のSystem.out.println(結果);   
  
      // 方法2 getPriceメソッドを呼び出すとのメソッドの戻り値出力   
      =オブジェクト[]レスポンス(QNameで、パラメータ、returnTypes)serviceClient.invokeBlocking;  
       / / 文字列R&LT =(文字列)応答[0];   
      ダブルR&LT =(ダブル)応答[0 ];   
      のSystem.out.println(R&LT);   
  
    } キャッチ(AxisFault E){   
      e.printStackTrace();   
    }   
  }   
  
  / **  
   *方法2:アプリケーションのドキュメント(ビルド要求メッセージ)を呼び出し
   、退屈で柔軟にducument道となりましたアプリケーション*。今、より多くのと。本当に私たちはのカップルを取り除くためにしたくないので
   * /   
  パブリック 静的な 無効)testDocument({  
     試み{  
       // 文字列のURL = " のhttp:// localhostを:8080 / axis2ServerDemo /サービス/のStockQuoteService"。  
      文字列のURL = "のhttp:// localhostを:?8080 /のStockQuote /サービス/ StockQuoteServiceSOAP11port WSDL" 
  
      オプションオプション = 新しいオプション();  
      // 指定调用Webサービス的URL   
      のEndpointReference targetEPR = 新しいれるEndpointReference(URL);  
      options.setTo(targetEPR)。  
      // options.setAction( "URN:getPrice");  
  
      ServiceClient送信者 = 新しいServiceClient();  
      sender.setOptions(オプション)。  
        
        
      OMFactory FAC =OMAbstractFactory.getOMFactory();   
      文字列TNS =「HTTP://quickstart.samples/」;  
       // 名前空間は、時々 、名前空間は時々何かが起こるので、あなたが知っている、罰金を増やしますが、最高のプラスしません 
       // 最初の名前空間のアドレスパラメータ、2番目のパラメータは、名前空間接頭辞です 
      OMNamespace omNs = fac.createOMNamespace(TNS、「」);  
       // 最初のパラメータは、タグ名を構築することです、2番目のパラメータは、名前空間である 
      OMElement方法= fac.createOMElement ( "getPrice" 、omNs);   
      OMElementシンボル = fac.createOMElement( "シンボル" 、omNs);
       // 値が提供されるタグ   
      symbol.setTextを( "13が" );  
       // symbol.addChild(fac.createOMText(記号「Axis2のエコー文字列「)); 
      // サブラベルを追加
      method.addChild(シンボル);  
       // 建設パケット
      method.build();  
       // 送信メッセージ要求戻り   
      OMElement結果= sender.sendReceive(方法)   
  
      のSystem.out.println(結果);   
  
    } キャッチ(AxisFault AxisFault) {   
      axisFault.printStackTraceは();   
    }   
  }   
  
 / **  
  * SOAPヘッダは、検証情報として設定
  *あなたのサーバーが確認されなかった場合、その後、あなたはヘッダの認証情報を増加させない
  * 
  * @param ServiceClientは
  * @param TNS命名しますスペース
  * @param ユーザー
  * @param passwrod 
   * /  
  公共 ボイドaddValidation(ServiceClient serviceClient、文字列TNS、文字列のユーザは、文字列passwrod){   
    OMFactory FAC = OMAbstractFactory.getOMFactory()。  
    OMNamespace omNs = fac.createOMNamespace(TNS、 "NSL" )。  
    OMElementヘッダ = fac.createOMElement( "AuthenticationToken" 、omNs)。  
    OMElement ome_user = fac.createOMElement( "ユーザ名" 、omNs)。  
    OMElement ome_pass = fac.createOMElement( "パスワード" 、omNs)。  
      
    ome_user.setText(ユーザ)。  
    ome_pass.setText(passwrod)。  
      
    header.addChild(ome_user)。  
    header.addChild(ome_pass)。  
  
    serviceClient.addHeader(ヘッダ);   
  }   
  
    
  / **  
   *三つの方法:プラグインジェネレータのAxis2クライアント呼び出し使用
   * 
   * /   
  パブリック 静的 ボイド)({testCodeClientを  
     試み{   
      文字列のURL // localhostを:8080 / axis2ServerDemo /サービス=」HTTPを/のStockQuoteService " ;   
      StockQuoteServiceStubスタブ = 新しい新しいStockQuoteServiceStub(URL);   
      GetPriceリクエスト = 新しい新しいGetPrice();   
      request.setSymbol( " ABCD」);   
      GetPriceResponse応答 = stub.getPrice(リクエスト)。  
      System.out.println(response.get_return())。  
    }キャッチ(org.apache.axis2.AxisFault E){   
      e.printStackTrace();  
    } キャッチ(java.rmi.RemoteExceptionの電子){   
      e.printStackTrace();  
    }   
  
  }   
  
  パブリック 静的 ボイドメイン(文字列[]引数){   
     StockQuoteClient.testRPCClient()。  
// StockQuoteClient.testDocument();  
    // StockQuoteClient.testCodeClient();  
  
  }   
}  

WSDL2 WSDLに基づいて対応するサーバとクライアントのコード生成ツールを生成するためのJava。

 wsdl2java.batコマンドは、<Axis2のインストールディレクトリ> / binにディレクトリで見つけることができます。
 値が<Axis2のインストールディレクトリ>は、環境変数を設定するコマンドwsdl2java.batのAXIS2_HOMEの必要性を使用する前に。
 たとえば、次の呼び出しを生成するには、Windowsのコマンドラインコンソール出力、中のWebServiceコード:
 %AXIS2_HOME%\ binに\ WSDL2Javaの-uri  HTTP:// localhostを:?8080 /のAxis2 /サービス/ HelloService WSDL  -P -s -oクライアントスタブ
 WSDLファイルがローカルパス、またはネットワークパスすることができ-urlパラメータを指定パス。
 -pパラメータを指定生成されたJavaクラスの名前は、-oパラメータは、ルートディレクトリに保存された一連の文書の生成を指定します。
 上記のコマンドの実装が完了した後、あなたはより多くのスタブ・ディレクトリのカレントディレクトリよりも、わかります
 あなたはHelloServiceStub.javaファイルのスタブ/ SRC /クライアントディレクトリを見つけることができ、
 ファイルは複雑なコールWebServiceがある、あなたはプログラムでこのクラスを直接使用することができます

 

次のように一般的なオプションを使用している:
-o <パス>:指定生成されたコードの出力経路
-a:非同期モードで生成されたコードは
-s:同期パターンコードを生成する
-p <PKG>:指定したパッケージ・コードの名前
-l <languange >:(使用言語デフォルトであるのJava / C)のJava
-t:コードに対するテストケースを生成する
サーバ側コード生成しないデフォルトで生成:-ss
-sd:世代サービス記述ファイルservices.xmlのは、唯一-ssと併せて使用することが
-d <データバインディング>:指定しdatabingding、例えば、ADB、XMLBeanの、JiBXの、及びJaxMe JaxBRI
-g:生成サービスとクライアントコード
-pn <port_name>:複数のWSDLポートは、存在する場合、前記指定されたポート
-sn < serv_name>:WSDLサービスの選択
-u:データバインディングのクラス拡張
指定リポジトリ生成するためのコード:-r <path>は
、サーバ実装するインタフェースクラスコード生成:-ssiを
-Sする:指定したメモリの生成のためのソースをパス
-R:指定されたストレージパス生成のためのリソース
-noBuildXML:build.xmlファイルには、出力は生成されません
-noWSDLを:resourcesディレクトリにWSDLファイルを生成しません
-noMessageReceiver:クラスが生成されないMessageReceiver

 

転載します。https://blog.csdn.net/zhangmeng_07/article/details/54694277

公開された407元の記事 ウォンの賞賛2 ビュー6795

おすすめ

転載: blog.csdn.net/qq_29860591/article/details/104788723