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