このレッスンでは、DISH サービスで生成された WSDL ドキュメントを処理し、WSDL ドキュメントで定義されたスキーマに基づいてテーブルデータにアクセスする Java アプリケーションを作成します。
前提条件
このレッスンの内容は、レッスン 1 で行われたステップによって異なります。 レッスン 1:SOAP 要求を受信し SOAP 応答を送信する Web サーバの設定を参照してください。
このレッスンでは、このチュートリアルの開始時に、権限のセクションで一覧されているロールと権限を持っていることを前提としています。 チュートリアル:JAX-WS を使用した SOAP/DISH Web サービスへのアクセス
内容と備考
本書作成時点では、JAX-WS は JDK 1.7.0 に含まれており、JAX-WS の最新バージョンは 2.2.7 でした。次のステップはそのバージョンによって決まります。JDK に JAX-WS が存在するかどうかを確認するには、JDK bin ディレクトリで wsimport アプリケーションをチェックしてください。存在しない場合、 http://jax-ws.java.net/ にアクセスし、最新バージョンの JAX-WS をダウンロードしてインストールします。
このレッスンには、localhost への複数の参照が含まれています。Web クライアントを Web サーバと同じコンピュータで実行していない場合は、localhost の代わりにレッスン 1 の Web サーバのホスト名または IP アドレスを使用します。
コマンドプロンプトで、Java コードと生成ファイル用に新しい作業ディレクトリを作成します。この新しいディレクトリに移動します。
次のコマンドを使用して、DISH Web サービスを呼び出し WSDL ドキュメントをインポートするインタフェースを生成します。
wsimport -keep "http://localhost:8082/demo/WSDish" |
wsimport アプリケーションは、特定の URL から WSDL ドキュメントを取得します。WSDL ドキュメント用のインタフェースを作成するために .java ファイルを生成して、.class ファイルにコンパイルします。
keep オプションは、クラスファイルの生成後に .java ファイルを削除しないことを示します。生成された Java ソースコードを使用すると、生成されたクラスファイルについて理解できます。
wsimport アプリケーションは、現在の作業ディレクトリに localhost\_8082\demo\ws という新しいサブフォルダを作成します。次に、ディレクトリ ws の内容のリストを示します。
EmployeeList.class
EmployeeList.java
EmployeeListDataset$Rowset$Row.class
EmployeeListDataset$Rowset.class
EmployeeListDataset.class
EmployeeListDataset.java
EmployeeListResponse.class
EmployeeListResponse.java
FaultMessage.class
FaultMessage.java
ObjectFactory.class
ObjectFactory.java
package-info.class
package-info.java
WSDish.class
WSDish.java
WSDishSoapPort.class
WSDishSoapPort.java
生成されたソースコードに定義されるデータセットオブジェクトに基づいて、データベースサーバからテーブルデータにアクセスする Java アプリケーションを作成します。
次に、これを実行するサンプル Java アプリケーションを示します。ソースコードを、現在の作業ディレクトリに SASoapDemo.java として保存します。現在の作業ディレクトリには、localhost サブフォルダが含まれている必要があります。
// SASoapDemo.java illustrates a web service client that // calls the WSDish service and prints out the data. import java.util.*; import javax.xml.ws.*; import org.w3c.dom.Element; import org.w3c.dom.Node; import javax.xml.datatype.*; import localhost._8082.demo.ws.*; public class SASoapDemo { public static void main( String[] args ) { try { WSDish service = new WSDish(); Holder<EmployeeListDataset> response = new Holder<EmployeeListDataset>(); Holder<Integer> sqlcode = new Holder<Integer>(); WSDishSoapPort port = service.getWSDishSoap(); // This is the SOAP service call to EmployeeList port.employeeList( response, sqlcode ); EmployeeListDataset result = response.value; EmployeeListDataset.Rowset rowset = result.getRowset(); List<EmployeeListDataset.Rowset.Row> rows = rowset.getRow(); String fieldType; String fieldName; String fieldValue; Integer fieldInt; XMLGregorianCalendar fieldDate; for ( int i = 0; i < rows.size(); i++ ) { EmployeeListDataset.Rowset.Row row = rows.get( i ); fieldType = row.getEmployeeID().getDeclaredType().getSimpleName(); fieldName = row.getEmployeeID().getName().getLocalPart(); fieldInt = row.getEmployeeID().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldInt ); fieldType = row.getSurname().getDeclaredType().getSimpleName(); fieldName = row.getSurname().getName().getLocalPart(); fieldValue = row.getSurname().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldValue ); fieldType = row.getGivenName().getDeclaredType().getSimpleName(); fieldName = row.getGivenName().getName().getLocalPart(); fieldValue = row.getGivenName().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldValue ); fieldType = row.getStartDate().getDeclaredType().getSimpleName(); fieldName = row.getStartDate().getName().getLocalPart(); fieldDate = row.getStartDate().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldDate ); if ( row.getTerminationDate() == null ) { fieldType = "unknown"; fieldName = "TerminationDate"; fieldDate = null; } else { fieldType = row.getTerminationDate().getDeclaredType().getSimpleName(); fieldName = row.getTerminationDate().getName().getLocalPart(); fieldDate = row.getTerminationDate().getValue(); } System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldDate ); System.out.println(); } } catch (Exception x) { x.printStackTrace(); } } } |
このアプリケーションは、サーバが提供するすべてのカラムデータを標準のシステム出力に表示します。
このアプリケーションでは、レッスン 1 で指示すように、SQL Anywhere Web サーバがポート 8082 で受信することを前提としています。import localhost._8082.demo.ws.* コード行の 「8082」 部分を、SQL Anywhere Web サーバを起動したときに指定したポート番号に置き換えます。
このアプリケーションで使用される Java メソッドの詳細については、 http://docs.oracle.com/javase/にある javax.xml.bind.JAXBElement クラス API のマニュアルを参照してください。
次のコマンドを使用して、Java アプリケーションをコンパイルします。
javac SASoapDemo.java |
次のコマンドを使用して、アプリケーションを実行します。
java SASoapDemo |
アプリケーションは、Web サーバに要求を送信し、いくつかのローエントリが含まれたローセットを持つ EmployeeListResult で構成される XML 結果セット応答を受信します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |