Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド

11g リリース1 (10.3.6)

B61647-05(原本部品番号:E13760-06)

目次

タイトルおよび著作権情報

はじめに

- ドキュメントのアクセシビリティについて

- 表記規則

1 概要

2 ユース・ケースとサンプル

- 簡単なHelloWorld Webサービスの作成

- サンプルHelloWorldImpl.java JWSファイル

- HelloWorldImpl.javaのサンプルAntビルド・ファイル

- ユーザー定義のデータ型を使用するWebサービスの作成

- サンプルBasicStruct JavaBean

- サンプルComplexImpl.java JWSファイル

- ComplexImpl.java JWSファイルのサンプルAntビルド・ファイル

- WSDLファイルからのWebサービスの作成

- サンプルWSDLファイル

- サンプルTemperaturePortType Java実装ファイル

- TemperatureServiceのサンプルAntビルド・ファイル

- Java SEクライアントからのWebサービスの呼出し

- サンプルJavaクライアント・アプリケーション

- Javaクライアント・アプリケーションをビルドするためのサンプルAntビルド・ファイル

- WebLogic WebサービスからのWebサービスの呼出し

- サンプルClientServiceImpl.java JWSファイル

- ClientServiceをビルドするためのサンプルAntビルド・ファイル

3 WebLogic Webサービスの開発

- WebLogic Webサービス・プログラミング・モデルの概要

- Webサービス機能用のドメイン構成

- Javaから開始するWebLogic Webサービスの開発: 主な手順

- WSDLファイルから開始するWebLogic Webサービスの開発: 主な手順

- 基本的なAnt build.xmlファイルの作成

- jwsc WebLogic WebサービスAntタスクの実行

- jwscの使用例

- jwscの高度な使用方法

- wsdlc WebLogic WebサービスAntタスクの実行

- wsdlcで生成される途中まで作成済みのJWS実装クラス・ファイルの更新

- WebLogic Webサービスのデプロイとアンデプロイ

- wldeploy Antタスクを使用したWebサービスのデプロイ

- 管理コンソールを使用したWebサービスのデプロイ

- WebサービスのWSDLの参照

- 動的なWSDLで指定されたサーバー・アドレスの構成

- Webサービスがコールバック・サービスでなく、HTTP/Sを使用して呼び出せる場合

- Webサービスがコールバック・サービスでなく、JMSトランスポートを使用して呼び出せる場合

- Webサービスがコールバック・サービスである場合

- Webサービスがプロキシ・サーバーを使用して呼び出せる場合

- Webサービスのテスト

- WebサービスのWebLogic分割開発ディレクトリ環境への統合

4 JWSファイルのプログラミング

- JWSファイルとJWSアノテーションの概要

- JWSファイルのJava要件

- JWSファイルのプログラミング: 一般的な手順

- JWSファイルの例

- JWSファイルがWebサービスを実装することの指定(@WebServiceアノテーション)

- WebサービスとSOAPメッセージ・プロトコルのマッピングの指定(@SOAPBindingアノテーション)

- Webサービスのコンテキスト・パスとサービスURIの指定(@WLHttpTransportアノテーション)

- JWSメソッドをパブリック操作として公開することの指定(@WebMethodおよび@OneWayアノテーション)

- 操作のパラメータとWSDL要素のマッピングのカスタマイズ(@WebParamアノテーション)

- 操作の戻り値とWSDL要素のマッピングのカスタマイズ(@WebResultアノテーション)

- Webサービスの実行時情報へのアクセス

- JwsContextを使用した実行時情報へのアクセス

- Webサービス・コンテキストへのアクセスに関するガイドライン

- JwsContextのメソッド

- Stubインタフェースを使用した実行時情報へのアクセス

- ステートレス・セッションEJBを実装すべき場合

- JWSファイルでEJBを実装する場合のプログラミングのガイドライン

- EJBを実装するJWSファイルの例

- ユーザー定義のJavaデータ型のプログラミング

- 例外のスロー

- JWSファイルからの別のWebサービスの呼出し

- JWSアノテーションおよびAPIによるその他の機能のプログラミング

- MTOM/XOPを使用したバイナリ・データの送信

- SOAP添付ファイルのストリーミング

- SOAP 1.2の使用

- トランザクション内で実行する操作の指定

- HttpServletRequest/Responseオブジェクトの取得

- JWSプログラミングのベスト・プラクティス

5 データ・バインディングの理解

- データ・バインディングの概要

- サポートされる組込みデータ型

- 組込みデータ型のXML-to-Javaマッピング

- 組込みデータ型のJava-to-XMLマッピング

- サポートされるユーザー定義のデータ型

- サポートされるユーザー定義のXMLデータ型

- サポートされるユーザー定義のJavaデータ型

6 Webサービスの呼出し

- Webサービスの呼出しの概要

- JAX-RPCを使用したWebサービスの呼出し

- Webサービスを呼び出すクライアントの例

- Java SEクライアントからのWebサービスの呼出し

- クライアントのアーティファクトを生成するためのclientgen Antタスクの使用

- Webサービスに関する情報の取得

- Webサービスを呼び出すJavaクライアント・アプリケーション・コードの記述

- クライアント・アプリケーションのコンパイルと実行

- JavaクライアントのサンプルAntビルド・ファイル

- 別のWebサービスからのWebサービスの呼出し

- Webサービス・クライアントのサンプルbuild.xmlファイル

- Webサービスを呼び出すサンプルJWSファイル

- Webサービス呼出し時のスタンドアロン・クライアントJARファイルの使用

- Webサービス呼出し時のプロキシ・サーバーの使用

- HttpTransportInfo APIを使用したプロキシ・サーバーの指定

- システム・プロパティを使用したプロキシ・サーバーの指定

- Webサービスを再デプロイする際にクライアント側で考慮すべき事項

- WebLogic Webサービスのスタブ・プロパティ

- レスポンスSOAPメッセージの文字エンコーディングの設定

7 Webサービスの管理

- WebLogic Webサービスの管理タスクの概要

- 管理ツール

- 管理コンソールの使用

- 管理コンソールの起動

- 管理コンソールでのWebサービスの表示

- Webサービスのセキュリティ構成の作成

- Webサービスとクライアントのモニター

- Oracle Enterprise Manager Fusion Middleware Controlの使用

- WebLogic Scripting Toolの使用

- WebLogic Antタスクの使用

- Java Management Extensions (JMX)の使用

- Java EEデプロイメントAPIの使用

- ワーク・マネージャによるWebサービス作業の優先付けとスタック実行スレッドの削減

8 WebLogic Webサービスの旧リリースから10.3.xへのアップグレード

- 9.2または10.0のWebLogic Webサービスを10.3.xにアップグレード

- 9.0または9.1のWebLogic Webサービスを10.3.xにアップグレード

- 8.1のWebLogic Webサービスを10.3.xにアップグレード

- Javaクラス実装の8.1のWebLogic Webサービスを10.3.xにアップグレード: 主な手順

- 8.1のJavaファイルと対応する10.3.xのJWSファイルの例

- 8.1と更新された10.3.xのAntビルド・ファイルの例(Javaクラス実装のWebサービス)

- EJB実装の8.1のWebLogic Webサービスを10.3.xにアップグレード: 主な手順

- 8.1のEJBファイルと対応する10.3.xのJWSファイルの例

- 8.1と更新された10.3.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)

- servicegen属性とJWSアノテーションまたはjwsc属性のマッピング

Oracle® Fusion Middleware

Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド

11g リリース1 (10.3.6)

B61647-05(原本部品番号:E13760-06)

2013年3月

このドキュメントでは、ソフトウェア開発者を対象に、Java API for XML-based RPC (JAX-RPC)を使用してWebLogic Webサービスを開発する方法について説明します。

Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービス・スタート・ガイド, 11g リリース1 (10.3.6)

B61647-05

Copyright © 2007, 2013, Oracle and/or its affiliates.All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007).Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

はじめに

ここでは、このガイド『Oracle WebLogic Server JAX-RPCを使用したWebサービス・スタート・ガイド』で使用されるドキュメント・アクセシビリティ機能と表記規則について説明します。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

表記規則

このドキュメントでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

斜体

イタリックは、ユーザーが特定の値を指定するプレースホルダー変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 概要

この章では、Java API for XML RPC (JAX-RPC)を使用してWebLogic Webサービスをプログラミングするソフトウェア開発者が作業を開始するためのトピックをまとめた表を示します。

JAX-RPCは、XMLベースのリモート・プロシージャ呼出し(RPC)を行うためのJava APIを定義した仕様です。特に、これらのAPIは、SOAP 1.1(分散型環境で情報を交換するためのXMLベースのプロトコル)を使用してWebサービスを呼び出したり、Webサービスからレスポンスを取得したりするのに使用されます。詳細は、http://java.net/projects/jax-rpc/を参照してください。

注意:

JAX-WSは、WebサービスおよびWebアプリケーション内でJAX-RPCに取ってかわるものとして設計されています。JAX-WSおよびJAX-RPCに対してサポートされている機能を比較するには、『Oracle Fusion Middleware Oracle WebLogic Server Webサービスの紹介』のJAX-WSまたはJAX-RPCのいずれかを選択する際の判断基準に関する項を参照してください。

次の表に、このガイドの内容をまとめます。

表1-1 内容のまとめ

項

内容

第2章「ユース・ケースとサンプル」

一般的なユース・ケースとサンプルを確認および実行します。

第3章「WebLogic Webサービスの開発」

WebLogic開発環境でのWebサービスの開発。

第4章「JWSファイルのプログラミング」

Webサービスを実装するJWSファイルのプログラミング。

第5章「データ・バインディングの理解」

Java Architecture for XML Binding (JAXB)データ・バインディングを使用します。

第6章「Webサービスの呼出し」

Javaクライアントまたは別のWebサービスからWebサービスを呼び出します。

第8章「WebLogic Webサービスの旧リリースから10.3.xへのアップグレード」

前のリリースからのWebサービスのアップグレード。

第7章「Webサービスの管理」

管理コンソールを使用したWebLogic Webサービスの管理。

WebLogic Webサービスの概要、標準、サンプルおよび関連ドキュメントについては、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの紹介』を参照してください。

WebLogic Webサービスのセキュリティについては、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』を参照してください。

2 ユース・ケースとサンプル

この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Webサービスの一般的なユース・ケースとサンプルについて説明します。

この章では、以下のトピックについて説明します。

- 簡単なHelloWorld Webサービスの作成

- ユーザー定義のデータ型を使用するWebサービスの作成

- WSDLファイルからのWebサービスの作成

- Java SEクライアントからのWebサービスの呼出し

- WebLogic WebサービスからのWebサービスの呼出し

各ユース・ケースでは、簡単なWebLogic Webサービスを作成する手順や、デプロイ済のWebサービスから操作を呼び出す手順を示します。これらの例には基本的なJavaコードとAnt build.xmlファイルが含まれており、それらをユーザーの開発環境で使用してサンプルを再現したり、現在の開発環境とは別の環境で指示に従ってサンプルを作成して実行したりできます。

ユース・ケースではサンプルで使用されるプロセスやツールについては詳しく説明していません。詳細は、以降の章を参照してください。

簡単なHelloWorld Webサービスの作成

この項では、1つの操作を含む非常に簡単なWebサービスの作成方法について説明します。Webサービスを実装するJava Webサービス(JWS)・ファイルでは必須のJWSアノテーション@WebServiceを1つのみ使用しています。JWSファイルは、JWSメタデータ・アノテーションを使用してWebサービスの形式を指定した標準のJavaファイルです。メタデータ・アノテーションはJDK 5.0で導入されたもので、Webサービス・ファイルにアノテーションを付けるために使用される一連のアノテーションをJWSアノテーションと呼びます。WebLogic Webサービスは標準のJWSアノテーションを使用します。サポートされるJWSアノテーションの完全なリストについては、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービス・リファレンス』のWebサービスのアノテーションのサポートに関する項を参照してください。

次の例では、1つの操作sayHelloWorldを含むHelloWorldServiceというWebサービスを作成する方法を示します。簡単にするために、操作は入力された文字列値を戻すものとします。

1. WebLogic Server環境を設定します。
コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. 次のようにプロジェクト・ディレクトリを作成します。

prompt> mkdir /myExamples/hello_world

3. プロジェクト・ディレクトリの下に、srcディレクトリと、JWSファイル(この手順で後述)のパッケージ名に対応するサブディレクトリを作成します。

prompt> cd /myExamples/hello_world
prompt> mkdir src/examples/webservices/hello_world

4. Webサービスを実装するJWSファイルを作成します。
任意のJava IDEまたはテキスト・エディタを開いて、「サンプルHelloWorldImpl.java JWSファイル」で指定されたJavaコードを使用してHelloWorldImpl.javaというJavaファイルを作成します。

サンプルJWSファイルでは、1つのパブリック・メソッドsayHelloWorld(String)を含むHelloWorldImplというJavaクラスが示されています。@WebServiceアノテーションは、JavaクラスがHelloWorldServiceというWebサービスを実装することを指定しています。デフォルトでは、すべてのパブリック・メソッドが操作として公開されます。

5. src/examples/webservices/hello_worldディレクトリにHelloWorldImpl.javaファイルを保存します。

6. プロジェクト・ディレクトリ(myExamples/hello_world/src)内に標準のAnt build.xmlファイルを作成し、taskdef Antタスクを追加して、jwscタスクの完全修飾Javaクラス名を指定します。

<project name="webservices-hello_world" default="all">
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
</project>

この手順で説明される追加のターゲット(clean、undeploy、client、およびrunなど)が含まれている、完全なサンプルbuild.xmlファイルについては、「HelloWorldImpl.javaのサンプルAntビルド・ファイル」を参照してください。完全なbuild.xmlファイルでは、EARディレクトリの名前を常にハード・コード化して使用するのではなく、${ear-dir}などのプロパティも使用しています。

7. 次のようなjwsc Antタスクの呼出しを、build-serviceターゲット内にラップして、build.xmlファイルに追加します。

<target name="build-service">
<jwsc
srcdir="src"
destdir="output/helloWorldEar">
<jws file="examples/webservices/hello_world/HelloWorldImpl.java"
type="JAXRPC"/>
</jwsc>
</target>

jwsc WebLogic WebサービスAntタスクは、補助的なアーティファクト(デプロイメント記述子、ユーザー定義のデータ型のシリアライゼーション・クラス、WSDLファイルなど)を生成し、ユーザーが作成および生成したJavaコードをコンパイルして、すべてのアーティファクトを、後でWebLogic Serverにデプロイされるエンタープライズ・アプリケーションEARにアーカイブ化します。

8. コマンド・ラインでbuild-serviceターゲットを指定して、jwsc Antタスクを実行します。

prompt> ant build-service

output/helloWorldEarディレクトリを見て、jwsc Antタスクによって生成されたファイルとアーティファクトを確認します。

9. WebサービスをデプロイするWebLogic Serverインスタンスを起動します。

10. 管理コンソールまたはwldeploy Antタスクを使用して、エンタープライズ・アプリケーションにパッケージ化されたWebサービスをWebLogic Serverにデプロイします。いずれの場合でも、outputディレクトリにあるhelloWorldEarエンタープライズ・アプリケーションをデプロイします。
wldeploy Antタスクを使用するには、以下のターゲットをbuild.xmlファイルに追加します。

<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="deploy">
<wldeploy action="deploy"
name="helloWorldEar" source="output/helloWorldEar"
user="${wls.username}" password="${wls.password}"
verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>

wls.username、wls.password、wls.hostname、wls.port、およびwls.server.nameの値は、ご使用のWebLogic Serverインスタンスの対応する値で置き換えます。

deployターゲットを実行して、WARファイルをデプロイします。

prompt> ant deploy

11. ブラウザでWSDLを呼び出して、Webサービスが正しくデプロイされていることをテストします。

http://host:port/HelloWorldImpl/HelloWorldImpl?WSDL

WLHttpTransport JWSアノテーションのcontextPathおよびserviceUri属性の値を使用してURLを構築します。ただし、このユース・ケースのJWSファイルにはWLHttpTransportアノテーションが含まれていないので、contextPathおよびserviceUri属性のデフォルト値(JWSファイル内のJavaクラスの名前)を使用します。これらの属性は、次の「ユーザー定義のデータ型を使用したWebサービスの作成」の例で明示的に設定されます。各自のWebLogic Serverインスタンスに適合したホスト名およびポートを選択してください。

build.xmlファイルでclean、build-service、undeploy、deployの各ターゲットを使用すると、開発プロセスの一環としてWebサービスの更新、再ビルド、アンデプロイおよび再デプロイを繰り返し実行できます。

Webサービスを実行するには、そのWebサービスを呼び出すクライアントを作成する必要があります。Webサービスを呼び出すJavaクライアント・アプリケーションの作成例については、「Java SEクライアントからのWebサービスの呼出し」を参照してください。

サンプルHelloWorldImpl.java JWSファイル

package examples.webservices.hello_world;
// Import the @WebService annotation
import javax.jws.WebService;
@WebService(name="HelloWorldPortType", serviceName="HelloWorldService")
/**
* This JWS file forms the basis of simple Java-class implemented WebLogic
* Web Service with a single operation: sayHelloWorld
*/
public class HelloWorldImpl {
// By default, all public methods are exposed as Web Services operation
public String sayHelloWorld(String message) {
try {
System.out.println("sayHelloWorld:" + message);
} catch (Exception ex) { ex.printStackTrace(); }

return "Here is the message: '" + message + "'";
}
}

HelloWorldImpl.javaのサンプルAntビルド・ファイル

以下のbuild.xmlファイルでは、プロパティを使用してファイルを簡素化しています。

<project name="webservices-hello_world" default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="helloWorldEar" />
<property name="example-output" value="output" />
<property name="ear-dir" value="${example-output}/helloWorldEar" />
<property name="clientclass-dir" value="${example-output}/clientclasses" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all" depends="clean,build-service,deploy,client" />
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/hello_world/HelloWorldImpl.java"
type="JAXRPC"/>
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy" name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="undeploy">
<wldeploy action="undeploy" name="${ear.deployed.name}"
failonerror="false"
user="${wls.username}" password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/HelloWorldImpl/HelloWorldImpl?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.hello_world.client"
type="JAXRPC"/>
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/hello_world/client/**/*.java"/>
</target>
<target name="run">
<java classname="examples.webservices.hello_world.client.Main"
fork="true" failonerror="true" >
<classpath refid="client.class.path"/>
<arg
line="http://${wls.hostname}:${wls.port}/HelloWorldImpl/HelloWorldImpl"  />
</java> </target>
</project>

ユーザー定義のデータ型を使用するWebサービスの作成

前のユース・ケースでは、Webサービス操作のパラメータと戻り値として、単純データ型Stringのみを使用していました。次の例では、ユーザー定義のデータ型(特にBasicStructというJavaBean)を操作のパラメータおよび戻り値として使用するWebサービスの作成方法を示します。

Webサービスでユーザー定義のデータ型を使用する場合、データ型のJavaソースを作成して、それをJWSファイル内で適切に使用する以外に、プログラマが実際にすべきことはほとんどありません。jwsc Antタスクは、JWSファイルにユーザー定義のデータ型がある場合、XML表現(SOAPメッセージで使用)とJava表現(WebLogic Serverで使用)との間でデータを変換するのに必要な、すべてのデータ・バインディング・アーティファクトを自動的に生成します。データ・バインディング・アーティファクトには、Javaユーザー定義データ型に相当するXMLスキーマ、JAX-RPCの型マッピング・ファイルなどがあります。

次の手順は「簡単なHelloWorld Webサービスの作成」に記載されている手順によく似ています。そのため、手順では必要なステップをすべて示していますが、簡単なHelloWorldサンプルとは異なるステップのみの詳細を説明しています。

1. WebLogic Server環境を設定します。
コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. プロジェクト・ディレクトリを作成します。

prompt> mkdir /myExamples/complex

3. プロジェクト・ディレクトリの下に、srcディレクトリと、JWSファイル(この手順で後述)のパッケージ名に対応するサブディレクトリを作成します。

prompt> cd /myExamples/complex
prompt> mkdir src/examples/webservices/complex

4. BasicStruct JavaBeanのソースを作成します。
任意のJava IDEまたはテキスト・エディタを開いて、「サンプルBasicStruct JavaBean」で指定されたJavaコードを使用して BasicStruct.javaというJavaファイルをプロジェクト・ディレクトリに作成します。

5. BasicStruct.javaファイルをプロジェクト・ディレクトリのsrc/examples/webservices/complexサブディレクトリに保存します。

6. 「サンプルComplexImpl.java JWSファイル」で指定されたJavaコードを使用して、Webサービスを実装するJWSファイルを作成します。
このサンプルJWSファイルでは、複数のJWSアノテーションを使用しています。@WebMethodでは、メソッドがWebサービス操作として公開されることを明示的に指定し、操作名をデフォルトのメソッド名echoStructからechoComplexTypeに変更します。@WebParamと@WebResultでは、パラメータと戻り値を構成します。@SOAPBindingでは、Webサービスのタイプを指定します。@WLHttpTransportでは、Webサービスの呼出しに使用されるURIを指定します。また、ComplexImpl.java JWSファイルではexamples.webservice.complex.BasicStructクラスをインポートして、echoStruct()メソッドのパラメータと戻り値としてユーザー定義データ型のBasicStructを使用します。

JWSファイルの作成に関するより詳細な情報については、第4章「JWSファイルのプログラミング」を参照してください。

7. ComplexImpl.javaファイルをプロジェクト・ディレクトリのsrc/examples/webservices/complexサブディレクトリに保存します。

8. プロジェクト・ディレクトリ内に標準のAnt build.xmlファイルを作成し、taskdef Antタスクを追加して、jwscタスクの完全修飾クラス名を指定します。

<project name="webservices-complex" default="all">
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
</project>

完全なサンプルbuild.xmlファイルについては、「ComplexImpl.java JWSファイルのサンプルAntビルド・ファイル」を参照してください。

9. 次のようなjwsc Antタスクの呼出しを、build-serviceターゲット内にラップして、build.xmlファイルに追加します。

<target name="build-service">
<jwsc
srcdir="src"
destdir="output/ComplexServiceEar" >
<jws file="examples/webservices/complex/ComplexImpl.java"
type="JAXRPC">
<WLHttpTransport
contextPath="complex" serviceUri="ComplexService"
portName="ComplexServicePort"/>
</jws>
</jwsc>
</target>

上記の例で注目すべき点は以下のとおりです。

- <jws>要素のtype属性では、Webサービスのタイプ(JAX-WSまたはJAX-RPC)が指定されています。

- jwsc Antタスクの<jws要素の<WLHttpTransport子要素では、HTTP/Sトランスポートを介してWebサービスを呼び出す際に使用されるURLのコンテキスト・パスとサービスURIセクションに加え、生成されるWSDLのポートの名前も指定されています。この値は、@WLHttpTransport属性を使用してJWSファイルで指定されている値をオーバーライドします。コンテキスト・パスの定義の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービス・リファレンス』のWebLogic Webサービスのコンテキスト・パスの定義に関する項を参照してください。

10. jwsc Antタスクを使用します。

prompt> ant build-service

output/ComplexServiceEarディレクトリを見て、jwsc Antタスクによって生成されたファイルとアーティファクトを確認します。

11. WebサービスをデプロイするWebLogic Serverインスタンスを起動します。

12. 管理コンソールまたはwldeploy Antタスクを使用して、ComplexServiceEarエンタープライズ・アプリケーションにパッケージ化されたWebサービスをWebLogic Serverにデプロイします。例:

prompt> ant deploy

13. 管理コンソールまたはwldeploy Antタスクを使用して、エンタープライズ・アプリケーションにパッケージ化されたWebサービスをWebLogic Serverにデプロイします。いずれの場合でも、outputディレクトリにあるComplexServiceEarエンタープライズ・アプリケーションをデプロイします。
wldeploy Antタスクを使用するには、以下のターゲットをbuild.xmlファイルに追加します。

<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="deploy">
<wldeploy action="deploy"
name="ComplexServiceEar" source="output/ComplexServiceEar"
user="${wls.username}" password="${wls.password}"
verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>

wls.username、wls.password、wls.hostname、wls.port、およびwls.server.nameの値は、ご使用のWebLogic Serverインスタンスの対応する値で置き換えます。

deployターゲットを実行して、WARファイルをデプロイします。

prompt> ant deploy

14. ブラウザでWSDLを呼び出して、Webサービスが正しくデプロイされていることをテストします。

http://host:port/complex/ComplexService?WSDL

Webサービスを実行するには、そのWebサービスを呼び出すクライアントを作成する必要があります。Webサービスを呼び出すJavaクライアント・アプリケーションの作成例については、「Java SEクライアントからのWebサービスの呼出し」を参照してください。

サンプルBasicStruct JavaBean

package examples.webservices.complex;
/**
* Defines a simple JavaBean called BasicStruct that has integer, String,
* and String[] properties
*/
public class BasicStruct {
// Properties
private int intValue;
private String stringValue;
private String[] stringArray;
// Getter and setter methods
public int getIntValue() {
return intValue;
}
public void setIntValue(int intValue) {
this.intValue = intValue;
}
public String getStringValue() {
return stringValue;
}
public void setStringValue(String stringValue) {
this.stringValue = stringValue;
}
public String[] getStringArray() {
return stringArray;
}
public void setStringArray(String[] stringArray) {
this.stringArray = stringArray;
}
public String toString() {
return "IntValue="+intValue+", StringValue="+stringValue;
}
}

サンプルComplexImpl.java JWSファイル

package examples.webservices.complex;
// Import the standard JWS annotation interfaces
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// Import the WebLogic-specific JWS annotation interface
import weblogic.jws.WLHttpTransport;
// Import the BasicStruct JavaBean
import examples.webservices.complex.BasicStruct;
// Standard JWS annotation that specifies that the portType name of the Web
// Service is "ComplexPortType", its public service name is "ComplexService",
// and the targetNamespace used in the generated WSDL is "http://example.org"
@WebService(serviceName="ComplexService", name="ComplexPortType",
targetNamespace="http://example.org")
// Standard JWS annotation that specifies this is a document-literal-wrapped
// Web Service
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
// WebLogic-specific JWS annotation that specifies the context path and service
// URI used to build the URI of the Web Service is "complex/ComplexService"
@WLHttpTransport(contextPath="complex", serviceUri="ComplexService",
portName="ComplexServicePort")
/**
* This JWS file forms the basis of a WebLogic Web Service.  The Web Services
* has two public operations:
*
*  - echoInt(int)
*  - echoComplexType(BasicStruct)
*
* The Web Service is defined as a "document-literal" service, which means
* that the SOAP messages have a single part referencing an XML Schema element
* that defines the entire body.
*/
public class ComplexImpl {
// Standard JWS annotation that specifies that the method should be exposed
// as a public operation.  Because the annotation does not include the
// member-value "operationName", the public name of the operation is the
// same as the method name: echoInt.
//
// The WebResult annotation specifies that the name of the result of the
// operation in the generated WSDL is "IntegerOutput", rather than the
// default name "return".   The WebParam annotation specifies that the input
// parameter name in the WSDL file is "IntegerInput" rather than the Java
// name of the parameter, "input".
@WebMethod()
@WebResult(name="IntegerOutput",
targetNamespace="http://example.org/complex")
public int echoInt(
@WebParam(name="IntegerInput",
targetNamespace="http://example.org/complex")
int input)
{
System.out.println("echoInt '" + input + "' to you too!");
return input;
}
// Standard JWS annotation to expose method "echoStruct" as a public operation
// called "echoComplexType"
// The WebResult annotation specifies that the name of the result of the
// operation in the generated WSDL is "EchoStructReturnMessage",
// rather than the default name "return".
@WebMethod(operationName="echoComplexType")
@WebResult(name="EchoStructReturnMessage",
targetNamespace="http://example.org/complex")
public BasicStruct echoStruct(BasicStruct struct)
{
System.out.println("echoComplexType called");
return struct;
}
}

ComplexImpl.java JWSファイルのサンプルAntビルド・ファイル

以下のbuild.xmlファイルでは、プロパティを使用してファイルを簡素化しています。

<project name="webservices-complex" default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="complexServiceEAR" />
<property name="example-output" value="output" />
<property name="ear-dir" value="${example-output}/complexServiceEar" />
<property name="clientclass-dir" value="${example-output}/clientclass" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all" depends="clean,build-service,deploy,client"/>
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}"
keepGenerated="true"
>
<jws file="examples/webservices/complex/ComplexImpl.java"
type="JAXRPC">
<WLHttpTransport
contextPath="complex" serviceUri="ComplexService"
portName="ComplexServicePort"/>
</jws>
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy"
name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}"/>
</target>
<target name="undeploy">
<wldeploy action="undeploy" failonerror="false"
name="${ear.deployed.name}"
user="${wls.username}" password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}"/>
</target>
<target name="client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.complex.client"
type="JAXRPC"/>
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/complex/client/**/*.java"/>
</target>
<target name="run" >
<java fork="true"
classname="examples.webservices.complex.client.Main"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg line="http://${wls.hostname}:${wls.port}/complex/ComplexService"
/>
</java>
</target>
</project>

WSDLファイルからのWebサービスの作成

Webサービスの作成に関するもう1つの一般的なユース・ケースは、既存のWSDLファイル(黄金のWSDLとも呼ばれます)から開始することです。WSDLファイルはWebサービスがどのようなものかを指定するパブリック・コントラクトであり、サポートされる操作のリスト、各操作のシグネチャと形式、操作を呼び出すときに使用されるプロトコルとトランスポート、データをトランスポートするときに使用されるXMLスキーマ・データ型などを指定します。WSDLファイルに基づいて、WebLogic Serverにデプロイできるように、Webサービスを実装するアーティファクトを生成します。wsdlc Antタスクを使用して次のアーティファクトを生成します。

- WSDLファイルで記述されたWebサービスを実装するJWSサービス・エンドポイント・インタフェース(SEI)。

- 生成されるJWS SEIの不完全な(途中まで作成済みの)実装が含まれるJWS実装ファイル。このファイルは開発者がカスタマイズする必要があります。

- Webサービスのパラメータと戻り値をXML表現とJava表現の間で変換するために、WebLogic Serverによって使用されるデータ・バインディング・アーティファクト。

- (オプション)生成されるJWS SEIのJavadoc。

注意:

更新することになるwsdlc Antタスクによって生成されるファイルは、JWS実装ファイルのみです。JWS SEIおよびデータ・バインディング・アーティファクトが含まれるJARファイルを更新する必要はありません。

一般に、wsdlc Antタスクを1回実行して、生成されるJWS SEIファイルとデータ・バインディング・アーティファクトを含むJARファイルを生成し、その後で、インタフェースを実装する生成済JWSファイルをコーディングして、Webサービスのビジネス・ロジックを追加します。特に、Webサービス操作を実装するメソッドに、操作の動作に必要なJavaコードを追加し、JWSアノテーションを追加します。

JWS実装ファイルをコーディングしたら、前の項で説明したのと同じ手順に従って、jwsc Antタスクを実行してデプロイ可能なWebサービスを生成します。相違点は、compiledWsdl属性を使用して、wsdlc Antタスクによって生成されるJARファイル(JWS SEIファイルとデータ・バインディング・アーティファクトを含む)を指定することのみです。

次の簡単な例は、「サンプルWSDLファイル」に示したWSDLファイルからWebサービスを作成する方法を示しています。このWebサービスには、郵便番号を渡されると気温を返すgetTempという1つの操作が含まれています。

1. WebLogic Server環境を設定します。
コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. 作業ディレクトリを作成します。

prompt> mkdir /myExamples/wsdlc

3. WSDLファイルをコンピュータ上のアクセス可能なディレクトリに置きます。
この例では、WSDLファイルはTemperatureService.wsdlという名前で/myExamples/wsdlc/wsdl_filesディレクトリにあると仮定しています。ファイルの完全なリストについては、「サンプルWSDLファイル」を参照してください。

4. プロジェクト・ディレクトリ内に標準のAnt build.xmlファイルを作成し、taskdef Antタスクを追加して、wsdlcタスクの完全修飾Javaクラス名を指定します。

<project name="webservices-wsdlc" default="all">
<taskdef name="wsdlc"
classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
</project>

この手順で説明される追加のターゲット(clean、undeploy、client、およびrunなど)が含まれている、完全なサンプルbuild.xmlファイルについては、「TemperatureServiceのサンプルAntビルド・ファイル」を参照してください。完全なbuild.xmlファイルでは、EARディレクトリの名前を常にハード・コード化して使用するのではなく、${ear-dir}などのプロパティも使用しています。

5. 次のようなwsdlc Antタスクの呼出しを、generate-from-wsdlターゲット内にラップして、build.xmlファイルに追加します。

<target name="generate-from-wsdl">
<wsdlc
srcWsdl="wsdl_files/TemperatureService.wsdl"
destJwsDir="output/compiledWsdl"
destImplDir="output/impl"
packageName="examples.webservices.wsdlc" />
</target>

このサンプルwsdlcタスクでは、JWS SEIとデータ・バインディング・アーティファクトを含むJARファイルを、カレント・ディレクトリ下のoutput/compiledWsdlディレクトリに生成します。また、JWS SEIの部分的な実装ファイル(TemperaturePortTypeImpl.java)をoutput/impl/examples/webservices/wsdlcディレクトリに生成します(このディレクトリは、destImplDirで指定されたoutputディレクトリと、パッケージ名で指定されたディレクトリ階層を組み合せたものです)。生成されたすべてのJWSファイルはexamples.webservices.wsdlcパッケージにパッケージ化されます。

6. コマンド・ラインでgenerate-from-wsdlターゲットを指定して、wsdlc Antタスクを実行します。

prompt> ant generate-from-wsdl

wsdlc Antタスクによってアーティファクトとファイルが生成されたことを調べるには、outputディレクトリを確認します。

7. 任意のJava IDEまたはテキスト・エディタを使用して、生成されたoutput/impl/examples/webservices/wsdlc/TemperaturePortTypeImpl.java JWS実装ファイルを更新し、必要な処理を行うようにメソッドにJavaコードを追加します。
例については「サンプルTemperaturePortType Java実装ファイル」を参照してください。追加されたJavaコードが太字になっています。生成されたJWS実装ファイルには@WebServiceおよび@WLHttpTransportアノテーションの値が自動的に含まれており、その値は元のWSDLファイルの値に対応しています。

注意:

「WSDLから開始する」ユース・ケースのJWS実装ファイルに追加できるJWSアノテーションには制限があります。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「wsdlc」を参照してください。

簡単にするために、サンプルのTemperaturePortTypeImpl.javaにあるgetTemp()メソッドは、ハード・コード化された数字を返します。実際のファイルの場合、このメソッドの実装では、特定の郵便番号で現在の気温をルックアップします。

8. 更新したTemperaturePortTypeImpl.javaファイルを永続的なディレクトリ(プロジェクト・ディレクトリの下のsrcディレクトリなど。パッケージ名に対応する子ディレクトリも作成します)にコピーします。

prompt> cd /examples/wsdlc
prompt> mkdir src/examples/webservices/wsdlc
prompt> cp output/impl/examples/webservices/wsdlc/TemperaturePortTypeImpl.java \
src/examples/webservices/wsdlc/TemperaturePortTypeImpl.java

9. 更新されたJWS実装クラスに対してjwsc Antタスクを実行するbuild-serviceターゲットを、build.xmlファイルに追加します。jwscのcompiledWsdl属性を使用して、wsdlc Antタスクによって生成されるJARファイルの名前を指定します。

<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/wsdlc/TemperaturePortTypeImpl.java"
compiledWsdl="${compiledWsdl-dir}/TemperatureService_wsdl.jar"
type="JAXRPC">
<WLHttpTransport
contextPath="temp" serviceUri="TemperatureService"
portName="TemperaturePort">
</WLHttpTransport>
</jws>
</jwsc>
</target>

上記の例で注目すべき点は以下のとおりです。

- <jws>要素のtype属性では、Webサービスのタイプ(JAX-WSまたはJAX-RPC)が指定されています。

- jwsc Antタスクの<jws>要素の<WLHttpTransport>子要素では、HTTP/Sトランスポートを介してWebサービスを呼び出す際に使用されるURLのコンテキスト・パスとサービスURIセクションに加え、生成されるWSDLのポートの名前も指定されています。この値は、@WLHttpTransport属性を使用してJWSファイルで指定されている値をオーバーライドします。

10. build-serviceターゲットを実行してデプロイ可能なWebサービスを生成します。

prompt> ant build-service

JWSファイルを更新して再ビルドする場合、このターゲットを再実行します。

11. WebサービスをデプロイするWebLogic Serverインスタンスを起動します。

12. 管理コンソールまたはwldeploy Antタスクを使用して、エンタープライズ・アプリケーションにパッケージ化されたWebサービスをWebLogic Serverにデプロイします。いずれの場合でも、outputディレクトリにあるwsdlcEarエンタープライズ・アプリケーションをデプロイします。
wldeploy Antタスクを使用するには、以下のターゲットをbuild.xmlファイルに追加します。

<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="deploy">
<wldeploy action="deploy" name="wsdlcEar"
source="output/wsdlcEar" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>

wls.username、wls.password、wls.hostname、wls.port、およびwls.server.nameの値は、ご使用のWebLogic Serverインスタンスの対応する値で置き換えます。

deployターゲットを実行して、WARファイルをデプロイします。

prompt> ant deploy

13. ブラウザでWSDLを呼び出して、Webサービスが正しくデプロイされていることをテストします。

http://host:port/temp/TemperatureService?WSDL

上記のURLのコンテキスト・パスとサービスURIの部分は元の黄金のWSDLで指定されています。WebLogic Serverインスタンスのホスト名とポートを使用します。デプロイされたWSDLファイルと元のWSDLファイルは、エンドポイント・アドレスのホストとポート以外は同じであることに注目してください。

build.xmlファイルでclean、build-service、undeploy、deployの各ターゲットを使用すると、開発プロセスの一環としてWebサービスの更新、再ビルド、アンデプロイおよび再デプロイを繰り返し実行できます。

Webサービスを実行するには、そのWebサービスを呼び出すクライアントを作成する必要があります。Webサービスを呼び出すJavaクライアント・アプリケーションの作成例については、「Java SEクライアントからのWebサービスの呼出し」を参照してください。

サンプルWSDLファイル

<?xml version="1.0"?>
<definitions
name="TemperatureService"
targetNamespace="http://www.xmethods.net/sd/TemperatureService.wsdl"
xmlns:tns="http://www.xmethods.net/sd/TemperatureService.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/" >
<message name="getTempRequest">
<part name="zip" type="xsd:string"/>
</message>
<message name="getTempResponse">
<part name="return" type="xsd:float"/>
</message>
<portType name="TemperaturePortType">
<operation name="getTemp">
<input message="tns:getTempRequest"/>
<output message="tns:getTempResponse"/>
</operation>
</portType>
<binding name="TemperatureBinding" type="tns:TemperaturePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getTemp">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"
namespace="urn:xmethods-Temperature" />
</input>
<output>
<soap:body use="literal"
namespace="urn:xmethods-Temperature" />
</output>
</operation>
</binding>
<service name="TemperatureService">
<documentation>
Returns current temperature in a given U.S. zipcode
</documentation>
<port name="TemperaturePort" binding="tns:TemperatureBinding">
<soap:address
location="http://localhost:7001/temp/TemperatureService"/>
</port>
</service>
</definitions>

サンプルTemperaturePortType Java実装ファイル

package examples.webservices.wsdlc;
import javax.jws.WebService;
import weblogic.jws.*;
/**
* TemperaturePortTypeImpl class implements web service endpoint
* interface TemperaturePortType */
@WebService(
serviceName="TemperatureService",
targetNamespace="http://www.xmethods.net/sd/TemperatureService.wsdl"
endpointInterface="examples.webservices.wsdlc.TemperaturePortType)
@WLHttpTransport(
contextPath="temp",
serviceUri="TemperatureService",
portName="TemperaturePort")
public class TemperaturePortTypeImpl implements examples.webservices.wsdlc.TemperaturePortType {
public TemperaturePortTypeImpl() { }
public float getTemp(java.lang.String zip) {
return 1.234f;
}
}

TemperatureServiceのサンプルAntビルド・ファイル

以下のbuild.xmlファイルでは、プロパティを使用してファイルを簡素化しています。

<project default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="wsdlcEar" />
<property name="example-output" value="output" />
<property name="compiledWsdl-dir" value="${example-output}/compiledWsdl" />
<property name="impl-dir" value="${example-output}/impl" />
<property name="ear-dir" value="${example-output}/wsdlcEar" />
<property name="clientclass-dir" value="${example-output}/clientclasses" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="wsdlc"
classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all"
depends="clean,generate-from-wsdl,build-service,deploy,client" />
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="wsdl_files/TemperatureService.wsdl"
destJwsDir="${compiledWsdl-dir}"
destImplDir="${impl-dir}"
packageName="examples.webservices.wsdlc" />
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/wsdlc/TemperaturePortTypeImpl.java"
compiledWsdl="${compiledWsdl-dir}/TemperatureService_wsdl.jar"
type="JAXRPC">
<WLHttpTransport
contextPath="temp" serviceUri="TemperatureService"
portName="TemperaturePort"/>
</jws>
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy" name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="undeploy">
<wldeploy action="undeploy" name="${ear.deployed.name}"
failonerror="false"
user="${wls.username}" password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/temp/TemperatureService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.wsdlc.client"
type="JAXRPC">
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/wsdlc/client/**/*.java"/>
</target>
<target name="run">
<java classname="examples.webservices.wsdlc.client.TemperatureClient"
fork="true" failonerror="true" >
<classpath refid="client.class.path"/>
<arg
line="http://${wls.hostname}:${wls.port}/temp/TemperatureService" />
</java>
</target>
</project>

Java SEクライアントからのWebサービスの呼出し

注意:

この項で説明するように、WebLogic Serverで実行されている(WebLogic Serverクラスパスにアクセスする)任意のJava SEまたはJava EEアプリケーションからWebサービスを呼び出すことができます。WebLogic Serverのライブラリにアクセスできない環境で実行されているスタンドアロンJavaアプリケーションのサポートについての詳細は、「Webサービス呼出し時のスタンドアロン・クライアントJARファイルの使用」を参照してください。

クライアント・アプリケーションからデプロイ済のWebサービスの操作を呼び出す場合、WebサービスはWebLogic Serverにデプロイされている場合と、.NETなどの他のアプリケーション・サーバーにデプロイされている場合があります。知る必要があるのは、パブリック・コントラクト・ファイル、つまりWSDLのURLのみです。

Javaクライアント・アプリケーションを記述する他に、clientgen WebLogic WebサービスAntタスクを実行して、クライアント・アプリケーションがWebサービス操作を呼び出すために必要なアーティファクトも生成する必要があります。アーティファクトは次を含みます:

- 呼出しの対象となる特定のWebサービスに対するJAX-RPC StubおよびServiceインタフェース実装のJavaクラス。

- WSDLファイルで指定されたユーザー定義XMLスキーマ・データ型のJavaクラス。

- Javaのユーザー定義のデータ型と、WSDLファイル内で指定されたそのデータ型に対応するXMLスキーマ型の間のマッピングに関する情報を格納するJAX-RPCマッピング・デプロイメント記述子ファイル。

- WSDLファイルのクライアント側のコピー。

次の例では、「ユーザー定義のデータ型を使用するWebサービスの作成」で説明している、ComplexService WebLogic WebサービスのechoComplexType操作を呼び出すJavaクライアント・アプリケーションを作成する方法を示します。echoComplexType操作は、ユーザー定義のデータ型であるBasicStructをパラメータおよび戻り型として使用します。

注意:

この手順では、ComplexService Webサービスを作成してデプロイ済であると仮定しています。

1. WebLogic Server環境を設定します。
コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. プロジェクト・ディレクトリを作成します。

prompt> mkdir /myExamples/simple_client

3. プロジェクト・ディレクトリの下に、srcディレクトリと、Javaクライアント・アプリケーション(この手順で後述)のパッケージ名に対応するサブディレクトリを作成します。

prompt> cd /myExamples/simple_client
prompt> mkdir src/examples/webservices/simple_client

4. プロジェクト・ディレクトリ内に標準のAnt build.xmlファイルを作成し、taskdef Antタスクを追加して、clientgenタスクの完全修飾Javaクラス名を指定します。

<project name="webservices-simple_client" default="all">
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
</project>

完全なサンプルbuild.xmlファイルについては、「Javaクライアント・アプリケーションをビルドするためのサンプルAntビルド・ファイル」を参照してください。完全なbuild.xmlファイルでは、クライアント・クラスの出力ディレクトリの名前を常にハード・コードして使用するのではなく、${clientclass-dir}などのプロパティを使用します。

5. 次のようなclientgenおよびjavac Antタスクの呼出しを、build-clientターゲット内にラップして、build.xmlファイルに追加します。

<target name="build-client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
destDir="output/clientclass"
packageName="examples.webservices.simple_client"
type="JAXRPC"/>
<javac
srcdir="output/clientclass" destdir="output/clientclass"
includes="**/*.java"/>
<javac
srcdir="src" destdir="output/clientclass"
includes="examples/webservices/simple_client/*.java"/>
</target>

clientgen Antタスクでは、デプロイされたComplexService WebサービスのWSDLを使用して必要なアーティファクトを生成し、指定されたパッケージ名を使用してそれらをoutput/clientclassディレクトリに格納します。変数は、WebサービスをホストしているWebLogic Serverインスタンスの実際のホスト名とポートに置き換えてください。

clientgen Antタスクはexamples.webservices.complex.BasicStruct JavaBeanクラスも自動的に生成します。このクラスは、WSDLで指定されたユーザー定義のデータ型のJava表現です。

build-clientターゲットでは、clientgenの他に標準のjavac Antタスクも指定して、次の手順で説明する簡単なJavaプログラムを含む、すべてのJavaコードをクラス・ファイルにコンパイルします。

clientgen AntタスクのdestFile属性を使用すると、生成されたJavaファイルを自動的にコンパイルして、すべてのアーティファクトをJARファイルにパッケージ化できます。コンパイルの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「clientgen」を参照してください。

6. echoComplexType操作を呼び出すJavaクライアント・アプリケーション・ファイルを作成します。
任意のJava IDEまたはテキスト・エディタを開いて、「サンプルJavaクライアント・アプリケーション」で指定されたコードを使用してMain.javaというJavaファイルを作成します。

Mainクライアント・アプリケーションは、1つの引数(WebサービスのWSDL URL)を取ります。アプリケーションは標準JAX-RPCのガイドラインに従って、clientgenによって生成されたServiceインタフェースのWebサービス固有の実装を使用してWebサービスの操作を呼び出します。また、アプリケーションは、clientgen Antタスクで生成されたBasicStructユーザー定義データ型をインポートして使用します(このデータ型はechoStruct操作のパラメータおよび戻り値として使用されます)。詳細は、第6章「Webサービスの呼出し」を参照してください。

7. Main.javaファイルをメイン・プロジェクト・ディレクトリのsrc/examples/webservices/simple_clientサブディレクトリに保存します。

8. コマンド・ラインでbuild-clientターゲットを指定して、clientgenおよびjavac Antタスクを実行します。

prompt> ant build-client

output/clientclassディレクトリを見て、clientgen Antタスクによって生成されたファイルとアーティファクトを確認します。

9. Mainアプリケーションの実行に使用される以下のターゲットをbuild.xmlファイルに追加します。

<path id="client.class.path">
<pathelement path="output/clientclass"/>
<pathelement path="${java.class.path}"/>
</path>
<target name="run" >
<java fork="true"
classname="examples.webservices.simple_client.Main"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg line="http://${wls.hostname}:${wls.port}/complex/ComplexService" />
</java>
</target>

runターゲットはMainアプリケーションを呼び出し、デプロイされたWebサービスのWSDL URLを1つの引数として渡します。classpath要素では、<path>タスクで作成される参照を使用して、CLASSPATHにclientclassディレクトリが追加されます。

10. runターゲットを実行してechoComplexType操作を呼び出します。

prompt> ant run

呼出しに成功すると、次のような最終出力が表示されます。

run:
[java] echoComplexType called. Result: 999, Hello Struct

build.xmlファイルのbuild-clientおよびrunターゲットを使用して、開発プロセスの一環としてJavaクライアント・アプリケーションを繰返し更新、再ビルド、および実行できます。

サンプルJavaクライアント・アプリケーション

以下に、echoComplexType操作を呼び出す簡単なJavaクライアント・アプリケーションを示します。

package examples.webservices.simple_client;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
// import the BasicStruct class, used as a param and return value of the
// echoComplexType operation. The class is generated automatically by
// the clientgen Ant task.
import examples.webservices.complex.BasicStruct;
/**
* This is a simple Java client application that invokes the
* echoComplexType operation of the ComplexService Web service.
*/
public class Main {
public static void main(String[] args)
throws ServiceException, RemoteException {
ComplexService service = new ComplexService_Impl (args[0] + "?WSDL" );
ComplexPortType port = service.getComplexServicePort();
BasicStruct in = new BasicStruct();
in.setIntValue(999);
in.setStringValue("Hello Struct");
BasicStruct result = port.echoComplexType(in);
System.out.println("echoComplexType called. Result: " + result.getIntValue() + ", " + result.getStringValue());
}
}

Javaクライアント・アプリケーションをビルドするためのサンプルAntビルド・ファイル

次のbuild.xmlファイルでは、Javaクライアント・アプリケーションをビルドするタスクが定義されています。この例では、プロパティを使用してファイルを簡素化しています。

<project name="webservices-simple_client" default="all">
<!-- set global properties for this build -->
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="example-output" value="output" />
<property name="clientclass-dir" value="${example-output}/clientclass" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<target name="clean" >
<delete dir="${clientclass-dir}"/>
</target>
<target name="all" depends="clean,build-client,run" />
<target name="build-client">
<clientgen
type="JAXRPC"
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.simple_client"/>
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/simple_client/*.java"/>
</target>
<target name="run" >
<java fork="true"
classname="examples.webservices.simple_client.Main"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg line="http://${wls.hostname}:${wls.port}/complex/ComplexService" />
</java>
</target>
</project>

WebLogic WebサービスからのWebサービスの呼出し

デプロイ済のWebLogic Webサービス内からWebサービス(WebLogic、.NETなど)を呼び出すこともできます。

WebサービスをWebLogic Web サービスから呼び出すための手順は、「Java SEクライアントからのWebサービスの呼出し」で説明している手順と似ていますが、クライアント・スタブを生成するclientgen Antタスクを実行するのではなく、jwsc Antタスク内で<jws>の<clientgen>子要素を使用する点が異なります。jwsc Antタスクでは、生成されたクライアント・スタブが自動的に呼出し側のWebサービスのWARファイルにパッケージ化されるため、即座にWebサービスからアクセスできるようになります。その後で、標準JAX-RPCのプログラミング・ガイドラインに従って、他のWebサービスを呼び出すWebサービスを実装するJWSファイルを作成します。

次の例では、「ユーザー定義のデータ型を使用するWebサービスの作成」で説明したComplexService WebサービスのechoComplexType操作を呼び出すJWSファイルを記述する方法を示します。

注意:

ComplexService Webサービスは正常にデプロイ済であると想定しています。

1. WebLogic Server環境を設定します。
コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)スクリプトを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. プロジェクト・ディレクトリを作成します。

prompt> mkdir /myExamples/service_to_service

3. プロジェクト・ディレクトリの下に、srcディレクトリと、JWSおよびクライアント・アプリケーション・ファイル(この手順で後述)のパッケージ名に相当するサブディレクトリを作成します。

prompt> cd /myExamples/service_to_service
prompt> mkdir src/examples/webservices/service_to_service

4. ComplexService Webサービスを呼び出すWebサービスを実装するJWSファイルを作成します。
任意のJava IDEまたはテキスト・エディタを開いて、「サンプルClientServiceImpl.java JWSファイル」で指定されたJavaコードを使用してClientServiceImpl.javaというJavaファイルを作成します。

サンプルJWSファイルでは、1つのパブリック・メソッドcallComplexService()を含むClientServiceImplというJavaクラスが示されています。このJavaクラスでは、後でjwsc Antタスクで生成されるJAX-RPCスタブと、BasicStruct Java Bean(同じくclientgenで生成されるもので、ComplexService WebサービスのechoComplexType操作のパラメータと戻り値のデータ型)をインポートします。

ClientServiceImpl Javaクラスでは1つのメソッドcallComplexService()を定義しており、このメソッドはComplexService WebサービスのechoComplexType操作に渡されるBasicStructと、ComplexService WebサービスのURLという2つのパラメータを取ります。メソッドは標準のJAX-RPC APIを使用し、jwscによって生成されたスタブを使用してComplexServiceのServiceとPortTypeを取得した後、echoComplexType操作を呼び出します。

5. ClientServiceImpl.javaファイルをsrc/examples/webservices/service_to_serviceディレクトリに保存します。

6. プロジェクト・ディレクトリ内に標準のAnt build.xmlファイルを作成して、次のタスクを追加します。

<project name="webservices-service_to_service" default="all">
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
</project>

taskdefタスクでは、jwsc Antタスクの完全なクラス名を定義しています。

この手順で説明される追加のターゲット(clean、deploy、undeploy、client、runなど)が含まれている、完全なサンプルbuild.xmlファイルについては、「ClientServiceをビルドするためのサンプルAntビルド・ファイル」を参照してください。完全なbuild.xmlファイルでは、EARディレクトリの名前を常にハード・コード化して使用するのではなく、${ear-dir}などのプロパティも使用しています。

7. 次のようなjwsc Antタスクの呼出しを、build-serviceターゲット内にラップして、build.xmlファイルに追加します。

<target name="build-service">
<jwsc
srcdir="src"
destdir="output/ClientServiceEar" >
<jws
file="examples/webservices/service_to_service/ClientServiceImpl.java"
type="JAXRPC">
<WLHttpTransport
contextPath="ClientService" serviceUri="ClientService"
portName="ClientServicePort"/>
<clientgen
type="JAXRPC"
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
packageName="examples.webservices.complex" />
</jws>
</jwsc>
</target>

この例では、jwsc Antタスクの<jws>要素の<clientgen>子要素で、jwscがJWSファイルをコンパイルするだけでなく、WSDLファイルに記述されているWebサービスを呼び出すために必要なクライアント・アーティファクトも生成およびコンパイルすることを指定しています。

この例では、パッケージ名はexamples.webservices.complexに設定され、これはクライアント・アプリケーションのパッケージ名examples.webservices.simple_clientとは異なります。そのため、クライアント・アプリケーションの適切なクラス・ファイルをインポートする必要があります。

import examples.webservices.complex.BasicStruct;
import examples.webservices.complex.ComplexPortType;
import examples.webservices.complex.ComplexService;

パッケージ名がクライアント・アプリケーションと同じパッケージ名に設定されている場合、インポートの呼出しは省略できます。

8. コマンド・ラインでbuild-serviceターゲットを指定して、jwsc Antタスクを実行します。

prompt> ant build-service

9. WebサービスをデプロイするWebLogic Serverインスタンスを起動します。

10. 管理コンソールまたはwldeploy Antタスクを使用して、エンタープライズ・アプリケーションにパッケージ化されたWebサービスをWebLogic Serverにデプロイします。いずれの場合でも、outputディレクトリにあるClientServiceEarエンタープライズ・アプリケーションをデプロイします。
wldeploy Antタスクを使用するには、以下のターゲットをbuild.xmlファイルに追加します。

<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="deploy">
<wldeploy action="deploy" name="ClientServiceEar"
source="ClientServiceEar" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>

wls.username、wls.password、wls.hostname、wls.port、およびwls.server.nameの値は、ご使用のWebLogic Serverインスタンスの対応する値で置き換えます。

deployターゲットを実行して、WARファイルをデプロイします。

prompt> ant deploy

11. ブラウザでWSDLを呼び出して、Webサービスが正しくデプロイされていることをテストします。

http://host:port/ClientService/ClientService?WSDL

Webサービスを呼び出すJavaクライアント・アプリケーションの作成例については、「Java SEクライアントからのWebサービスの呼出し」を参照してください。

サンプルClientServiceImpl.java JWSファイル

echoComplexType操作を呼び出す簡単なWebサービス・クライアント・アプリケーションを次に示します。

package examples.webservices.service_to_service;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.jws.WebService;
import javax.jws.WebMethod;
import weblogic.jws.WLHttpTransport;
// Import the BasicStruct data type, generated by clientgen and used
// by the ComplexService Web Service
import examples.webservices.complex.BasicStruct;
// Import the JAX-RPC Stubs for invoking the ComplexService Web Service.
// Stubs generated by clientgen
import examples.webservices.service_to_service.ComplexPortType;
import examples.webservices.service_to_service.ComplexService_Impl;
import examples.webservices.service_to_service.ComplexService;
@WebService(name="ClientPortType", serviceName="ClientService",
targetNamespace="http://examples.org")
@WLHttpTransport(contextPath="ClientService", serviceUri="ClientService",
portName="ClientServicePort")
public class ClientServiceImpl {
@WebMethod()
public String callComplexService(BasicStruct input, String serviceUrl)
throws ServiceException, RemoteException
{
// Create service and port stubs to invoke ComplexService
ComplexService service = new ComplexService_Impl(serviceUrl + "?WSDL");
ComplexPortType port = service.getComplexServicePort();
// Invoke the echoComplexType operation of ComplexService
BasicStruct result = port.echoComplexType(input);
System.out.println("Invoked ComplexPortType.echoComplexType." );
return "Invoke went okay!  Here's the result: '" + result.getIntValue() + ",  " + result.getStringValue() + "'";
}
}

ClientServiceをビルドするためのサンプルAntビルド・ファイル

次のbuild.xmlファイルでは、クライアント・アプリケーションをビルドするタスクが定義されています。この例では、プロパティを使用してファイルを簡素化しています。

以下のbuild.xmlファイルでは、プロパティを使用してファイルを簡素化しています。

<project name="webservices-service_to_service" default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="ClientServiceEar" />
<property name="example-output" value="output" />
<property name="ear-dir" value="${example-output}/ClientServiceEar" />
<property name="clientclass-dir" value="${example-output}/clientclasses" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all" depends="clean,build-service,deploy,client" />
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}" >
<jws
file="examples/webservices/service_to_service/ClientServiceImpl.java"
type="JAXRPC">
<WLHttpTransport
contextPath="ClientService" serviceUri="ClientService"
portName="ClientServicePort"/>
<clientgen
type="JAXRPC"
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
packageName="examples.webservices.complex" />
</jws>
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy" name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="undeploy">
<wldeploy action="undeploy" name="${ear.deployed.name}"
failonerror="false"
user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/ClientService/ClientService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.service_to_service.client"
type="JAXRPC"/>
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/service_to_service/client/**/*.java"/>
</target>
<target name="run">
<java classname="examples.webservices.service_to_service.client.Main"
fork="true"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg
line="http://${wls.hostname}:${wls.port}/ClientService/ClientService"/>
</java>
</target>
</project>

3 WebLogic Webサービスの開発

この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Webサービスの反復的な開発プロセスについて説明します。

この章では、以下のトピックについて説明します。

- WebLogic Webサービス・プログラミング・モデルの概要

- Webサービス機能用のドメイン構成

- Javaから開始するWebLogic Webサービスの開発: 主な手順

- WSDLファイルから開始するWebLogic Webサービスの開発: 主な手順

- 基本的なAnt build.xmlファイルの作成

- jwsc WebLogic WebサービスAntタスクの実行

- wsdlc WebLogic WebサービスAntタスクの実行

- wsdlcで生成される途中まで作成済みのJWS実装クラス・ファイルの更新

- WebLogic Webサービスのデプロイとアンデプロイ

- WebサービスのWSDLの参照

- 動的なWSDLで指定されたサーバー・アドレスの構成

- Webサービスのテスト

- WebサービスのWebLogic分割開発ディレクトリ環境への統合

WebLogic Webサービス・プログラミング・モデルの概要

WebLogic Webサービスのプログラミング・モデルはJWSファイル(JWSアノテーションを使用してWebサービスの形式や動作を指定したJavaファイル)と、JWSファイルを実行するAntタスクを中心に展開されます。JWSアノテーションは、JDKのバージョン5.0で導入されたメタデータ機能(http://www.jcp.org/en/jsr/detail?id=175にあるJSR-175により指定されています)に基づいており、Web Services Metadata for the Java Platform仕様(JSR-181) (http://www.jcp.org/en/jsr/detail?id=181に記載されています)で定義されている標準のアノテーションのほかに、追加のアノテーションを含みます。サポートされるJWSアノテーションの完全なリストについては、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』のWebサービスのアノテーション・サポートに関する項を参照してください。このプログラミング・モデルの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの紹介』のWebLogic Webサービスの構造に関する項を参照してください。

以下の項では、Webサービスを繰返し開発する主要な手順を、Javaから開始する場合、または既存のWSDLファイルから開始する場合について説明します。

- Javaから開始するWebLogic Webサービスの開発: 主な手順

- WSDLファイルから開始するWebLogic Webサービスの開発: 主な手順

反復的な開発とは、希望どおりに動作するまで、Webサービスを繰返しコーディング、コンパイル、パッケージ化、デプロイ、およびテストできるように、開発環境を設定することです。WebLogic Webサービス・プログラミング・モデルでは、Antタスクを使用して、反復的な開発のほとんどの手順を実行します。一般に、すべての手順に対応するターゲットを含んだ1つのbuild.xmlファイルを作成して、そのターゲットを繰返し実行します。JWSファイルを新しいJavaコードで更新したら、その更新が期待どおりに動作することをテストします。

Webサービスを開発するために、この項で説明したコマンド・ライン・ツールの他に、Oracle JDeveloperなどのIDEも使用できます。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービスの紹介』のOracle IDEを使用したWebサービスのビルドに関する項を参照してください。

Webサービス機能用のドメイン構成

WebLogic Serverドメインを作成したら、構成ウィザードでWebサービス固有の拡張テンプレートを使用してドメインを更新し、特定のWebLogic Webサービス機能で必要になるリソースを自動的に構成できます。この拡張テンプレートの使用は必須ではありませんが、これを使用することでJMSおよびJDBCリソースの構成を大幅に簡略化できます。

Webサービス拡張テンプレートを使用すると、以下の機能で必要になるリソースを自動的に構成できます。

- Webサービスの信頼性のあるメッセージング

- バッファリング

- JMSトランスポート

注意:

Webサービスのリソースを含まないドメインは、Webサービス以外のシナリオおよび非同期のリクエスト/レスポンスが含まれないWebサービス・シナリオにおいて、適切に起動および実行されます。ただし、サーバー・ログに、非同期リソースが構成されていないこと、およびWebサービスの非同期レスポンス・サービスが完全にデプロイされていないことを示すINFOメッセージが表示されます。

次の各手順は、Webサービスの高度な機能を使用するようにドメインを自動的に構成するためのドメインの作成方法および拡張方法を示しています。構成ウィザードを使用してWebLogic Serverドメインを作成および更新する手順の詳細は、『Oracle WebLogic Server構成ウィザードによるWebLogicドメインの作成』を参照してください。

Webサービスの高度な機能を使用するように自動的に構成されたドメインを作成するには:

1. 構成ウィザードを起動します。

2. 「ようこそ」ウィンドウで、「新しいWebLogicドメインの作成」を選択します。

3. 「次へ」をクリックします。

4. 「以下の製品をサポートするために、自動的に構成されたドメインを生成する」を選択し、「WebLogic Advanced Web Services for JAX-RPC Extension」を選択します。

5. 「次へ」をクリックします。

6. ドメインの名前と場所を入力し、「次へ」をクリックします。

7. 管理者のユーザー名とパスワードを構成し、「次へ」をクリックします。

8. サーバーの起動モードとJDKを構成し、「次へ」をクリックします。

9. JMSサービス、ファイル・ストア、その他の機能をさらに構成する場合は、「オプションの構成を選択」画面で項目を選択します。通常はこれは行いません。
それ以外の場合は、すべての項目が選択解除された状態で、「次へ」をクリックします。

10. 「構成のサマリー」画面に達したら、ドメインの詳細を確認して「作成」をクリックします。

11. 「完了」をクリックして終了します。

既存のドメインを拡張してこれらのWebサービス機能用に自動的に構成するには:

1. 構成ウィザードを起動します。

2. 「ようこそ」ウィンドウで、「既存のWebLogicドメインの拡張」を選択します。

3. 「次へ」をクリックします。

4. 拡張テンプレートを適用するドメインを選択します。

5. 「次へ」をクリックします。

6. 「以下の追加製品をサポートするために、自動的にドメインを拡張する」を選択し、「WebLogic Advanced Web Services for JAX-RPC Extension」を選択します。

7. 「次へ」をクリックします。

8. JMSサービスやファイル・ストアをさらに構成する場合は、「オプションの構成を選択」画面で項目を選択します。通常はこれは行いません。
それ以外の場合は、すべての項目が選択解除された状態で、「次へ」をクリックします。

9. 拡張しようとしているドメインが正しいことを確認して、「拡張」をクリックします。

10. 「完了」をクリックして終了します。

Javaから開始するWebLogic Webサービスの開発: 主な手順

この節では、Javaから開始してWebLogic Webサービスを開発する一般的な手順について説明します。つまり、JWSファイルを最初からコーディングして、サービスについて記述するWSDLファイルを後で生成するという手順です。このプロセスの具体的な例については、第2章「使用例とサンプル」を参照してください。

以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Webサービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。

注意:

この手順では、WebLogic Webサービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Webサービスの開発をそこに統合する場合の詳細は、「WebサービスのWebLogic分割開発ディレクトリ環境への統合」を参照してください。

表3-1 Javaから開始するWebサービスの開発手順

#

手順

説明

1

環境を設定します。

コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)コマンドを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2

プロジェクト・ディレクトリを作成します。

JWSファイル、ユーザー定義のデータ型のJavaソース、Ant build.xmlファイルが格納されるプロジェクト・ディレクトリを作成します。このディレクトリには自由に名前を付けることができます。

3

Webサービスを実装するJWSファイルを作成します。

「JWSファイルのプログラミング: 一般的な手順」を参照してください。

4

ユーザー定義のデータ型を作成する(オプション)

Webサービスでユーザー定義のデータ型を使用する場合は、その型を記述したJavaBeanを作成します。「ユーザー定義のJavaデータ型のプログラミング」を参照してください。

5

基本のAntビルド・ファイルbuild.xmlを作成します。

「基本的なAnt build.xmlファイルの作成」を参照してください。

6

JWSファイルに対してjwsc Antタスクを実行します。

ソース・コード、データ・バインディング・アーティファクト、デプロイメント記述子などがjwsc Antタスクによって出力ディレクトリ内に生成されます。この出力ディレクトリには、エンタープライズ・アプリケーションのディレクトリ構造も生成されます。この展開されたディレクトリは、後で反復的な開発プロセスの一環としてWebLogic Serverにデプロイします。「jwsc WebLogic WebサービスAntタスクの実行」を参照してください。

7

WebサービスをWebLogic Serverにデプロイします。

「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。

8

WebサービスのWSDLを参照します。

WebサービスのWSDLを参照して、Webサービスが適切にデプロイされたことを確認します。「WebサービスのWSDLの参照」を参照してください。

9

Webサービスをテストします。

「Webサービスのテスト」を参照してください。

10

Webサービスを編集する(オプション)

Webサービスに変更を加えるには、JWSファイルを更新し、「WebLogic Webサービスのデプロイとアンデプロイ」の説明のとおりにWebサービスをアンデプロイしてから、jwsc Antタスクの実行(ステップ6)から始まる手順を繰り返します。

Webサービスを呼び出すクライアント・アプリケーションの記述については、第6章「Webサービスの呼出し」を参照してください。

WSDLファイルから開始するWebLogic Webサービスの開発: 主な手順

この項では、既存のWSDLファイルに基づいてWebLogic Webサービスを開発する一般的な手順について説明します。このプロセスの具体的な例については、第3章「WebLogic Webサービスの開発」を参照してください。

以下に示すのは推奨の手順に過ぎません。独自の開発環境を設定してある場合は、WebLogic Webサービスを開発するために既存の環境を更新する際のガイドとして、この手順を利用できます。

この手順では既存のWSDLファイルがすでにあることを前提としています。

注意:

この手順では、WebLogic Webサービスの分割開発ディレクトリ環境は使用しません。この開発環境を使用していて、Webサービスの開発をそこに統合する場合の詳細は、「WebサービスのWebLogic分割開発ディレクトリ環境への統合」を参照してください。

表3-2 Javaから開始するWebサービスの開発手順

#

手順

説明

1

環境を設定します。

コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)コマンドを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2

プロジェクト・ディレクトリを作成します。

生成されるアーティファクトやAnt build.xmlファイルが格納されるプロジェクト・ディレクトリを作成します。

3

基本のAntビルド・ファイルbuild.xmlを作成します。

「基本的なAnt build.xmlファイルの作成」を参照してください。

4

WSDLファイルを、build.xml Antビルド・ファイルから読取り可能なディレクトリに置きます。

たとえば、WSDLファイルをプロジェクト・ディレクトリのwsdl_files子ディレクトリに置くことができます。

5

WSDLファイルに対してwsdlc Antタスクを実行します。

JWSサービス・エンドポイント・インタフェース(SEI)、途中まで作成済みのJWSクラス・ファイル、XMLスキーマ・データ型を表すJavaBeanなどが、wsdlc Antタスクによって出力ディレクトリ内に生成されます。「wsdlc WebLogic WebサービスAntタスクの実行」を参照してください。

6

wsdlc Antタスクにより生成された途中まで作成済みのJWSファイルを更新します。

wsdlc Antタスクでは途中まで作成済のJWSファイルが生成されます。Webサービスが希望どおりに動作するようにするには、独自のビジネス・コードを追加する必要があります。「wsdlcで生成される途中まで作成済みのJWS実装クラス・ファイルの更新」を参照。

7

JWSファイルに対してjwsc Antタスクを実行します。

wsdlc Antタスクによって生成されたアーティファクトと更新したJWS実装ファイルを指定して、Webサービスを実装するエンタープライズ・アプリケーションを生成します。「jwsc WebLogic WebサービスAntタスクの実行」を参照してください。

8

WebサービスをWebLogic Serverにデプロイします。

「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。

9

WebサービスのWSDLを参照します。

WebサービスのWSDLを参照して、Webサービスが適切にデプロイされたことを確認します。「WebサービスのWSDLの参照」を参照してください。

デプロイ済みWebサービスのWSDLを呼び出すときに使用するURLは、基本的に、元のWSDL内の<address>要素のlocation属性の値と同じです(ただし、ホストとポートの値が、サービスをデプロイしたWebLogic Serverインスタンスのホストとポートに対応する場合を除きます)。これは、wsdlc AntタスクがJWS実装ファイル内の@WLHttpTransportアノテーションのcontextPathおよびserviceURIの値を生成し、それらの値を合わせると、元のWSDLで指定されたエンドポイント・アドレスと同じURIが構成されるため。

10

Webサービスをテストします。

「Webサービスのテスト」を参照してください。

11

Webサービスを編集する(オプション)

Webサービスに変更を加えるには、JWSファイルを更新し、「WebLogic Webサービスのデプロイとアンデプロイ」の説明のとおりにWebサービスをアンデプロイしてから、jwsc Antタスクの実行(ステップ6)から始まる手順を繰り返します。

Webサービスを呼び出すクライアント・アプリケーションの記述については、第6章「Webサービスの呼出し」を参照してください。

基本的なAnt build.xmlファイルの作成

Antでは、XMLで記述されたビルド・ファイル(デフォルト名はbuild.xml)を使用します。このファイルには、<project>ルート要素と、Webサービス開発プロセスのさまざまな段階を指定した1つまたは複数のターゲットが含まれています。各ターゲットには、1つまたは複数のタスク、または実行可能なコードが含まれています。この節では、基本的なAntビルド・ファイルの作成方法について説明し、その後の節では、Webサービス開発プロセスのさまざまな段階(jwsc Antタスクを実行してJWSファイルを処理する、WebサービスをWebLogic Serverにデプロイする、など)の実行方法を指定したターゲットをビルド・ファイルに追加する方法について説明します。

以下のスケルトンのbuild.xmlファイルでは、以降の項で追加される他のすべてのターゲットを呼び出す、デフォルトのallターゲットを指定しています。

<project default="all">
<target name="all"
depends="clean,build-service,deploy" />
<target name="clean">
<delete dir="output" />
</target>
<target name="build-service">
<!--add jwsc and related tasks here -->
</target>
<target name="deploy">
<!--add wldeploy task here -->
</dftarget>
</project>

jwsc WebLogic WebサービスAntタスクの実行

jwsc Antタスクは、JWSアノテーションを含むJWSファイルを入力として取り、WebLogic Webサービスの作成に必要なアーティファクトをすべて生成します。JWSファイルは、最初から自分でコーディングしたものでも、wsdlc Antタスクによって生成されたものでもかまいません。jwscによって生成されるアーティファクトには、以下のものがあります。

- JSR-109 Webサービスのクラス・ファイル。

- 必要な全デプロイメント記述子。以下を含みます。

- 標準のWebサービス・デプロイメント記述子(webservices.xml)およびWebLogic固有のWebサービス・デプロイメント記述子(weblogic-webservices.xml)。

- JAX-RPCマッピング・ファイル。

- Javaクラス実装のWebサービスweb.xmlおよびweblogic.xml。

- EJB実装のWebサービスejb-jar.xmlおよびweblogic-ejb-jar.xml。

- Earデプロイメント記述子ファイルapplication.xmlおよびweblogic-application.xml。

- Webサービス操作のパラメータまたは戻り値として使用されるJavaユーザー定義データ型のXMLスキーマ表現。

- Webサービスの内容を外部に公開する形で記述したWSDLファイル。

これらのアーティファクトは、wsdlc Antタスクによってすでに生成され、JARファイル内にパッケージ化されているため、wsdlc Antタスクによって生成されたJWSファイルに対してjwsc Antタスクを実行しても、jwscタスクによってはアーティファクトは生成されません。この場合、jwsc Antタスクの属性を使用して、このwsdlc生成JARファイルを指定します。

必要なアーティファクトをすべて生成した後、jwsc Antタスクは、Javaファイル(JWSファイルも含む)をコンパイルし、コンパイルされたクラスと生成されたアーティファクトを、デプロイ可能なJARアーカイブ・ファイルにパッケージ化して、最後に、そのJARファイルを格納する、展開されたエンタープライズ・アプリケーション・ディレクトリを作成します。

jwsc Antタスクを実行するには、以下のtaskdefおよびbuild-serviceターゲットをbuild.xmlファイルに追加します。

<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src_directory"
destdir="ear_directory"
>
<jws file="JWS_file"
compiledWsdl="WSDLC_Generated_JAR"
type="WebService_type"/>
</jwsc>
</target>

説明:

- ear_directory - 生成されたすべてのアーティファクトを格納するエンタープライズ・アプリケーション・ディレクトリ。

- src_directory - JWSファイルのパッケージ名に対応するサブディレクトリを含む最上位ディレクトリ。

- JWS_file - src_directory属性の値に対して相対的なJWSファイルのパス名。

- WSDLC_Generated_JAR - JWS SEIと、既存のWSDLファイルに対応するデータ・バインディング・アーティファクトが含まれる、wsdlc Antタスクによって生成されたJARファイル。

注意:

この属性は、「WSDLから開始する」ユース・ケースでのみ指定します。この手順は「WSDLファイルから開始するWebLogic Webサービスの開発: 主な手順」で説明されています。

- WebService_type - Webサービスの種類。この値は、JAXWSまたはJAXRPCに設定できます。

必須のtaskdef要素では、jwsc Antタスクの完全修飾クラス名を指定します。

jwsc Antタスクのsrcdirおよびdestdir属性のみが必須です。つまり、デフォルトでは、JWSファイルが参照するJavaファイル(JavaBean入力パラメータやユーザー定義の例外など)はJWSファイルと同じパッケージ内にあると想定されています。これに当てはまらない場合は、sourcepath属性を使用して、これらの他のJavaファイルの最上位ディレクトリを指定します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「jwsc」を参照してください。

jwscの使用例

以下のbuild.xmlの抜粋では、JWSファイルに対してjwsc Antタスクを実行する基本的な例を示します。

<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src"
destdir="output/helloWorldEar">
<jws
file="examples/webservices/hello_world/HelloWorldImpl.java"
type="JAXRPC"/>
</jwsc>
</target>

この例では:

- カレント・ディレクトリに対して相対的なoutput/helloWorldEarに、エンタープライズ・アプリケーションが展開形式で生成されます。

- JWSファイルはHelloWorldImpl.javaという名前で、カレント・ディレクトリに対して相対的なsrc/examples/webservices/hello_worldディレクトリにあります。つまり、JWSファイルはパッケージexamples.webservices.helloWorld内にあります。

- JAX-RPC Webサービスが生成されます。

以下の例は前の例と似ていますが、compiledWsdl属性を使用して、wsdlcが生成したアーティファクト(「WSDLから開始する」ユース・ケース)を含むJARファイルを指定している点が異なります。

<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-service">
<jwsc
srcdir="src"
destdir="output/wsdlcEar">
<jws
file="examples/webservices/wsdlc/TemperaturePortTypeImpl.java"
compiledWsdl="output/compiledWsdl/TemperatureService_wsdl.jar"
type="JAXRPC"/>
</jwsc>
</target>

この例では、TemperaturePortTypeImpl.javaファイルが、独自のビジネス・ロジックを含めて更新した、途中まで作成されていたJWSファイルです。compiledWsdl属性が指定されてJARファイルを指し示しているので、jwsc Antタスクでは、JARに含まれているアーティファクトを再生成することはありません。

このタスクを実際に実行するには、コマンド・ラインで次のように入力します。

prompt> ant build-service

jwscの高度な使用方法

この項では、jwsc Antタスクの非常に簡単な使用例を紹介します。ただし、このタスクには、非常に有用なツールにするための追加の属性と子要素を含めます。以下のような使用方法が考えられます。

- 複数のJWSファイルを一度に処理します。生成されたWebサービスをそれぞれ別のWebアプリケーションWARファイルにパッケージ化するか、すべてのWebサービスをグループ化して1つのWARファイルにパッケージ化するかを選択できます。

- クライアント・アプリケーションがWebサービスを呼び出すときに使用できるトランスポート形式(HTTP/HTTPS/JMS)を指定します。状況によっては、既存の@WLXXXTransportアノテーションをすべてオーバーライドすることも可能です。

- JWSファイル内で呼び出す他のWebサービスのJAX-RPCクライアント・スタブを自動的に生成します。

- 新しいエンタープライズ・アプリケーションまたはWebアプリケーションを生成するのではなく、既存のアプリケーションを更新します。

jwsc Antタスクの詳細および例については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「jwsc」を参照してください。

wsdlc WebLogic WebサービスAntタスクの実行

wsdlc AntタスクはWSDLファイルを入力として取り、WebLogic Webサービスの実装を構成するアーティファクトを生成します。アーティファクトは次を含みます:

- WSDLファイルで記述されたWebサービスを実装するJWSサービス・エンドポイント・インタフェース(SEI)。

- 生成されるJWS SEIの不完全な(途中まで作成済みの)実装が含まれるJWS実装ファイル。このファイルは開発者がカスタマイズする必要があります。

- Webサービスのパラメータと戻り値をXML表現とJava表現の間で変換するために、WebLogic Serverによって使用されるデータ・バインディング・アーティファクト。

- (オプション)生成されるJWS SEIのJavadoc。

wsdlc AntタスクはJWS SEIとデータ・バインディング・アーティファクトを一緒にJARファイルにパッケージ化します。このJARファイルを後でjwsc Antタスクに指定します。このJARファイルを更新する必要はありません。更新するファイルはJWS実装クラスのみです。

wsdlc Antタスクを実行するには、以下のtaskdefおよびgenerate-from-wsdlターゲットをbuild.xmlファイルに追加します。

<taskdef name="wsdlc"
classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="WSDL_file"
destJwsDir="JWS_interface_directory"
destImplDir="JWS_implementation_directory"
packageName="Package_name"
type="WebService_type"/>
</target>

説明:

- WSDL_file - 部分的な実装を生成する元となるWSDLファイルの名前(絶対パスまたは相対パスを含めます)。

- JWS_interface_directory - JWS SEIおよびデータ・バインディング・アーティファクトを含むJARファイルの生成先となるディレクトリ。
生成されるJARファイルの名前はWSDLFile_wsdl.jar (WSDLFileはWSDLファイルのルート名)。たとえば、file属性に対して指定したWSDLファイルの名前がMyService.wsdlの場合、生成されるJARファイルはMyService_wsdl.jarとなります。

- JWS_implementation_directory - 途中まで作成済みのJWS実装ファイルの生成先となる最上位ディレクトリ。ファイルはパッケージ名に対応するサブディレクトリ階層に生成されます。
生成されるJWSファイルの名前はPortTypeImpl.javaです。PortTypeは、Webサービスを生成するWSDLファイル内の<portType>要素のname属性です。たとえば、ポート・タイプ名がMyServicePortTypeの場合、JWS実装ファイルはMyServicePortTypeImpl.javaという名前になります。

- Package_name - 生成されるJWS SEIおよび実装ファイルの生成先となるパッケージ。この属性を指定しない場合、wsdlc Antタスクは、WSDLのtargetNamespaceに基づいてパッケージ名を生成します。

- WebService_type - Webサービスの種類。この値は、JAXWSまたはJAXRPCに設定できます。

必須のtaskdef要素では、wsdlc Antタスクの完全修飾クラス名を指定します。

wsdlc Antタスクでは、srcWsdlおよびdestJwsDir属性のみが必須です。ただし、通常は、プログラミングを容易にするために、途中まで作成済みのJWSファイルを生成します。WSDLファイルのtargetNamespaceが、読取り可能なパッケージ名への変換に適していない場合に備えて、パッケージ名を明示的に指定することをお薦めします。

以下のbuild.xmlの抜粋では、WSDLファイルに対してwsdlc Antタスクを実行する例を示します。

<taskdef name="wsdlc"
classname="weblogic.wsee.tools.anttasks.WsdlcTask"/>
<target name="generate-from-wsdl">
<wsdlc
srcWsdl="wsdl_files/TemperatureService.wsdl"
destJwsDir="output/compiledWsdl"
destImplDir="impl_output"
packageName="examples.webservices.wsdlc"
type="JAXRPC" />
</target>

この例では:

- 既存のWSDLファイルはTemperatureService.wsdlという名前で、build.xmlファイルを格納するディレクトリのwsdl_filesサブディレクトリにあります。

- JWS SEIとデータ・バインディング・アーティファクトを含むJARファイルはoutput/compiledWsdlディレクトリに生成され、JARファイルの名前はTemperatureService_wsdl.jarです。

- 生成されるJWSファイルのパッケージ名はexamples.webservices.wsdldです。

- 途中まで作成済みのJWSファイルは、カレント・ディレクトリに対して相対的なimpl_output/examples/webservices/wsdlcディレクトリに生成されます。

- WSDLファイル内のポート・タイプ名がTemperaturePortTypeの場合、JWS実装ファイルの名前はTemperaturePortTypeImpl.javaになります。

- JAX-RPC Webサービスが生成されます。

このタスクを実際に実行するには、コマンド・ラインで次のように入力します。

prompt> ant generate-from-wsdl

詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「wsdlc」を参照してください。

wsdlcで生成される途中まで作成済みのJWS実装クラス・ファイルの更新

wsdlc Antタスクは、destImplDir属性で指定されたディレクトリに、途中まで作成済みのJWS実装ファイルを生成します。ファイルの名前はPortTypeImpl.javaです(PortTypeは元のWSDLにあるportTypeの名前)。このクラス・ファイルには、独自のビジネス・ロジックを除いて、Webサービスへコンパイルするために必要なすべてのものが含まれています。

JWSクラスは、WSDLファイルに対応するJWS Webサービス・エンドポイント・インタフェースを実装しています。このJWS SEIもwsdlcによって生成され、他のアーティファクト(WSDL内のXMLスキーマ・データ型のJava表現など)が含まれているJARファイル内に置かれています。JWSクラスのパブリック・メソッドはWSDLファイル内の操作に対応しています。

wsdlc Antタスクは、JWS実装クラスに@WebServiceおよび@WLHttpTransportアノテーションを自動的に含めます。属性の値はWSDL内の関連する値に対応しています。たとえば、@WebServiceのserviceName属性は、WSDLファイル内の<service>要素のname属性と同じです。@WLHttpTransportのcontextPathおよびserviceUri属性は共に、WSDL内の<address>要素のlocation属性で指定されたエンドポイント・アドレスを構成します。

JWSファイルを更新するときは、該当のWebサービス操作が希望どおりに動作するように、メソッドにJavaコードを追加します。通常、生成されるJWSファイルには、コードを追加すべき場所に次のようなコメントがあります。

//replace with your impl here

また、他のJWSアノテーションをファイルに追加することもできますが、以下のような制限があります。

- JWS実装ファイルに含めることができる標準(JSR-181)のjavax.jwsパッケージのアノテーションは、@WebService、@HandlerChain、@SOAPMessageHandler、および@SOAPMessageHandlersのみです。javax.jwsパッケージの他のJWSアノテーションを指定し、JWSファイルをWebサービスにコンパイルしようとすると、jwsc Antタスクはエラーを返します。

- @WebServiceアノテーションでは、serviceName、endpointInterface、およびtargetNamespace属性のみを指定できます。まれに、WSDLファイルに複数の<service>要素が指定されていることがあります。その場合は、serviceName属性を使用して、wsdlc Antタスクで使用していたものとは別の<service> WSDL要素を指定します。wsdlc Antタスクで生成されたJWS SEIを指定するには、endpointInterface属性を使用します。WSDLサービスのネームスペースを指定するには、targetNamespace属性を使用します。JWS SEIネームスペースと異なるネームスペースを指定できます。

- 必要に応じて、WebLogic固有のJWSアノテーションを指定することができます。

JWSファイルを更新したら、wsdlcの出力ディレクトリにそのまま置いておかないで、正式なソースの場所に移動することをお薦めします。

以下の例は、「サンプルWSDLファイル」のWSDLからwsdlcが生成したJWS実装ファイルです。太字のテキストは、Webサービスの1つの操作(getTemp)を実装するJavaコードを追加する場所を示しています。

package examples.webservices.wsdlc;
import javax.jws.WebService;
import weblogic.jws.*;
/**
* TemperaturePortTypeImpl class implements web service endpoint interface
* TemperaturePortType */
@WebService(
serviceName="TemperatureService",
endpointInterface="examples.webservices.wsdlc.TemperaturePortType")
@WLHttpTransport(
contextPath="temp",
serviceUri="TemperatureService",
portName="TemperaturePort")
public class TemperaturePortTypeImpl implements TemperaturePortType {
public TemperaturePortTypeImpl() {
}
public float getTemp(java.lang.String zipcode)
{
//replace with your impl here
return 0;
}
}

WebLogic Webサービスのデプロイとアンデプロイ

Webサービスはエンタープライズ・アプリケーションとしてパッケージ化されるので、Webサービスのデプロイとは、該当するEARファイルまたは展開されたディレクトリをデプロイすることになります。

管理コンソールの使用からweblogic.Deployer Javaユーティリティの使用まで、WebLogicアプリケーションのデプロイには多様な方法があります。開発環境とは異なり、本番環境にアプリケーションをデプロイする際には、他にも様々な問題を考慮する必要があります。デプロイメントの詳細な説明については、『Oracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイ』を参照してください。

このガイドでは、開発の性質上、Webサービスの2つのデプロイ方法についてのみ説明します。

- wldeploy Antタスクを使用したWebサービスのデプロイ

- 管理コンソールを使用したWebサービスのデプロイ

wldeploy Antタスクを使用したWebサービスのデプロイ

反復的な開発プロセスの一環としてWebサービスをデプロイする最も簡単な方法は、wldeploy WebLogic Antタスクを実行するターゲットを、jwsc Antタスクが含まれる同じbuild.xmlファイルに追加することです。Javaコードを追加してサービスを再生成するたびに、サービスの再デプロイとテストを繰返し行えるように、Webサービスをデプロイするターゲットとアンデプロイするターゲットの両方を追加することができます。

wldeploy Antタスクを使用するには、以下のターゲットをbuild.xmlファイルに追加します。

<target name="deploy">
<wldeploy action="deploy"
name="DeploymentName"
source="Source" user="AdminUser"
password="AdminPassword"
adminurl="AdminServerURL"
targets="ServerName"/>
</target>

説明:

- DeploymentName - エンタープライズ・アプリケーションのデプロイメント名、または、管理コンソールでデプロイメントのリストに表示される名前。

- Source - デプロイするエンタープライズ・アプリケーションのEARファイルまたは展開されたディレクトリの名前。デフォルトでは、jwsc Antタスクが展開されたエンタープライズ・アプリケーション・ディレクトリを生成します。

- AdminUser - 管理ユーザー名。

- AdminPassword - 管理パスワード。

- AdminServerURL - 管理サーバーのUrl。通常はt3://localhost:7001です。

- ServerName - WebサービスをデプロイするWebLogic Serverインスタンスの名前。

たとえば、以下のwldeployタスクでは、エンタープライズ・アプリケーションの展開されたディレクトリ(カレント・ディレクトリに対して相対的なoutput/ComplexServiceEarにあります)がmyServer WebLogic Serverインスタンスにデプロイされることを指定します。デプロイメント名はComplexServiceEarです。

<target name="deploy">
<wldeploy action="deploy"
name="ComplexServiceEar"
source="output/ComplexServiceEar" user="weblogic"
password="weblogic" verbose="true"
adminurl="t3://localhost:7001"
targets="myserver"/>
</target>

Webサービスを実際にデプロイするには、コマンド・ラインでdeployターゲットを実行します。

prompt> ant deploy

ソース・コードに変更を加えてからWebサービスを再デプロイできるように、Webサービスを簡単にアンデプロイするターゲットを追加することもできます。

<target name="undeploy">
<wldeploy action="undeploy"
name="ComplexServiceEar"
user="weblogic"
password="weblogic" verbose="true"
adminurl="t3://localhost:7001"
targets="myserver"/>
</target>

Webサービスをアンデプロイするときは、source属性を指定する必要はなく、名前によってアンデプロイします。

管理コンソールを使用したWebサービスのデプロイ

管理コンソールを使用してWebサービスをデプロイするには、最初に、ブラウザで次のURLを使用してWebサービスを呼び出します。

http://host:port/console

説明:

- host WebLogic Serverが動作しているコンピュータの名前。

- port - WebLogic Serverがリスニングしているポート番号(デフォルト値は7001)。

次にデプロイメント・アシスタントを使用して、エンタープライズ・アプリケーションをデプロイします。管理コンソールの詳細は、Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプを参照してください。

WebサービスのWSDLの参照

WebサービスのWSDLをブラウザで表示して、Webサービスが適切にデプロイされていることを確認できます。

次のURLは、WebサービスのWSDLをブラウザで表示する方法を示しています。

http://host:port/contextPath/serviceUri?WSDL

説明:

- host - WebLogic Serverが動作しているコンピュータの名前(localhostなど)。

- port - WebLogic Serverがリスニングしているポート番号(デフォルト値は7001)。

- contextPath - Webサービスのコンテキスト・ルート。コンテキスト・ルートを設定する場所としては、@WLHttpTransportアノテーションのcontextPath属性、jwscの<WLHttpTransport、<module、または<jws要素があり、オーバーライドの順位が決まっています。包括的な説明については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』のWebLogic Webサービスのコンテキスト・パスの定義に関する項を参照してください。

- serviceUri - Webサービスを実装するJWSファイルの@WLHttpTransport JWSアノテーションのserviceUri属性の値、またはjwsc Antタスクの<WLHttpTransport>子要素の値です; 前者より後者が優先されます。JWSファイルまたはjwsc AntタスクにおいてserviceUri属性を何も指定しない場合、WebサービスのserviceUriはデフォルト値(*.java拡張子の付かないJWSファイルの名前)になります。

たとえば、Webサービスを実装するJWSファイルで以下の@WLHttpTransportアノテーションを指定したとします。

...
@WLHttpTransport(contextPath="complex",
serviceUri="ComplexService",
portName="ComplexServicePort")
/**
* This JWS file forms the basis of a WebLogic Web Service.
*
*/
public class ComplexServiceImpl {
...

ここでは、jwsc Antタスクの<WLHttpTransport>要素と同等の属性を設定し、contextPathまたはserviceURIの値をオーバーライドしないこととします。そして、Webサービスがarielというホストのデフォルトのポート番号(7001)で実行されているとすると、そのWebサービスのWSDLを表示するURLは次のようになります。

http://ariel:7001/complex/ComplexService?WSDL

動的なWSDLで指定されたサーバー・アドレスの構成

デプロイ済のWebサービスのWSDL(動的なWSDLともいいます)には、特定のWebサービス・ポートにアドレス(URI)を割り当てる<address>要素が含まれています。たとえば、次に示すWSDLの抜粋には、ComplexServiceというデプロイ済みのWebLogic Webサービスの一部が記述されています。

<definitions name="ComplexServiceDefinitions"
targetNamespace="http://example.org">
...
<service name="ComplexService">
<port binding="s0:ComplexServiceSoapBinding" name="ComplexServicePort">
<s1:address location="http://myhost:7101/complex/ComplexService"/>
</port>
</service>
</definitions>

この例では、ComplexService WebサービスにComplexServicePortというポートが含まれており、そのアドレスはhttp://myhost:7101/complex/ComplexServiceとなっています。

WebLogic Serverは、このアドレスのcomplex/ComplexServiceの部分を、@WLXXXTransportアノテーションまたはjwsc要素のcontextPathおよびserviceURI属性を調べることによって決定します(「WebサービスのWSDLの参照」に説明があります)。しかし、WebLogic Serverがアドレスのプロトコルおよびホスト部分(この例ではhttp://myhost:7101)を決定するために使用する方法は、次で説明するとおり、より複雑です。この項では、わかりやすいように、アドレスのプロトコルとホストの部分をまとめてサーバー・アドレスと呼ぶことにします。

WebLogic Serverがデプロイ済みのWebサービスの動的なWSDL内にパブリッシュするサーバー・アドレスは、そのWebサービスをHTTP/SやJMSで呼び出せるかどうか、プロキシ・サーバーを構成しているかどうか、Webサービスがクラスタにデプロイされているかどうか、Webサービスが実際にはコールバック・サービスであるかどうかによって異なります。

以下では、これらの構成の違いに応じたサーバー・アドレスの決定方法について説明します。また、ニーズに合わせて構成を変更するための手順説明へのリンクも示します。

- Webサービスがコールバック・サービスでなく、HTTP/Sを使用して呼び出せる場合

- Webサービスがコールバック・サービスでなく、JMSトランスポートを使用して呼び出せる場合

- Webサービスがコールバック・サービスである場合

- Webサービスがプロキシ・サーバーを使用して呼び出せる場合

なお、ここでは、クラスタとスタンドアロン・サーバーを、WebLogic Server管理コンソールを使用して構成することを前提としています。

Webサービスがコールバック・サービスでなく、HTTP/Sを使用して呼び出せる場合

1. Webサービスがクラスタにデプロイされており、クラスタのFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portが設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタのHTTP設定の構成に関する項を参照してください。

2. 上記のクラスタ値は設定されていないが、Webサービスがデプロイされている個々のサーバーでFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portの値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのHTTPプロトコルの構成に関する項を参照してください。

3. これらの値がクラスタにも個々のサーバーにも設定されていない場合は、動的なWSDL内のWSDLリクエストのサーバー・アドレスが使用されます。

Web Serviceがコールバック・サービスでなく、JMSトランスポートを使用して呼び出せる場合

1. Webサービスがクラスタにデプロイされており、Cluster Addressが設定されている場合は、動的なWSDLのサーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタの構成に関する項を参照してください。

2. クラスタ値が設定されていないか、Webサービスがスタンドアロン・サーバーにデプロイされており、WebサービスがデプロイされているサーバーのListen Addressが設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのリスニング・アドレスの構成に関する項を参照してください。

Webサービスがコールバック・サービスである場合

1. コールバック・サービスがクラスタにデプロイされており、クラスタのFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portが設定されている場合は、動的なWSDLのサーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタのHTTP設定の構成に関する項を参照してください。

2. コールバック・サービスがクラスタまたはスタンドアロン・サーバーにデプロイされており、上記のクラスタ値は設定されていないが、コールバック・サービスがデプロイされている個々のサーバーでFrontend Host、Frontend HTTP Port、およびFrontend HTTPS Portの値が設定されている場合は、サーバー・アドレスにこれらの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのHTTPプロトコルの構成に関する項を参照してください。

3. コールバック・サービスがクラスタにデプロイされており、上記のどの値も設定されていないがCluster Addressが設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタの構成に関する項を参照してください。

4. 上記のどの値も設定されていないが、コールバック・サービスがデプロイされているサーバーのListen Addressが設定されている場合は、サーバー・アドレスにこの値が使用されます。
Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのリスニング・アドレスの構成に関する項を参照してください。

Webサービスがプロキシ・サーバーを使用して呼び出せる場合

必須ではありませんが、Webサービスがデプロイされているクラスタまたは個々のサーバーのいずれかのFrontend Host、FrontEnd HTTP Port、およびFrontend HTTPS Portがプロキシ・サーバーを指すように明示的に設定することをお薦めします。

Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのクラスタのHTTP設定の構成に関する項またはHTTPプロトコルの構成に関する項を参照してください。

Webサービスのテスト

WebLogic Webサービスのデプロイメントが完了したら、WebLogic管理コンソールに含まれているWebサービス・テスト・クライアントを使用して、コードを記述することなくサービスをテストできます。複合型を持つWebサービスや、WebLogic Serverの高度な機能(会話など)を使用するWebサービスも含めて、Webサービスを素早く簡単にテストできます。テスト・クライアントはリクエストの完全なログを自動的に保持しているので、ユーザーは以前の呼出しに戻って結果を表示することができます。

デプロイしたWebサービスを管理コンソールを使用してテストするには、次の手順に従います。

1. 次のURLを使用して、ブラウザで管理コンソールを呼び出します。

http://host:port/console

説明:

- host WebLogic Serverが動作しているコンピュータの名前。

- port - WebLogic Serverがリスニングしているポート番号(デフォルト値は7001)。

2. Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプのWebサービスのテストに関する項で説明されている手順に従います。

WebサービスのWebLogic分割開発ディレクトリ環境への統合

この項では、Webサービスの開発をWebLogic分割開発ディレクトリ環境に統合する方法について説明します。このWebLogic機能について理解していること、標準のJava Platform, Enterprise Edition (Java EE)バージョン5アプリケーションおよびモジュール(EJBやWebアプリケーションなど)の開発用にこのタイプの環境を設定済みであること、Webサービスの開発が含まれるようにbuild.xmlファイルを更新しようとしていることを前提としています。

WebLogic分割開発ディレクトリ環境の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の分割開発ディレクトリ環境の作成に関する項およびWebLogic Serverと一緒にインストールされるsplitdir/helloWorldEarサンプルを参照してください。サンプルは、WL_HOME/samples/server/examples/src/examplesディレクトリにあります。WL_HOMEはWebLogic Serverがインストールされている最上位ディレクトリです。

1. メイン・プロジェクト・ディレクトリ内に、Webサービスを実装するJWSファイルを格納するためのディレクトリを作成します。
たとえば、メイン・プロジェクト・ディレクトリが/src/helloWorldEarである場合、/src/helloWorldEar/helloWebServiceというディレクトリを作成します。

prompt> mkdir /src/helloWorldEar/helloWebService

2. helloWebServiceディレクトリの下に、JWSファイルのパッケージ名に対応するディレクトリ階層を作成します。
たとえば、JWSファイルがexamples.splitdir.helloパッケージにパッケージ化されている場合は、examples/splitdir/helloというディレクトリ階層を作成します。

prompt> cd /src/helloWorldEar/helloWebService
prompt> mkdir examples/splitdir/hello

3. メイン・プロジェクト・ディレクトリに作成したWebサービスのサブディレクトリ(この例では/src/helloWorldEar/helloWebService/examples/splitdir/hello)にJWSファイルを置きます。

4. エンタープライズ・アプリケーションをビルドするbuild.xmlファイル内に、「jwsc WebLogic WebサービスAntタスクの実行」の説明に従ってjwsc WebLogic WebサービスAntタスクの呼出しを追加して、Webサービスをビルドする新しいターゲットを作成します。
jwscのsrcdir属性は、JWSファイルを格納する最上位ディレクトリ(この例ではhelloWebService)を指すようにします。jwscのdestdir属性は、wlcompileに指定するのと同じ宛先ディレクトリを指すようにします。次の例を参照してください。

<target name="build.helloWebService">
<jwsc
srcdir="helloWebService"
destdir="destination_dir"
keepGenerated="yes" >
<jws file="examples/splitdir/hello/HelloWorldImpl.java"
type="JAXRPC" />
</jwsc>
</target>

この例のdestination_dirは、他の分割開発ディレクトリ環境のAntタスク(wlappcやwlcompileなど)も使用する宛先ディレクトリを表します。

5. Webサービス関連のターゲットを呼び出すように、build.xmlファイルのメインのbuildターゲットを更新します。

<!-- Builds the entire helloWorldEar application -->
<target name="build"
description="Compiles helloWorldEar application and runs appc"
depends="build-helloWebService,compile,appc" />

注意:

エンタープライズ・アプリケーションを実際にビルドするときは、wlappc Antタスクを実行する前に、jwsc Antタスクを実行するようにしてください。wlappcを正常に実行するには、jwscによって生成されるアーティファクトの一部が必要になるためです。この例の場合は、appcターゲットよりも前にbuild-helloWebServiceターゲットを指定する必要があります。

6. wlcompileおよびwlappc Antタスクを使用してエンタープライズ・アプリケーション全体をコンパイルおよび検証する場合は、両方のAntタスクでWebサービスのソース・ディレクトリを除外するようにしてください。これは、jwsc AntタスクでWebサービスのコンパイルとパッケージ化をすでに扱っているからです。例:

<target name="compile">
<wlcompile srcdir="${src.dir}" destdir="${dest.dir}"
excludes="appStartup,helloWebService">
...
</wlcomplile>
...
</target>
<target name="appc">
<wlappc source="${dest.dir}" deprecation="yes" debug="false"
excludes="helloWebService"/>
</target>

7. META-INFプロジェクト・ソース・ディレクトリにあるapplication.xmlファイルを更新して、<web>モジュールを追加し、jwsc Antタスクによって生成されるWARファイルの名前を指定します。
たとえば、helloWorld Webサービスのapplication.xmlファイルに以下のように追加します。

<application>
...
<module>
<web>
<web-uri>examples/splitdir/hello/HelloWorldImpl.war</web-uri>
<context-root>/hello</context-root>
</web>
</module>
...
</application>

注意:

jwsc Antタスクでは通常、Webサービスを実装するJWSファイルからWebアプリケーションWARファイルが生成されます。ただし、JWSファイルにjavax.ejb.SessionBeanが明示的に実装されている場合は例外です。その場合は、application.xmlファイルに<ejb>モジュール要素を追加する必要があります。

これで、分割開発ディレクトリ環境は、Webサービスの開発を含むように更新されました。エンタープライズ・アプリケーション全体を再ビルドしてデプロイするときに、WebサービスもEARの一部としてデプロイされます。Webサービスは、「WebサービスのWSDLの参照」で説明されている標準的な方法で呼び出します。

4 JWSファイルのプログラミング

この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Webサービスを実装するJWSファイルのプログラミング方法について説明します。

この章では、以下のトピックについて説明します。

- JWSファイルとJWSアノテーションの概要

- JWSファイルのJava要件

- JWSファイルのプログラミング: 一般的な手順

- Webサービスの実行時情報へのアクセス

- ステートレス・セッションEJBを実装すべき場合

- ユーザー定義のJavaデータ型のプログラミング

- 例外のスロー

- JWSファイルからの別のWebサービスの呼出し

- JWSアノテーションおよびAPIによるその他の機能のプログラミング

- JWSプログラミングのベスト・プラクティス

JWSファイルとJWSアノテーションの概要

WebLogic Webサービスをゼロからプログラミングする方法は2つあります。

1. JSR-181、JAX-WS仕様、およびWebLogic Webサービス・プログラミング・モデルで規定されているように、標準のEJBまたはJavaクラスにWebサービスJavaアノテーションを付けます。

2. デプロイメント記述子、WSDLファイル、データ・マッピング記述子、データ・バインディング・アーティファクト(ユーザー定義のデータ型用)など、JSR-109で指定されている様々なXML記述子ファイルやアーティファクトと、標準のEJBまたはJavaクラスを結合します。

Oracleでは、上記のオプション1を実行することを強くお薦めします。ユーザー自身がXMLメタデータ記述子を作成しなくても、必要な記述子やアーティファクトはJWSにユーザーが含めたアノテーションに基づいてWebLogic Antタスクおよびランタイムによって生成されます。このプロセスの方がはるかに簡単なだけでなく、Webサービスの情報が多数のJavaファイルやXMLファイル内に分散されず、JWSファイルで集中管理されます。

アノテーション付きのJava Webサービス(JWS)ファイルは、Webサービスの中核部分です。このファイルにはWebサービスの動作を決定するJavaコードが含まれています。JWSファイルは、Javaメタデータ・アノテーションを使用してWebサービスの形式や特性を指定した、通常のJavaクラス・ファイルです。JWSファイルでは、Web Services Metadata for the Java Platform仕様(JSR-181)(http://www.jcp.org/en/jsr/detail?id=181を参照)で定義される標準的なJWSアノテーションに加え、作成中のWebサービスの種類(JAX-WSまたはJAX-RPC)に基づいたその他のアノテーション・セットの使用が可能です。JAX-WS WebサービスおよびJAX-RPC Webサービスに対してサポートされているJWSアノテーションの完全なリストについては、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービス・リファレンス』のWebサービスのアノテーションのサポートに関する項を参照してください。

JWSファイルをプログラミングする際は、基本的なWebサービス機能をプログラミングするためにアノテーションを含めます。アノテーションは、JWSファイル内の様々なレベル、様々なターゲットで使用されます。一部のアノテーションは、JWSファイル全体に適用されることを示すためにクラス・レベルで使用されます。それ以外のアノテーションには、メソッド・レベルで使用するものや、パラメータ・レベルで使用するものがあります。

JWSファイルのJava要件

JWSファイルをプログラミングする場合は、Web Services Metadata for the Java Platform仕様(JSR-181)(http://www.jcp.org/en/jsr/detail?id=181)で指定された一連の要件に従う必要があります。特に、Webサービスを実装するJavaクラスは、次の要件に従う必要があります。

- パブリック・クラスでなければなりません。finalクラスやabstractクラスとして宣言することはできません。

- デフォルトのパブリック・コンストラクタを持つ必要があります。

- finalize()メソッドは定義できません。

- 少なくとも、クラス・レベルで@WebService JWSアノテーションを指定して、そのJWSファイルがWebサービスを実装することを指定する必要があります。

- @WebService.endpointInterfaceアノテーションを使用して、サービス・エンドポイント・インタフェースを参照できます。この場合は、サービス・エンドポイント・インタフェースが存在することを前提としています。JWSファイルでは@WebService.endpointInterface、@WebService.serviceName、および@WebService.targetNamespace以外のJWSアノテーションを指定することはできません。

- JWSファイルにサービス・エンドポイント・インタフェースが実装されていない場合は、java.lang.Objectから継承されたもの以外のすべてのパブリック・メソッドがWebサービス操作として公開されます。この動作は、@WebMethodアノテーションを使用して、公開するパブリック・メソッドを明示的に指定することによって、オーバーライドできます。@WebMethodアノテーションが存在する場合は、それが適用されるメソッドのみが公開されます。

JWSファイルのプログラミング: 一般的な手順

次の手順では、Webサービスを実装するJWSファイルをプログラミングするための一般的な手順を説明します。

注意:

JWSファイルを作成してあり、そこにJWSアノテーションを追加する予定であることを前提としています。

各JWSアノテーションの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービス・リファレンス』のJWSアノテーション・リファレンスの項を参照してください。他のJWSアノテーションを使用して、より高度な機能(Webサービスの信頼性のあるメッセージング、会話、SOAPメッセージ・ハンドラなど)をプログラミングする方法については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービスの高度な機能のプログラミング』を参照してください。

表4-1 JWSファイルのプログラミング手順

#

手順

説明

1

JWSファイルで使用する標準のJWSアノテーションをインポートします。

標準のJWSアノテーションはjavax.jwsまたはjavax.jws.soapパッケージにあります。例:

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

2

JWSファイルで使用するWebLogic固有のアノテーションをインポートします。

WebLogic固有のアノテーションはweblogic.jwsパッケージにあります。例:

import weblogic.jws.WLHttpTransport;

3

必須の標準@WebService JWSアノテーションをクラス・レベルで追加して、JavaクラスがWebサービスを公開することを指定します。

「JWSファイルがWebサービスを実装することの指定(@WebServiceアノテーション)」を参照してください。

4

標準の@SOAPBinding JWSアノテーションをクラス・レベルで追加して、WebサービスとSOAPメッセージ・プロトコルの間のマッピングを指定する(オプション)

特に、このアノテーションを使用して、Webサービスがドキュメント・リテラルか、RPCエンコードかなどを指定します。「WebサービスとSOAPメッセージ・プロトコルのマッピングの指定(@SOAPBindingアノテーション)」を参照してください。

このJWSアノテーションは必須ではありませんが、JWSファイルで明示的に指定し、クライアント・アプリケーションがWebサービスの呼出しに使用するSOAPバインディングのタイプを明確にすることをお薦めします。

5

WebLogic固有の@WLHttpTransport JWSアノテーションをクラス・レベルで追加して、Webサービスを呼び出すURLで使用されるコンテキスト・パスとサービスURIを指定します。(オプション)

「Webサービスのコンテキスト・パスとサービスURIの指定(@WLHttpTransportアノテーション)」を参照してください。

このJWSアノテーションは必須ではありませんが、JWSファイルで明示的に指定し、クライアント・アプリケーションがWebサービスの呼出しに使用するURLを明確にすることをお薦めします。

6

パブリック操作として公開するJWSファイルの各メソッドで標準の@WebMethodアノテーションを追加する(オプション)

必要に応じて、標準の@Onewayアノテーションを使用し、その操作が入力パラメータだけを取り、値を返さないことを指定します。「JWSメソッドをパブリック操作として公開することの指定(@WebMethodおよび@OneWayアノテーション)」を参照してください。

7

@WebParamアノテーションを追加し、公開される操作の入力パラメータの名前をカスタマイズする(オプション)

「操作のパラメータとWSDL要素のマッピングのカスタマイズ(@WebParamアノテーション)」を参照してください。

8

@WebResultアノテーションを追加し、公開される操作の戻り値の名前と動作をカスタマイズする(オプション)

「操作の戻り値とWSDL要素のマッピングのカスタマイズ(@WebResultアノテーション)」を参照してください。

9

独自のビジネス・コードを追加します。

Webサービスが希望どおりに動作するように、独自のビジネス・コードをメソッドに追加します。

JWSファイルの例

次のサンプルJWSファイルでは、簡単なWebサービスの実装方法を示します。

package examples.webservices.simple;
// Import the standard JWS annotation interfaces
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// Import the WebLogic-specific JWS annotation interfaces
import weblogic.jws.WLHttpTransport;
// Standard JWS annotation that specifies that the porType name of the Web
// Service is "SimplePortType", the service name is "SimpleService", and the
// targetNamespace used in the generated WSDL is "http://example.org"
@WebService(name="SimplePortType", serviceName="SimpleService",
targetNamespace="http://example.org")
// Standard JWS annotation that specifies the mapping of the service onto the
// SOAP message protocol.  In particular, it specifies that the SOAP messages
// are document-literal-wrapped.
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
// WebLogic-specific JWS annotation that specifies the context path and
// service URI used to build the URI of the Web Service is
// "simple/SimpleService"
@WLHttpTransport(contextPath="simple", serviceUri="SimpleService",
portName="SimpleServicePort")
/**
* This JWS file forms the basis of simple Java-class implemented WebLogic
* Web Service with a single operation: sayHello
*
*/
public class SimpleImpl {
// Standard JWS annotation that specifies that the method should be exposed
// as a public operation.  Because the annotation does not include the
// member-value "operationName", the public name of the operation is the
// same as the method name: sayHello.
@WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
}

JWSファイルがWebサービスを実装することの指定(@WebServiceアノテーション)

次のコードの抜粋のように、標準の@WebServiceアノテーションを使用して、JWSファイルがWebサービスを実装することをクラス・レベルで指定します。

@WebService(name="SimplePortType", serviceName="SimpleService",
targetNamespace="http://example.org")

この例では、Webサービスの名前はSimplePortTypeであり、jwsc Antタスクによって生成されるWSDLファイルのwsdl:portType要素に後でマップされます。サービス名はSimpleServiceであり、生成されるWSDLファイルのwsdl:service要素にマップされます。生成されるWSDLで使用されるターゲット・ネームスペースはhttp://example.orgです。

@WebServiceアノテーションの以下の追加の属性を指定することもできます。

- endpointInterface - 既存のサービス・エンドポイント・インタフェース・ファイルの完全修飾名。このアノテーションによって、実装からインタフェース定義を切り離すことができます。この属性を指定した場合、jwsc Antタスクはそのインタフェースを生成しません。そのインタフェースは作成されていて、CLASSPATHに入っていると想定します。

- portname - wsdl:port内で使用される名前。

@WebServiceアノテーションの属性はいずれも必須ではありません。各属性のデフォルト値については、Web Services Metadata for the Java Platform(JSR 181)(http://www.jcp.org/en/jsr/detail?id=181)を参照してください。

WebサービスとSOAPメッセージ・プロトコルのマッピングの指定(@SOAPBindingアノテーション)

ここでは、WebサービスをSOAPメッセージ・プロトコルで使用できるようにします。そのためには、JWSファイル内にクラス・レベルで標準の@SOAPBindingアノテーションを含めて、WebサービスのSOAPバインディング(RPCエンコードまたはdocument-literal-wrappedなど)を指定します(次のコードの抜粋を参照)。

@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)

この例で、Webサービスはdocument-wrapped-styleエンコーディングとリテラル・メッセージ・フォーマットを使用していますが、@SOAPBindingアノテーションを使用しない場合でも、これらはデフォルトのフォーマットとなります。

WebLogic固有の@weblogic.jws.soap.SOAPBindingアノテーションを使用して、メソッド・レベルのSOAPバインディングを指定することもできます。属性は、標準の@javax.jws.soap.SOAPBindingアノテーションと同じです。

parameterStyle属性を(style=SOAPBinding.Style.DOCUMENT属性と一緒に)使用して、Webサービス操作のパラメータがSOAPメッセージ本文全体を表すかどうか、または操作と同じ名前の最上位要素内にラップされる要素かどうかを指定します。

表4-2 @SOAPBindingアノテーションの属性

属性

指定できる値

デフォルト値

style

SOAPBinding.Style.RPC
SOAPBinding.Style.DOCUMENT

SOAPBinding.Style.DOCUMENT

use

SOAPBinding.Use.LITERAL
SOAPBinding.Use.ENCODED

SOAPBinding.Use.LITERAL

parameterStyle

SOAPBinding.ParameterStyle.BARE
SOAPBinding.ParameterStyle.WRAPPED

SOAPBinding.ParameterStyle.WRAPPED

Webサービスのコンテキスト・パスとサービスURIの指定(@WLHttpTransportアノテーション)

WebLogic固有の@WLHttpTransportアノテーションを使用して、HTTPトランスポートでWebサービスを呼び出すために使用するURLのコンテキスト・パスとサービスURIの部分、および生成されるWSDL内のポート名を指定します(次のコードの抜粋を参照)。

@WLHttpTransport(contextPath="simple", serviceUri="SimpleService",
portName="SimpleServicePort")

この例では、jwsc Antタスクによって生成されるWSDLファイル内のポート名(具体的には<port>要素のname属性)はSimpleServicePortです。HTTPを介してWebサービスを呼び出すために使用するURLには、次の例のように、simpleというコンテキスト・パスとSimpleServiceというサービスURIが含まれます。

http://host:port/simple/SimpleService

このアノテーションやその他のWebLogic固有のアノテーションに関するリファレンス・ドキュメントについては、『WebLogic Webサービス・リファレンス』の「JWSアノテーション・リファレンス」を参照してください。

JWSメソッドをパブリック操作として公開することの指定(@WebMethodおよび@OneWayアノテーション)

標準の@WebMethodアノテーションを使用して、JWSファイルのメソッドをWebサービスのパブリック操作として公開することを指定します(次のコードの抜粋を参照)。

public class SimpleImpl {
@WebMethod(operationName="sayHelloOperation")
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
...

この例では、SimpleImpl JWSファイルのsayHello()メソッドがWebサービスのパブリック操作として公開されます。ただし、operationName属性では、WSDLファイル内の操作のパブリック名はsayHelloOperationになることを指定しています。operationName属性を指定しない場合は、メソッドの名前が操作のパブリック名になります。

action属性を使用して操作のアクションを指定することもできます。SOAPをバインディングとして使用する場合、action属性の値によって、SOAPメッセージ内のSOAPActionヘッダーの値が決まります。

標準の@Onewayアノテーションを使用して、操作が呼出し側アプリケーションに値を返さないことを指定できます。次の例を参照してください。

public class OneWayImpl {
@WebMethod()
@Oneway()
public void ping() {
System.out.println("ping operation");
}
...

操作が一方向であることを指定する場合、実装するメソッドはvoidを返す必要があります。パラメータとしてホルダー・クラスを使用したり、チェック済み例外をスローしたりすることはできません。

@WebMethodアノテーションの属性はいずれも必須ではありません。各属性のデフォルト値と@WebMethodおよび@Onewayアノテーションの詳細は、Web Services Metadata for the Java Platform(JSR 181)(http://www.jcp.org/en/jsr/detail?id=181)を参照してください。

JWSファイル内のどのパブリック・メソッドにも@WebMethodアノテーションを付けていない場合、デフォルトではすべてのパブリック・メソッドがWebサービス操作として公開されます。

操作のパラメータとWSDL要素のマッピングのカスタマイズ(@WebParamアノテーション)

標準の@WebParamアノテーションを使用して、Webサービス操作の入力パラメータと生成されるWSDLファイルの要素との間のマッピングをカスタマイズしたり、パラメータの動作を指定したりします(次のコードの抜粋を参照)。

public class SimpleImpl {
@WebMethod()
@WebResult(name="IntegerOutput",
targetNamespace="http://example.org/docLiteralBare")
public int echoInt(
@WebParam(name="IntegerInput",
targetNamespace="http://example.org/docLiteralBare")
int input)
{
System.out.println("echoInt '" + input + "' to you too!");
return input;
}
...

この例では、生成されるWSDLファイル内のechoInt操作のパラメータ名はIntegerInputになります。JWSファイルに@WebParamアノテーションがない場合、生成されるWSDLファイル内のパラメータ名は、メソッドのパラメータ名inputと同じになります。targetNamespace属性は、パラメータのXMLネームスペースがhttp://example.org/docLiteralBareであることを指定します。この属性は、パラメータとXML要素がマップされる、ドキュメント・スタイルのSOAPバインディングを使用する場合にのみ有効です。

@WebParamアノテーションの以下の追加の属性を指定することもできます。

- mode - パラメータの入出力の方向(WebParam.Mode.IN、WebParam.Mode.OUT、またはWebParam.Mode.INOUT)。OUTおよびINOUTモードは、Holder型のJAX-RPC定義に準拠するパラメータ型に対してのみ指定できます。OUTおよびINOUTモードは、RPC形式の操作、またはヘッダーにマップされるパラメータでのみサポートされます。

- header - trueに設定した場合、パラメータの値はデフォルトの本文からではなくSOAPヘッダーから取得されることを指定する、ブール型の属性。

@WebParamアノテーションの属性はいずれも必須ではありません。各属性のデフォルト値については、Web Services Metadata for the Java Platform (JSR 181)仕様(http://www.jcp.org/en/jsr/detail?id=181)を参照してください。

操作の戻り値とWSDL要素のマッピングのカスタマイズ(@WebResultアノテーション)

標準の@WebResultアノテーションを使用して、Webサービス操作の戻り値と生成されるWSDLファイル内の対応する要素との間のマッピングをカスタマイズします(次のコードの抜粋を参照)。

public class Simple {
@WebMethod()
@WebResult(name="IntegerOutput",
targetNamespace="http://example.org/docLiteralBare")
public int echoInt(
@WebParam(name="IntegerInput",
targetNamespace="http://example.org/docLiteralBare")
int input)
{
System.out.println("echoInt '" + input + "' to you too!");
return input;
}
...

この例では、生成されるWSDLファイル内のechoInt操作の戻り値の名前はIntegerOutputになります。JWSファイルに@WebResultアノテーションがない場合、生成されるWSDLファイル内の戻り値の名前は、ハード・コード化された名前returnになります。targetNamespace属性は、戻り値のXMLネームスペースがhttp://example.org/docLiteralBareであることを指定します。この属性は、戻り値とXML要素がマップされる、ドキュメント・スタイルのSOAPバインディングを使用する場合にのみ有効です。

@WebResultアノテーションの属性はいずれも必須ではありません。各属性のデフォルト値については、Web Services Metadata for the Java Platform (JSR 181)仕様(http://www.jcp.org/en/jsr/detail?id=181)を参照してください。

Webサービスの実行時情報へのアクセス

次の各項では、Webサービスの実行時情報へのアクセス方法について説明します。

- JwsContextを使用した実行時情報へのアクセス: Webサービス・コンテキストを使用して、JWSファイル内のサービスの実行時情報にアクセスし、その情報を変更します。

- Stubインタフェースを使用した実行時情報へのアクセス: クライアント・ファイル内のStubインタフェース上のプロパティを取得および設定します。

JwsContextを使用した実行時情報へのアクセス

JWSファイルを実装したWebLogic Webサービスをクライアント・アプリケーションが呼び出すと、WebLogic Serverでコンテキストが自動的に作成され、Webサービスはこのコンテキストを使用してサービスに関する実行時情報にアクセスし、場合によっては変更することもできます。この情報の大半は、現在の会話が終了したかどうか、現在の会話のプロパティ値、実行時の会話のプロパティの変更など、会話に関連しています。(会話の詳細および実装方法については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービスの高度な機能のプログラミング』の会話形式のWebサービスの作成に関する項を参照してください。)コンテキストを介してアクセス可能な情報の一部は、Webサービスの呼出しに使用されたプロトコル(HTTP/SまたはJMS)、SOAPメッセージ・リクエスト内にあったSOAPヘッダーなど、より一般的な情報で構成されています。

次の項で説明するように、JWSファイル内のアノテーションおよびWebLogic WebサービスAPIを使用して、実行時のコンテキスト情報にアクセスできます。

Webサービス・コンテキストへのアクセスに関するガイドライン

コンテキストを使用して、Webサービスの呼出しに使用されていたプロトコルを特定する簡単なサンプルJWSファイルを次に示します。太字のコードについては、例の後のプログラミングのガイドラインで説明しています。

package examples.webservices.jws_context;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Context;
import weblogic.wsee.jws.JwsContext;
import weblogic.wsee.jws.Protocol;
@WebService(name="JwsContextPortType", serviceName="JwsContextService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="contexts", serviceUri="JwsContext",
portName="JwsContextPort")
/**
* Simple web service to show how to use the @Context annotation.
*/
public class JwsContextImpl {
@Context
private JwsContext ctx;
@WebMethod()
public String getProtocol() {
Protocol protocol = ctx.getProtocol();
System.out.println("protocol: " + protocol);
return "This is the protocol: " + protocol;
}
}

JWSファイルで、次のガイドライン(上記の例の太字で示されたコード)を使用して、Webサービスの実行時コンテキストにアクセスします。

- @weblogic.jws.Context JWSアノテーションをインポートします。

import weblogic.jws.Context;

- weblogic.wsee.jws.JwsContext APIと、使用する他の関連API (例ではweblogic.wsee.jws.Protocol APIも使用)をインポートします。

import weblogic.wsee.jws.JwsContext;
import weblogic.wsee.jws.Protocol;

コンテキスト関連のAPIに関するドキュメントについては、Oracle Fusion Middleware Oracle WebLogic Server APIリファレンス』の「weblogic.wsee.*パッケージ」を参照してください。

- データ型weblogic.wsee.jws.JwsContextのプライベート変数に、フィールド・レベルの@Context JWSアノテーションを指定します。

@Context
private JwsContext ctx;

WebLogic Serverでは、Webサービスの初回の呼出しの際に、実行時にJwsContextの実装を指定するアノテーションを付加された変数(この場合はctx)が自動的に割り当てられます。これにより、この変数を後で使用する場合、コード内で明示的に初期化する必要がありません。

JwsContextクラスのメソッドを使用して、Webサービスの実行時情報にアクセスします。次の例では、Webサービスの呼出しに使用されたプロトコルを取得する方法を示します。

Protocol protocol = ctx.getProtocol();

使用できるメソッドの詳細なリストについては、「JwsContextのメソッド」を参照してください。

JwsContextのメソッド

次の表に、JWSファイル内でWebサービスの実行時情報にアクセスするために使用可能なJwsContextのメソッドの説明を示します。JwsContextおよびその他のコンテキスト関連API(ProtocolやServiceHandleなど)の詳細なリファレンス情報については、Oracle Fusion Middleware Oracle WebLogic Server APIリファレンスのweblogic.wsee.*パッケージに関する項を参照してください。

表4-3 JwsContextのメソッド

メソッド

戻り値

説明

isFinished()

boolean

現在の会話が終了しているか、またはまだ続いているかを示すブール値を返します。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

finishConversation()

void

現在の会話を終了します。

このメソッドは、@Conversation (Conversation.Phase.FINISH) JWSアノテーションを指定されたメソッドをクライアント・アプリケーションが呼び出すことと同じになります。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

setMaxAge(java.util.Date)

void

会話の新しい最大存続期間を絶対日付のDateに設定します。この日付パラメータが過去の日付である場合、WebLogic Serverは直ちに会話を終了します。

このメソッドは、会話のデフォルトの最大存続期間を指定する、@ConversationalアノテーションのmaxAge属性に相当します。このメソッドを使用して、実行時にこのデフォルト値をオーバーライドします。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

setMaxAge(String)

void

Stringの期間(1 dayなど)を指定して、会話の新しい最大存続期間を設定します。

Stringパラメータの有効な値は、数字と以下のいずれかの語です。

- seconds

- minutes

- hours

- days

- years

たとえば、最大存続期間を10分に設定するには、次の構文を使用します。

ctx.setMaxAge("10 minutes")

このメソッドは、会話のデフォルトの最大存続期間を指定する、@ConversationalアノテーションのmaxAge属性に相当します。このメソッドを使用して、実行時にこのデフォルト値をオーバーライドします。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

getMaxAge()

long

許容される会話の最大存続期間を秒単位で返します。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

getCurrentAge()

long

会話の現在の存続期間を秒単位で返します。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

resetIdleTime()

void

現在の会話の最後のアクティビティ以降の秒数を測定するタイマーをリセットします。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

setMaxIdleTime(long)

void

クライアントの動作がないためにWebLogic Serverが会話を終了するまでに、会話がアイドル状態を維持できる秒数を設定します。

このメソッドは、会話のデフォルトのアイドル時間を指定する、@ConversationalアノテーションのmaxIdleTime属性に相当します。このメソッドを使用して、実行時にこのデフォルト値をオーバーライドします。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

setMaxIdleTime(String)

void

クライアントの動作がないためにWebLogic Serverが会話を終了するまでに、会話がアイドル状態を維持できる秒数をStringとして設定します。

Stringパラメータの有効な値は、数字と以下のいずれかの語です。

- seconds

- minutes

- hours

- days

- years

たとえば、最大アイドル時間を10分に設定するには、次の構文を使用します。

ctx.setMaxIdleTime("10 minutes")

このメソッドは、会話のデフォルトのアイドル時間を指定する、@ConversationalアノテーションのmaxIdleTime属性に相当します。このメソッドを使用して、実行時にこのデフォルト値をオーバーライドします。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

getMaxIdleTime()

long

クライアントの動作がないためにWebLogic Serverが会話を終了するまでに、会話がアイドル状態を維持できる秒数を返します。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

getCurrentIdleTime()

long

最後のクライアント・リクエスト以降の秒数、または、会話の最大アイドル時間のリセット以降の秒数を取得します。

このメソッドは、会話形式のWebサービス、つまり、@Conversationまたは@Conversationalアノテーションが指定されているWebサービスでのみ使用します。

getCallerPrincipal()

java.security.Principal

基本認証が実行されたと想定し、呼び出されたばかりの操作に関連付けられたセキュリティ・プリンシパルを返します。

isCallerInRole(String)

boolean

認証されるプリンシパルが指定されたセキュリティ・ロールに属している場合はtrueを返します。

getService()

weblogic.wsee.jws.ServiceHandle

WebLogic WebサービスAPIのServiceHandleのインスタンスを戻します(このインスタンスに問い合せると、会話ID (Webサービスが会話形式の場合)やWebサービスのURLなど、Webサービスの追加情報を収集できます)。

getLogger(String)

weblogic.wsee.jws.util.Logger

Loggerクラスのインスタンスを取得します(このインスタンスを使用すると、Webサービスからログ・ファイルにメッセージを送信できます)。

getInputHeaders()

org.w3c.dom.Element[]

現在の操作呼出しのSOAPリクエスト・メッセージに関連付けられたSOAPヘッダーの配列を返します。

setUnderstoodInputHeaders(boolean)

void

入力ヘッダーを解釈するかどうかを示します。

getUnderstoodInputHeaders()

boolean

setUnderstoodInputHeaderの呼出しによって設定された最新の値を返します。

setOutputHeaders(Element[])

void

現在の操作を最初に呼び出したクライアント・アプリケーションに返送されるSOAPレスポンス・メッセージに関連付ける、SOAPヘッダーの配列を指定します。

getProtocol()

weblogic.wsee.jws.Protocol

現在の操作を呼び出すのに使用されるプロトコル(HTTP/SやJMSなど)を返します。

Stubインタフェースを使用した実行時情報へのアクセス

javax.xml.rpc.Stubインタフェースを使用すると、Webサービス・クライアント・ファイル内でStubインスタンスを動的に構成できます。詳細は、http://download.oracle.com/javaee/5/api/javax/xml/rpc/Stub.htmlを参照してください。たとえば、次に示すようにport Stubインスタンスに対してターゲット・サービス・エンドポイントを動的に設定できます。

ComplexService service = new ComplexService_Impl (args[0] + "?WSDL" );
ComplexPortType port = service.getComplexServicePort();
((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:8010/MyContext/MyService");

Webサービス・クライアントの開発の詳細は、第6章「Webサービスの呼出し」を参照してください。

次の表に、JWSファイル内でWebサービスの実行時情報にアクセスするために使用できるStubインタフェースのメソッドの説明を示します。

表4-4 Stubインタフェースのメソッド

メソッド

戻り値

説明

_getProperty()

java.lang.Object

特定の構成プロパティの値を取得します。

_getPropertyNames()

java.util.Iterator

Stubインスタンスで構成可能なプロパティの名前のイテレータ・ビューを返します。

_setProperty()

void

Stubインスタンスの構成プロパティの名前および値を設定します。

以下の表では、Stubインスタンスからアクセスできるjavax.xml.rpc.Stubプロパティ値を定義します。

表4-5 Stubインタフェースのプロパティ

プロパティ

タイプ

説明

ENDPOINT_ADDRESS_PROPERTY

java.lang.String

ターゲット・サービス・エンドポイント・アドレス。

PASSWORD_PROPERTY

java.lang.String

認証用パスワード。

SESSION_MAINTAIN_PROPERTY

java.lang.String

サービス・エンドポイントとのセッションに参加するかどうかを示すフラグ。

USERNAME_PROPERTY

java.lang.String

認証用ユーザー名。

ステートレス・セッションEJBを実装すべき場合

jwsc Antタスクでは、JWSファイルを処理するときは常に、Webサービスの基底の実装としてプレーンJavaオブジェクトが選択されます。

しかし、Webサービスの基底の実装をステートレス・セッションEJBにして、EJBが提供するすべての機能(インスタンス・プール、トランザクション、セキュリティ、コンテナ管理による永続性、コンテナ管理による関係、データ・キャッシュなど)を活用することが必要な場合もあります。Webサービスの実装をEJBにする場合は、次の項のプログラミング・ガイドラインに従ってください。

注意:

JAX-RPCはEJB 2.xのみをサポートし、EJB 3.0をサポートしません。

JWSファイルでEJBを実装する場合のプログラミングのガイドライン

一般的なガイドラインは、JWSファイルで常にEJBGenアノテーションを使用して、EJBを実装する場合に必要なEJBリモートおよびホーム・インタフェース・クラスおよびデプロイメント記述子ファイルを、手動で作成するのではなく、自動的に生成することです。EJBGenアノテーションはJWSアノテーションと同じように動作します。JDK 5.0メタデータ構文に従い、プログラミング・タスクを大幅に簡素化します。

EJBGenの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Enterprise JavaBeans (EJB)プログラマーズ・ガイド』の「EJBGenリファレンス」を参照してください。

JWSファイルでステートレス・セッションEJBを明示的に実装する場合は、以下のガイドラインに従います。例については「EJBを実装するJWSファイルの例」を参照してください。該当する部分は太字で示されています。

- 標準的なJava Platform, Enterprise Edition (Java EE)バージョン5のEJBクラスをインポートします。

import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

- EJBGenアノテーションをインポートします。EJBGenアノテーションはすべてweblogic.ejbgenパッケージにあります。少なくとも、@Sessionアノテーションをインポートする必要があります。EJBの形式や動作を指定するためにJWSファイルで追加のEJBGenアノテーションを使用する場合は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Enterprise JavaBeans (EJB)プログラマーズ・ガイド』の「EJBGenリファレンス」を参照し、インポートすべきアノテーションの名前を確認してください。

import weblogic.ejbgen.Session;

- 少なくとも、@Sessionアノテーションをクラス・レベルで使用して、EJBの名前を指定します。

@Session(ejbName="TransactionEJB")

JWSファイルで使用する場合、必須のEJBGenアノテーションは@Sessionのみです。必要な場合は、他のEJBGenアノテーションを使用して、EJBの追加機能を指定します。

- JWSクラスで必ずSessionBeanを実装します。

public class TransactionImpl implements SessionBean {...

- 標準のEJBメソッドejbCreate()、ejbActivate()なども含める必要があります。ただし、通常は、EJBのデフォルトの動作を変更するのでない限り、これらのメソッドにコードを追加する必要はありません。

public void ejbCreate() {}
public void ejbActivate() {}
public void ejbRemove() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}

JWSファイルでこれらのガイドラインにすべて従うと、jwsc AntタスクはWebサービスをEJBにコンパイルして、それをエンタープライズ・アプリケーション内部のEJB JARファイルにパッケージ化します。

EJBを実装するJWSファイルの例

以下の例では、ステートレス・セッションEJBを実装する簡単なJWSファイルを示します。関連するコードは太字で示されています。

package examples.webservices.transactional;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Transactional;
import weblogic.ejbgen.Session;
@Session(ejbName="TransactionEJB")
@WebService(name="TransactionPortType", serviceName="TransactionService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="transactions", serviceUri="TransactionService",
portName="TransactionPort")
/**
* This JWS file forms the basis of simple EJB-implemented WebLogic
* Web Service with a single operation: sayHello.  The operation executes
* as part of a transaction.
*
*/
public class TransactionImpl implements SessionBean {
@WebMethod()
@Transactional(value=true)
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
// Standard EJB methods.  Typically there's no need to override the methods.
public void ejbCreate() {}
public void ejbActivate() {}
public void ejbRemove() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}

ユーザー定義のJavaデータ型のプログラミング

Webサービス操作として公開されるJWSファイルのメソッドでは、パラメータや戻り値として必ずしも組込みのデータ型(Stringやintegerなど)を取る必要はなく、独自に作成するJavaデータ型を使用できます。ユーザー定義のデータ型の例としては、Stringの銘柄記号とintegerの売買株式数という2つのフィールドを持つTradeResultがあげられます。

JWSファイルで、1つまたは複数のメソッドのパラメータまたは戻り値としてユーザー定義のデータ型を使用する場合は、データ型のJavaコードを独自に作成して、JWSファイルにそのクラスをインポートし、適切に使用する必要があります。jwsc Antタスクは、Javaユーザー定義データ型の対応するXMLスキーマ表現、JAX-RPCの型マッピング・ファイルなど、必要なデータ・バインディング・アーティファクトをすべて作成します。

ユーザー定義のデータ型のJavaコードを記述するときは、以下の基本的な要件に従います。

- デフォルト・コンストラクタを定義します。これは、パラメータを取らないコンストラクタです。

- 公開するメンバー変数ごとにgetXXX()メソッドとsetXXX()メソッドの両方を定義します。

- 公開される各メンバー変数のデータ型は、組込みデータ型のいずれか、または組込みデータ型で構成されるユーザー定義のデータ型にします。

これらの要件はJAX-RPCで指定されています。要件の詳細と完全なリストについては、JAX-RPC仕様(http://java.net/projects/jax-rpc/)を参照してください。

jwsc Antタスクでは、最も一般的なXMLおよびJavaデータ型のデータ・バインディング・アーティファクトを生成できます。サポートされるユーザー定義のデータ型のリストについては、「サポートされるユーザー定義のデータ型」を、サポートされる組込みデータ型の完全なリストは、「サポートされる組込みデータ型」を参照してください。

以下の例では、BasicStructという簡単なJavaユーザー定義データ型を示します。

package examples.webservices.complex;
/**
* Defines a simple JavaBean called BasicStruct that has integer, String,
* and String[] properties
*/
public class BasicStruct {
// Properties
private int intValue;
private String stringValue;
private String[] stringArray;
// Getter and setter methods
public int getIntValue() {
return intValue;
}
public void setIntValue(int intValue) {
this.intValue = intValue;
}
public String getStringValue() {
return stringValue;
}
public void setStringValue(String stringValue) {
this.stringValue = stringValue;
}
public String[] getStringArray() {
return stringArray;
}
public void setStringArray(String[] stringArray) {
this.stringArray = stringArray;
}
}

以下のJWSファイルの抜粋では、BasicStructクラスをインポートして、1つのメソッドのパラメータおよび戻り値として使用する方法を示しています。完全なJWSファイルについては、「サンプルComplexImpl.java JWSファイル」を参照してください。

package examples.webservices.complex;
// Import the standard JWS annotation interfaces
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// Import the WebLogic-specific JWS annotation interface
import weblogic.jws.WLHttpTransport;
// Import the BasicStruct JavaBean
import examples.webservices.complex.BasicStruct;
@WebService(serviceName="ComplexService", name="ComplexPortType",
targetNamespace="http://example.org")
...
public class ComplexImpl {
@WebMethod(operationName="echoComplexType")
public BasicStruct echoStruct(BasicStruct struct)
{
return struct;
}
}

例外のスロー

JWSファイルのメソッド内にエラー処理のJavaコードを記述する場合は、独自のユーザー定義の例外をスローすることも、javax.xml.rpc.soap.SOAPFaultException例外をスローすることもできます。SOAPFaultExceptionをスローする場合、WebLogic Serverは例外をSOAPエラーにマップして、操作を呼び出すクライアント・アプリケーションに送信します。

JWSファイルがSOAPFaultException以外のJava例外をスローした場合、WebLogic Serverはその例外をできる限りSOAPエラーにマップしようとします。ただし、クライアント・アプリケーションが受け取る例外を制御して、最適な例外情報を送るには、SOAPFaultExceptionまたはSOAPFaultExceptionを拡張した例外を明示的にスローする必要があります。ユーザー定義の例外の作成とスローの詳細は、JAX-RPC仕様(http://java.net/projects/jax-rpc/)を参照してください。

次の抜粋では、SOAPFaultExceptionクラスを記述しています。

public class SOAPFaultException extends java.lang.RuntimeException {
public SOAPFaultException (QName faultcode,
String faultstring,
String faultactor,
javax.xml.soap.Detail detail ) {...}
public Qname getFaultCode() {...}
public String getFaultString() {...}
public String getFaultActor() {...}
public javax.xml.soap.Detail getDetail() {...}
}

SOAP with Attachments API for Java 1.1 (SAAJ)のjavax.xml.soap.SOAPFactory.createDetail()メソッドを使用して、Detailオブジェクトを作成します。このオブジェクトは、エラーに関するアプリケーション固有の詳細情報を提供するDetailEntryオブジェクトのコンテナになります。

SOAPFactoryの独自の実装を使用することも、Oracleの実装を使用することもできます。Oracleの実装には、JWSファイルから静的メソッドweblogic.wsee.util.WLSOAPFactory.createSOAPFactory()を呼び出してアクセスできます。このメソッドはjavax.xml.soap.SOAPFactoryオブジェクトを返します。実行時には、-Djavax.xml.soap.SOAPFactoryフラグを使用して、OracleのSOAPFactory実装を指定します。次に例を示します。

-Djavax.xml.soap.SOAPFactory=weblogic.xml.saaj.SOAPFactoryImpl

次のJWSファイルは、Webサービスの操作を実装するメソッド内からSOAPFaultExceptionを作成してスローする例を示しています。太字の部分は例外コードを表しています。

package examples.webservices.soap_exceptions;
import javax.xml.namespace.QName;
import javax.xml.soap.Detail;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.rpc.soap.SOAPFaultException;
// Import the @WebService annotation
import javax.jws.WebService;
// Import WLHttpTransport
import weblogic.jws.WLHttpTransport;
@WebService(serviceName="SoapExceptionsService",
name="SoapExceptionsPortType",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="exceptions",
serviceUri="SoapExceptionsService",
portName="SoapExceptionsServicePort")
/**
* This JWS file forms the basis of simple Java-class implemented WebLogic
* Web Service with a single operation: sayHelloWorld
*
*/
public class SoapExceptionsImpl {
public SoapExceptionsImpl() {
}
public void tirarSOAPException() {
Detail detail = null;
try {
SOAPFactory soapFactory = SOAPFactory.newInstance();
detail = soapFactory.createDetail();
} catch (SOAPException e) {
// do something
}
QName faultCode = null;
String faultString = "the fault string";
String faultActor = "the fault actor";
throw new SOAPFaultException(faultCode, faultString, faultActor, detail);
}
}

この例では、SOAPFactoryのデフォルトの実装を使用しています。

注意:

SOAPFaultExceptionを使用せずに独自の例外を作成およびスローする場合に、例外クラスの複数のプロパティのデータ型が同じであるときは、これらのプロパティのセッター・メソッドも作成する必要があります(JAX-RPC仕様で規定されているわけではありません)。これは、WebLogic WebサービスがSOAPメッセージで例外を受け取り、XMLをJava例外クラスに変換するときに、対応するセッター・メソッドがなければ、どのXML要素をどのクラス・プロパティにマップするのかを知る方法がないからです。

JWSファイルからの別のWebサービスの呼出し

JWSファイル内から別のWebサービス(WebLogic ServerにデプロイされているWebサービス、または.NETなどの他のアプリケーション・サーバーにデプロイされているWebサービス)を呼び出すことができます。これを行う手順は、「Java SEクライアントからのWebサービスの呼出し」で説明した手順と似ていますが、clientgen Antタスクを実行してクライアント・スタブを生成するのではなく、呼出し側のWebサービスをビルドするjwsc Antタスクに<clientgen>子要素を含めてクライアント・スタブを生成します。続いて、JWSファイルにある標準JAX-RPC APIを使用します。

詳細な手順については、「別のWebサービスからのWebサービスの呼出し」を参照してください。

JWSアノテーションおよびAPIによるその他の機能のプログラミング

次の各項では、JWSファイル内で特定のJWSアノテーションを指定するか、WebLogic WebサービスAPIを使用してプログラミングできるその他の機能について説明します。

- MTOM/XOPを使用したバイナリ・データの送信

- SOAP添付ファイルのストリーミング

- SOAP 1.2の使用

- トランザクション内で実行する操作の指定

- HttpServletRequest/Responseオブジェクトの取得

MTOM/XOPを使用したバイナリ・データの送信

SOAP Message Transmission Optimization Mechanism/XML-binary Optimized Packaging (MTOM/XOP)では、SOAPメッセージ内のxs:base64Binary型のXMLデータの送信を最適化する方法が説明されています。トランスポート・プロトコルがHTTPの場合、MIME添付ファイルを使用して、送信側と受信側の両方に対して同時にSOAPメッセージ内のXMLデータへの直接アクセスを許可する間にデータを伝達します。このとき、xs:base64BinaryデータのマーシャリングにMIMEアーティファクトが使用されていたことを意識する必要はありません。バイナリ・データの最適化プロセスでは、バイナリ・データのエンコード、SOAPエンベロープからの削除、圧縮およびMIMEパッケージへの添付、SOAPエンベロープでのそのパッケージへのリファレンスの追加を行います。

MTOM仕様では、MTOMが有効化されている場合に、base64binaryデータ送信時にWebサービスのランタイムでXOPバイナリ最適化を使用することは必須ではありません。むしろ、この仕様では、ランタイムがこれを選択して行うようになっています。これは場合によっては、直接SOAPメッセージ内にbase64binaryデータを送信するほうが、より効率的であるとランタイムで判断されることがあるためです。一例としては、トランスポートされるデータ量が少なく、単にデータをそのままインライン処理するよりも多くのリソースが、会話およびトランスポートのオーバーヘッドにより消費されてしまう場合が挙げられます。しかしながら、JAX-RPCサービスのMTOM用WebLogic Webサービスの実装では、MTOMが有効化されている場合には、常にMTOM/XOPが使用されます。

WebLogic JAX-RPC WebサービスでのMTOM/XOPのサポートは、あらかじめパッケージ化されたWS-PolicyファイルMtom.xmlを使用して実装されます。WS-Policyファイルは、http://www.w3.org/TR/ws-policyで説明されているWS-Policy仕様に準拠しています。この仕様では、WEBサービスのポリシー(この場合は、バイナリ・データ送信のためのMTOM/XOPの使用)を記述および通信する汎用モデルおよびXML構文を提供しています。WebサービスWSDLのtypesセクションへの、あらかじめパッケージ化されたMtom.xml WS-Policyファイルのインストールは、次のようになります(参考のためにのみ掲載しています。このファイルは変更できません)。

<wsp:Policy wsu:Id="myService_policy">
<wsp:ExactlyOne>
<wsp:All>
<wsoma:OptimizedMimeSerialization
xmlns:wsoma="http://schemas.xmlsoap.org/ws/2004/09/policy/optimizedmimeserialization" />
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>

コンパイルされたJWSファイルをWebLogic Serverにデプロイする際には、MTOM WS-Policyファイルを参照する次のスニペットが動的WSDL内に自動的に含まれます。このスニペットは、WebサービスがMTOM/XOPを使用することを示しています。

<wsdl:binding name="BasicHttpBinding_IMtomTest"
type="i0:IMtomTest">
<wsp:PolicyReference URI="#myService_policy" />
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" />

JWSファイルで@Policyメタデータ・アノテーションを指定することによって、開発時にWebサービスとMtom.xml WS-Policyファイルを関連付けることができます。動的WSDLに、必須であるMtom.xmlファイルへの参照が確実に含まれるよう、必ずattachToWsdl=true属性も指定します。下記の例を参照してください。

デプロイメント時にWebサービスとMtom.xml WS-Policyファイルを関連付けるには、デプロイメント直前にtypesセクションにポリシーを追加し、WSDLを修正します。

また、管理コンソールを使用して実行時にファイルを追加できます。詳細は、Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプ』のWS-PolicyファイルとWebサービスとの関連付けに関する項を参照してください。この節では、JWSアノテーションの使用方法について説明します。

注意:

このリリースのWebLogic Serverでは、MTOM/XOP使用時にサポートされるJavaデータ型はbyte[]のみです。その他のバイナリ・データ型(imageなど)はサポートされていません。

このリリースのWebLogic Serverでは、非推奨になった9.xセキュリティ・ポリシーのあるMTOMの使用はサポートされていません。

MTOM/XOPを使用してバイナリ・データを送信するには、次の手順に従います。

1. 次の簡単なJWSファイルに示すように、JWSファイル内でWebLogic固有の@weblogic.jws.Policyアノテーションを使用し、あらかじめパッケージ化されたMtom.xmlファイルをWebサービスに適用することを指定します(該当するコードは太字で示してあります)。

package examples.webservices.mtom;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Policy;
@WebService(name="MtomPortType",
serviceName="MtomService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="mtom",
serviceUri="MtomService",
portName="MtomServicePort")
@Policy(uri="policy:Mtom.xml", attachToWsdl=true)
public class MtomImpl {
@WebMethod
public String echoBinaryAsString(byte[] bytes) {
return new String(bytes);
}

2. 結果として得られるSOAPメッセージでMTOM/XOPを使用してバイナリ・データの送受信を行う場合は必ず、Webサービス操作でJava byte[]データ型を戻り値または入力パラメータとして使用します。一例としては、上述のechoBinaryAsString操作の実装を参照してください。この操作では、単純にbyteの配列を入力として取り、それをStringとして返しています。

3. WebLogic WebサービスのランタイムにはMTOM/XOPのサポートが組み込まれており、clientgen Antタスクによりクライアント側アーティファクトが生成されるWSDLでMTOM/XOPのサポートが指定されている場合に有効になります。クライアント・アプリケーション自体では、関連データ型としてbyte[]を使用して、通常どおり操作を呼び出します。

MTOM/XOP機能そのものとWebLogic JAX-RPC Webサービスでサポートされる仕様のバージョンの詳細は、SOAP Message Transmission Optimization Mechanism仕様(http://www.w3.org/TR/2005/REC-soap12-mtom-20050125)を参照してください。

SOAP添付ファイルのストリーミング

@weblogic.jws.StreamAttachments JWSアノテーションを使用すると、添付ファイルを含む着信SOAPメッセージを読み取る際に、メッセージ全体をメモリーに読み込むデフォルト動作のかわりに、WebサービスでストリーミングAPIを使用することを指定できます。この機能を使用すると、SOAPメッセージが非常に大きい場合のWebサービスのパフォーマンスを向上させることができます。

添付ファイルをストリーミングすることを指定した例については、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「weblogic.jws.StreamAttachments」を参照してください。

SOAP 1.2の使用

WebLogic Webサービスでは、Webサービスとそのクライアントの間でデータや呼出しを転送する際のメッセージ・フォーマットとして、バージョン1.1のSimple Object Access Protocol (SOAP)がデフォルトで使用されます。WebLogic Webサービスでは、SOAP 1.1と新しいSOAP 1.2の両バージョンがサポートされており、どちらのバージョンも自由に使用できます。

Webサービスでバージョン1.2のSOAPを使用することを指定するには、次の例に示すように、JWSファイルでクラス・レベルの@weblogic.jws.Bindingアノテーションを使用して、その唯一の属性の値をBinding.Type.SOAP12に設定します(該当するコードは太字で示してあります)。

package examples.webservices.soap12;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Binding;
@WebService(name="SOAP12PortType",
serviceName="SOAP12Service",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="soap12",
serviceUri="SOAP12Service",
portName="SOAP12ServicePort")
@Binding(Binding.Type.SOAP12)
/**
* This JWS file forms the basis of simple Java-class implemented WebLogic
* Web Service with a single operation: sayHello.  The class uses SOAP 1.2
* as its binding.
*
*/
public class SOAP12Impl {
@WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
}

WebサービスでSOAP 1.2を使用する上で、このアノテーションを設定する以外に必要な作業はありません(Webサービスを呼び出すクライアント・アプリケーションの変更も不要です)。WebLogic Webサービス・ランタイムによってすべて自動的に処理されます。

このアノテーションの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「weblogic.jws.Binding」を参照してください。

トランザクション内で実行する操作の指定

クライアント・アプリケーションからWebLogic Webサービス操作を呼び出す場合、操作呼出しはデフォルトではトランザクションのコンテキストの外で実行されます。トランザクション内で操作を実行するには、次の例に示すように、JWSファイルで@weblogic.jws.Transactionalアノテーションを指定して、ブール型のvalue属性の値をtrueに設定します(該当するコードは太字で示してあります)。

package examples.webservices.transactional;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Transactional;
@WebService(name="TransactionPojoPortType",
serviceName="TransactionPojoService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="transactionsPojo",
serviceUri="TransactionPojoService",
portName="TransactionPojoPort")
/**
* This JWS file forms the basis of simple WebLogic
* Web Service with a single operation: sayHello.  The operation executes
* as part of a transaction.
*
*/
public class TransactionPojoImpl {
@WebMethod()
@Transactional(value=true)
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
}

Webサービスのすべての操作をトランザクション内で実行する場合は、@Transactionalアノテーションをクラス・レベルで指定します。一部の操作のみをトランザクション内で実行する場合は、このアノテーションをメソッド・レベルで指定します。競合が発生した場合は、メソッド・レベルの値でクラス・レベルの値がオーバーライドされます。

追加属性の詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「weblogic.jws.Transactional」を参照してください。

HttpServletRequest/Responseオブジェクトの取得

Webサービスでトランスポート・プロトコルとしてHTTPを使用する場合は、次の例に示すように、Oracle Fusion Middleware Oracle WebLogic Server APIリファレンスのweblogic.wsee.connection.transport.servlet.HttpTransportUtils APIを使用して、JAX-RPC ServletEndpointContextオブジェクトからjavax.servlet.http.HttpServletRequestおよびjavax.servlet.http.HttpServletResponseオブジェクトを取得できます(該当するコードを太字で示し、例の後で解説を加えます)。

package examples.webservices.http_transport_utils;
import javax.xml.rpc.server.ServiceLifecycle;
import javax.xml.rpc.server.ServletEndpointContext;
import javax.xml.rpc.ServiceException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.wsee.connection.transport.servlet.HttpTransportUtils;
@WebService(name="HttpTransportUtilsPortType",
serviceName="HttpTransportUtilsService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="servlet", serviceUri="HttpTransportUtils",
portName="HttpTransportUtilsPort")
public class HttpTransportUtilsImpl implements ServiceLifecycle {
private ServletEndpointContext wsctx = null;
public void init(Object context) throws ServiceException {
System.out.println("ServletEndpointContext inited...");
wsctx = (ServletEndpointContext)context;
}
public void destroy() {
System.out.println("ServletEndpointContext destroyed...");
wsctx = null;
}
@WebMethod()
public String getServletRequestAndResponse() {
HttpServletRequest request =
HttpTransportUtils.getHttpServletRequest(wsctx.getMessageContext());
HttpServletResponse response =
HttpTransportUtils.getHttpServletResponse(wsctx.getMessageContext());
System.out.println("HttpTransportUtils API used successfully.");
return "HttpTransportUtils API used successfully";
}
}

上の例の中で重要な部分は以下のとおりです。

- 必要なJAX-RPCおよびServletクラスのインポート。

import javax.xml.rpc.server.ServiceLifecycle;
import javax.xml.rpc.server.ServletEndpointContext;
import javax.xml.rpc.ServiceException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

- WebLogic HttpTransportUtilsクラスのインポート。

import weblogic.wsee.connection.transport.servlet.HttpTransportUtils;

- JAX-RPCメッセージ・コンテキストを問い合せることになるため、JWSファイルではServiceLifecycleを明示的に実装する必要があります。

public class HttpTransportUtilsImpl implements ServiceLifecycle

- データ型ServletEndpointContextの変数の作成。

private ServletEndpointContext wsctx = null;

- JWSファイルでServiceLifecycleを実装するため、initおよびdestroyライフサイクル・メソッドも実装する必要があります。

public void init(Object context) throws ServiceException {
System.out.println("ServletEndpointContext inited...");
wsctx = (ServletEndpointContext)context;
}
public void destroy() {
System.out.println("ServletEndpointContext destroyed...");
wsctx = null;
}

- 最後に、Webサービス操作を実装するメソッドで、ServletEndpointContextオブジェクトを使用してHttpServletRequestおよびHttpServletResponseオブジェクトを取得します。

HttpServletRequest request =
HttpTransportUtils.getHttpServletRequest(wsctx.getMessageContext());
HttpServletResponse response =
HttpTransportUtils.getHttpServletResponse(wsctx.getMessageContext());

JWSプログラミングのベスト・プラクティス

以下のリストでは、JWSファイルをプログラミングする場合のベスト・プラクティスを示します。

- document-literal-bareのWebサービスを作成する場合は、@WebParam JWSアノテーションを使用して、特定のWebサービスのすべての操作のすべての入力パラメータに一意の名前を付けるようにします。document-literal-bareのWebサービスの性質上、@WebParamアノテーションを使用して入力パラメータの名前を明示的に指定しない場合、WebLogic Serverが入力パラメータの名前を作成するため、Webサービス内でパラメータの名前が重複するおそれがあります。

- 一般に、最も相互運用性の高いタイプのWebサービスは、document-literal-wrappedのWebサービスです。

- ハード・コード化された名前returnに常に依存するのではなく、@WebResult JWSアノテーションを使用して、操作の戻り値の名前を明示的に設定します。JWSファイルで@WebResultアノテーションを使用しない場合、returnが戻り値のデフォルト名になります。

- Webサービスの呼出し中にエラーが発生した場合に、クライアント・アプリケーションに戻される例外情報を制御するには、JWSファイルでSOAPFaultExceptionを使用します。

- 必須ではありませんが、JWSファイルでWebLogic固有の@WLHttpTransportアノテーションのportName属性を常に指定することをお薦めします。この属性を指定しない場合、jwsc AntタスクはWSDLファイルの生成時にポート名を生成しますが、この名前はユーザーにとってわかりにくい場合があります。その結果、Webサービスを呼び出すためにクライアント・アプリケーションで使用するgetXXX()メソッドの名前が適切に指定されなくなります。クライアント・アプリケーションがWebサービスを呼び出すときにわかりやすいメソッドを使用できるようにするには、portName属性を使用して、Webサービスの該当するポート名を指定します。

5 データ・バインディングの理解

この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Webサービスでサポートされるデータ・バインディングおよびデータ型(組込みおよびユーザー定義)について説明します。

この章では、以下のトピックについて説明します。

- データ・バインディングの概要

- サポートされる組込みデータ型

- サポートされるユーザー定義のデータ型

データ・バインディングの概要

様々なシステム間でのデータ交換にはXMLが標準的に使用されているため、Webサービス・アプリケーションには、Javaアプリケーションから直接XML形式のドキュメントへアクセスする手段が必要となります。具体的には、XMLコンテンツをJavaアプリケーションで読み取ることのできる形式に変換する必要があります。このXML表現とJava表現の間のデータ変換を記述したものがデータ・バインディングです。

以前のリリースと同様、WebLogic Webサービスでは、JAX-RPC仕様(http://java.net/projects/jax-rpc/)の規定に従って組込みのXMLスキーマ、Java、およびSOAPのデータ型がサポートされており、追加のプログラミング手順を踏まずに、そうしたデータ型をWebサービスの操作で使用できます。組込みデータ型には、integer、string、timeなどがあります。

また、Webサービスの入力パラメータや戻り値として、様々なユーザー定義のXMLおよびJavaデータ型(org.apache.xmlbeansパッケージのApache XmlBeansを含む)を使用できます。ユーザー定義のデータ型には、XMLスキーマやJavaの構成要素から作成する<xsd:complexType>やJavaBeanなどがあります。jwscやclientgenなどのWebLogic WebサービスAntタスクでは、ユーザー定義のデータ型をXML表現とJava表現の間で変換するのに必要なデータ・バインディング・アーティファクトが自動的に生成されます。XML表現はSOAPリクエスト・メッセージおよびレスポンス・メッセージで使用し、Java表現はWebサービスを実装するJWSで使用します。

注意:

WebLogic Server 9.1以降では、XMLBeans 1.xデータ型(つまりcom.bea.xml.XmlObjectの拡張)をWebLogic Webサービスのパラメータまたは戻り値の型として使用することは非推奨です。新たに作成するアプリケーションでは、XMLBeans 2.xのデータ型を使用する必要があります。

-noupaオプションを指定してコンパイルしたXMLBeansをWebサービスで使用する場合は、Webサービスが正常にデプロイされるよう、WebLogic Serverの起動スクリプトに-Dweblogic.wsee.bind.setCompileNoUpaRule=trueフラグを設定する必要があります。そうしないと、cos-nonambig: Content model violates the unique particle attribution ruleというエラーが発生してデプロイメントは失敗します。

サポートされる組込みデータ型

次の各項では、WebLogic Webサービスがサポートする組込みデータ型、およびそのXML表現とJava表現の間のマッピングについて説明します。Webサービスを実装するバックエンド・コンポーネントのパラメータと戻り値のデータ型が組込みデータ型のセットの中にあるかぎり、データはWebLogic Serverによって、XMLとJavaの間で自動的に変換されます。

一方、ユーザー定義のデータ型を使用する場合は、XML表現とJava表現の間でデータを変換するデータ・バインディング・アーティファクトを作成する必要があります。WebLogic Serverにはjwscおよびwsdlc Antタスクが含まれており、ほとんどのユーザー定義データ型のデータ・バインディング・アーティファクトを自動的に生成できます。サポートされるXMLデータ型とJavaデータ型については、「サポートされるユーザー定義のデータ型」を参照してください。

組込みデータ型のXML-to-Javaマッピング

次の表に、サポートされるXMLスキーマ・データ型(ターゲット・ネームスペースhttp://www.w3.org/2001/XMLSchema)と、それぞれに対応するJavaデータ型をまとめます。

サポートされるユーザー定義のXMLデータ型については、「組込みデータ型のJava-to-XMLマッピング」を参照してください。

表5-1 XMLスキーマの組込みデータ型とJavaデータ型のマッピング

XMLスキーマ・データ型

Javaデータ型(小文字はプリミティブ・データ型を示します)

boolean

boolean

byte

byte

short

short

int

int

long

long

float

float

double

double

integer

java.math.BigInteger

decimal

java.math.BigDecimal

string

java.lang.String

dateTime

java.util.Calendar

base64Binary

byte[]

hexBinary

byte[]

duration

java.lang.String

time

java.util.Calendar

date

java.util.Calendar

gYearMonth

java.util.Calendar

gYear

java.util.Calendar

gMonthDay

java.util.Calendar

gDay

java.util.Calendar

gMonth

java.util.Calendar

anyURI

java.net.URI

NOTATION

java.lang.String

token

java.lang.String

normalizedString

java.lang.String

language

java.lang.String

Name

java.lang.String

NMTOKEN

java.lang.String

NCName

java.lang.String

NMTOKENS

java.lang.String[]

ID

java.lang.String

IDREF

java.lang.String

ENTITY

java.lang.String

IDREFS

java.lang.String[]

ENTITIES

java.lang.String[]

nonPositiveInteger

java.math.BigInteger

nonNegativeInteger

java.math.BigInteger

negativeInteger

java.math.BigInteger

unsignedLong

java.math.BigInteger

positiveInteger

java.math.BigInteger

unsignedInt

long

unsignedShort

int

unsignedByte

short

Qname

javax.xml.namespace.QName

組込みデータ型のJava-to-XMLマッピング

サポートされるユーザー定義のJavaデータ型については、「サポートされるユーザー定義のJavaデータ型」を参照してください。

表5-2 Javaデータ型とXMLスキーマ・データ型のマッピング

Javaデータ型(小文字はプリミティブ・データ型を示します)

同等のXMLスキーマ・データ型

int

int

short

short

long

long

float

float

double

double

byte

byte

boolean

boolean

char

string (with facet of length=1)

java.lang.Integer

int

java.lang.Short

short

java.lang.Long

long

java.lang.Float

float

java.lang.Double

double

java.lang.Byte

byte

java.lang.Boolean

boolean

java.lang.Character

string (with facet of length=1)

java.lang.String

string

java.math.BigInteger

integer

java.math.BigDecimal

decimal

java.util.Calendar

dateTime

java.util.Date

dateTime

byte[]

base64Binary

javax.xml.namespace.QName

Qname

java.net.URI

anyURI

javax.xml.datatype.XMLGregorianCalendar

anySimpleType

javax.xml.datatype.Duration

duration

java.lang.Object

anyType

java.awt.Image

base64Binary

javax.activation.DataHandler

base64Binary

javax.xml.transform.Source

base64Binary

java.util.UUID

string

サポートされるユーザー定義のデータ型

以降の項の表には、jwscおよびwsdlc Antタスクでデータ・バインディング・アーティファクトを自動的に生成できるユーザー定義のXMLデータ型およびJavaデータ型(対応するJava表現またはXML表現、JAX-RPCの型マッピング・ファイルなど)をまとめます。

これらの表にないXMLデータ型またはJavaデータ型で、「サポートされる組込みデータ型」の表に示した組込みデータ型でもない型の場合は、ユーザー定義データ型のアーティファクトを手動で作成する必要があります。

サポートされるユーザー定義のXMLデータ型

次の表に、jwscおよびwsdlc AntタスクでサポートされるXMLスキーマ・データ型と、それぞれに対応するJavaデータ型またはマッピング・メカニズムをまとめます。

データ型の詳細と例については、JAX-RPC仕様(http://java.net/projects/jax-rpc/)を参照してください。

表5-3 サポートされているユーザー定義のXMLスキーマ・データ型

XMLスキーマ・データ型

同等のJavaデータ型またはマッピング・メカニズム

単純型および複合型の両方の要素を持つ<xsd:complexType>

JavaBean

単純なコンテンツを含む<xsd:complexType>

JavaBean

<xsd:complexType>の<xsd:attribute>

JavaBeanのプロパティ。

既存の単純型の制限による新しい単純型の派生

同等の単純型のJavaデータ型。

制限要素で使用されるファセット

シリアライゼーションおよびデシリアライゼーションで強制されないファセット。

<xsd:list>

リスト・データ型の配列。

wsdl:arrayType属性を使用した制限によってsoapenc:Arrayから派生する配列

arrayTypeデータ型と同等のJavaデータ型の配列。

制限によってsoapenc:Arrayから派生する配列

同等のJavaデータ型の配列。

単純型からの複合型の派生

_valueというプロパティのあるJavaBean。_valueの型は、この項の規則に従って単純型からマップされます。

<xsd:anyType>

java.lang.Object

<xsd:any>

javax.xml.soap.SOAPElementまたはorg.apache.xmlbeans.XmlObject。

<xsd:any[]>

javax.xml.soap.SOAPElement[]またはorg.apache.xmlbeans.XmlObject[]。

<xsd:union>

ユニオン・メンバーの共通の親タイプ。

<xsi:nil>および<xsd:nillable>属性

Javaのnull値。

XMLデータ型が組込みデータ型で通常はJavaプリミティブ・データ型(intやshortなど)にマップされる場合、そのXMLデータ型は実際には同等のオブジェクト・ラッパー型(java.lang.Integerやjava.lang.Shortなど)にマップされます。

複合型の派生

Javaの継承を使用してマップされます。

抽象型

抽象Javaデータ型。

サポートされるユーザー定義のJavaデータ型

次の表に、jwscおよびwsdlc Antタスクでサポートされるユーザー定義のJavaデータ型と、それぞれに対応するXMLスキーマ・データ型をまとめます。

表5-4 サポートされているユーザー定義のJavaデータ型

Javaデータ型

同等のXMLスキーマ・データ型

サポートされている任意のデータ型をプロパティとするJavaBean

JavaBeanプロパティに対応する要素の<xsd:sequence>をコンテンツ・モデルとする<xsd:complexType>。

サポートされるすべてのデータ型の配列および多次元配列(JavaBeanプロパティとして使用する場合)

maxOccurs属性がunboundedに設定されている<xsd:complexType>内の要素。

java.lang.Object

注意: 実行時オブジェクトのデータ型は既知の型である必要があります。

<xsd:anyType>

(org.apache.xmlbeans.XmlObjectからのみ継承されます) Apache XMLBeans

注意: Apache XMLBeansデータ型を戻り値の型またはパラメータとして使用するWebサービスは、document-literal-wrappedまたはdocument-literal-bareとして定義する必要があります。

Apache XMLBeans (http://xmlbeans.apache.org/index.html)を参照してください。

java.util.Collection

リテラル配列。

java.util.List

リテラル配列。

java.util.ArrayList

リテラル配列。

java.util.LinkedList

リテラル配列。

java.util.Vector

リテラル配列。

java.util.Stack

リテラル配列。

java.util.Set

リテラル配列。

java.util.TreeSet

リテラル配列。

java.utils.SortedSet

リテラル配列。

java.utils.HashSet

リテラル配列。

注意:

ユーザー定義のJavaデータ型であるJAX-RPCスタイルの列挙値クラスは、バージョン8.1ではWebLogic Webサービスのパラメータまたは戻り値として使用されていましたが、現在はサポートされていません。

また、パラメータまたは戻り値としてのジェネリックスの使用はサポートされていません。たとえば、以下のJavaメソッドはパブリックな操作として公開できません。

public ArrayList<String> echoGeneric(ArrayList<String> in) {
return in;
}

6 Webサービスの呼出し

この章では、Java API for XML-based RPC (JAX-RPC)を使用してWebLogic Webサービスを呼び出す方法について説明します。

この章では、以下のトピックについて説明します。

- Webサービスの呼出しの概要

- Java SEクライアントからのWebサービスの呼出し

- 別のWebサービスからのWebサービスの呼出し

- Webサービス呼出し時のスタンドアロン・クライアントJARファイルの使用

- Webサービス呼出し時のプロキシ・サーバーの使用

- Webサービスを再デプロイする際にクライアント側で考慮すべき事項

- WebLogic Webサービスのスタブ・プロパティ

- レスポンスSOAPメッセージの文字エンコーディングの設定

注意:

以降の項では、メッセージ保護されたWebサービスの呼出しについては説明していません。そのトピックについては、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のクライアント・アプリケーションの更新によるメッセージ保護されたWebサービスの呼出しに関する項を参照してください。

Webサービスの呼出しの概要

Webサービスの呼出しは、クライアント・アプリケーションがWebサービスを使用するために実行するアクションです。Webサービスを呼び出すクライアント・アプリケーションは、Java、Microsoft .NETなどの任意のテクノロジを使用して記述できます。

クライアント・アプリケーションには以下の2種類があります。

- Java SEクライアント: 最も単純な形態では、Java SEクライアントは、javaコマンドで呼び出されるMainパブリック・クラスを持つJavaプログラムです。

- WebLogic ServerにデプロイされたJava EEコンポーネント: このタイプのクライアント・アプリケーションでは、EJB、サーブレット、または別のWebサービスなど、WebLogic ServerにデプロイされているJava Platform, Enterprise Edition (Java EE)バージョン5コンポーネント内でWebサービスが実行されます。したがって、このタイプのクライアント・アプリケーションはWebLogic Serverコンテナの内部で実行されます。

WebLogic Serverで実行されている(WebLogic Serverクラスパスにアクセスする)任意のJava SEまたはJava EEアプリケーションからWebサービスを呼び出すことができます。WebLogic Serverのライブラリにアクセスできない環境で実行されているスタンドアロンJavaアプリケーションのサポートについての詳細は、「Webサービス呼出し時のスタンドアロン・クライアントJARファイルの使用」を参照してください。

以降の項では、JAX-RPC仕様のOracleの実装を使用してJavaクライアント・アプリケーションからWebサービスを呼び出す方法について説明します。この実装を使用することで、WebLogicか非WebLogicかにかかわらず、任意のアプリケーション・サーバーで実行されているWebサービスを呼び出すことができます。さらに、WebLogic Serverの一部として実行されるクライアントまたはWebLogic Serverライブラリにアクセスできない環境で実行されるスタンドアロン・クライアントも作成できます。

この項で説明したコマンド・ライン・ツールの他に、Oracle JDeveloperなどのIDEもプロキシ生成とテストに使用できます。詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービスの紹介』のOracle IDEを使用したWebサービスのビルドに関する項を参照してください。

注意:

ユーザー定義のデータ型をパラメータまたは戻り値として実装するWebサービス操作を、動的クライアントを使用して呼び出すことはできません。動的クライアントでは、JAX-RPCのCallインタフェースを使用するためです。標準の(静的)クライアントでは、JAX-RPCのServiceインタフェースおよびStubインタフェースを使用するため、ユーザー定義のデータ型を実装するWebサービスを正常に呼び出すことができます。

JAX-RPCを使用したWebサービスの呼出し

Java API for XML based RPC (JAX-RPC)は、Webサービスの呼出しに使用するAPIを定義する仕様です。WebLogic ServerはJAX-RPC仕様を実装しています。

次の表で、JAX-RPCの中心的なインタフェースとクラスを簡単に説明します。

表6-1 JAX-RPCのインタフェースとクラス

javax.xml.rpcのインタフェースまたはクラス

説明

Service

主要なクライアント・インタフェース。

ServiceFactory

Serviceインスタンスの生成に使用するファクトリ・クラス。

Stub

Webサービスの操作を呼び出すためのクライアント・プロキシのベース・クラス。

Call

Webサービスを動的に呼び出すのに使用します。

JAXRPCException

Webサービスの呼出し中にエラーが発生した場合にスローされる例外。

Webサービスを呼び出すクライアントの例

WebLogic ServerのWL_HOME/samples/server/examples/src/examples/webservicesディレクトリには、WebLogic Webサービスの作成と呼出しのサンプルがあります(WL_HOMEは、WebLogic Serverのメイン・ディレクトリです)。サンプルのビルドおよび実行方法の詳細は、ブラウザでWebページWL_HOME/samples/server/docs/index.htmlを開いて「WebLogic Server Examples」→「Examples」→「API」→「Web Services」ノードを展開してください。

Java SEクライアントからのWebサービスの呼出し

注意:

この項で説明するように、WebLogic Serverで実行されている(WebLogic Serverクラスパスにアクセスする)任意のJava SEまたはJava EEアプリケーションからWebサービスを呼び出すことができます。WebLogic Serverのライブラリにアクセスできない環境で実行されているスタンドアロンJavaアプリケーションのサポートについての詳細は、「Webサービス呼出し時のスタンドアロン・クライアントJARファイルの使用」を参照してください。

次の表は、Webサービスを呼び出すJava SEクライアントの作成の主な手順を示しています。

注意:

開発環境でのクライアント・アプリケーションのビルドやJavaファイルのコンパイルなどにAntを使用すること、およびWebサービスのクライアント・タスクで更新する必要のあるbuild.xmlファイルがすでに存在することを想定しています。開発環境でのAntの使用に関する一般情報は、「基本的なAnt build.xmlファイルの作成」を、この項で使用されるbuild.xmlファイルの完全な例は、「JavaクライアントのサンプルAntビルド・ファイル」を参照してください。

表6-2 Java SEクライアントからWebサービスを呼び出す手順

#

手順

説明

1

環境を設定します。

コマンド・ウィンドウを開いて、ドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd (Windows)またはsetDomainEnv.sh (UNIX)コマンドを実行します。WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2

build.xmlファイルを更新して、Webサービスの呼出しに必要なクライアント側アーティファクトを生成するclientgen Antタスクが実行されるようにします。

「クライアントのアーティファクトを生成するためのclientgen Antタスクの使用」を参照してください。

3

Webサービスに関する情報(その操作のシグネチャ、ポートの名前など)を取得します。

「Webサービスに関する情報の取得」を参照してください。

4

Webサービス操作を呼び出すためのコードを含むクライアント・アプリケーションのJavaコードを記述します。

「Webサービスを呼び出すJavaクライアント・アプリケーション・コードの記述」を参照してください。

5

基本のAntビルド・ファイルbuild.xmlを作成します。

「基本的なAnt build.xmlファイルの作成」を参照してください。

6

Javaクライアント・アプリケーションをコンパイルし、実行します。

「クライアント・アプリケーションのコンパイルと実行」を参照してください。

クライアントのアーティファクトを生成するためのclientgen Antタスクの使用

clientgen WebLogic WebサービスAntタスクは、クライアント・アプリケーションがWebLogic Webサービスと非WebLogic Webサービスの両方の呼出しに使用できるクライアント・アーティファクトを既存のWSDLファイルから生成します。アーティファクトは次を含みます:

- 呼出しの対象となる特定のWebサービスに対するJAX-RPC StubおよびServiceインタフェース実装のJavaクラス。

- WSDLファイルで指定されたユーザー定義XMLスキーマ・データ型のJavaクラス。

- Javaのユーザー定義のデータ型と、WSDLファイル内で指定されたそのデータ型に対応するXMLスキーマ型の間のマッピングに関する情報を格納するJAX-RPCマッピング・デプロイメント記述子ファイル。

- WSDLファイルのクライアント側のコピー。

clientgen Antタスクの詳細(使用可能なすべての属性など)については、『Oracle Fusion Middleware WebLogic Oracle WebLogic Server Webサービス・リファレンス』の「Antタスク・リファレンス」を参照してください。

次の例のように、build.xmlファイルを更新してclientgen Antタスクに呼出しを追加します。

<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<target name="build-client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
destDir="clientclasses"
packageName="examples.webservices.simple_client"
type="JAXRPC"/>
</target>

clientgen WebLogic WebサービスAntタスクを実行するには、このタスクの完全なJavaクラス名を標準のtaskdef Antタスクを使用して指定する必要があります。

クライアント側アーティファクトの作成に使用するWSDLファイルと、そうしたアーティファクトの生成先ディレクトリを指定するには、clientgen Antタスクのwsdl属性とdestDir属性を含める必要があります。packageName属性は省略できます。省略した場合、clientgenタスクではWSDLのtargetNamespaceに基づくパッケージ名が使用されます。typeも省略可能です。省略した場合のデフォルト値はJAXRPCです。

この例では、パッケージ名はクライアント・アプリケーションと同じパッケージ名examples.webservices.simple_clientに設定されます。パッケージ名をクライアント・アプリケーションとは異なる名前に設定した場合は、適切なクラス・ファイルをインポートする必要があります。たとえば、examples.webservices.complexというパッケージ名にした場合、クライアント・アプリケーションの以下のクラス・ファイルをインポートする必要があります。

import examples.webservices.complex.BasicStruct;
import examples.webservices.complex.ComplexPortType;
import examples.webservices.complex.ComplexService;

注意:

clientgen AntタスクのdestFile属性を使用すると、生成されたJavaファイルを自動的にコンパイルして、すべてのアーティファクトをJARファイルにパッケージ化できます。コンパイルの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server Webサービス・リファレンス』の「clientgen」を参照してください。

WSDLファイルで、Webサービス操作の入力パラメータまたは戻り値としてユーザー定義のデータ型が指定されている場合、clientgenはWSDLに定義されたXMLスキーマ・データ型のJava表現であるJavaBeanクラスを自動的に生成します。JavaBeanクラスは、destDirディレクトリに生成されます。

注意:

ユーザー定義のJavaデータ型のパッケージは、WSDLのデータ型のXMLスキーマに基づくもので、JAX-RPCスタブのパッケージ名とは異なります。

この手順で説明されている追加のターゲット(cleanなど)を含む、完全なサンプルbuild.xmlファイルについては、「JavaクライアントのサンプルAntビルド・ファイル」を参照してください。

clientgen Antタスクを他のサポートAntタスクと一緒に実行するには、コマンド・ラインでbuild-clientターゲットを指定します。

prompt> ant build-client

clientclassesディレクトリで、clientgen Antタスクによって生成されたファイルやアーティファクトを確認します。

Webサービスに関する情報の取得

操作を呼び出すJavaクライアント・アプリケーション・コードの記述に先立って、Webサービスの名前と操作のシグネチャを知る必要があります。この情報を調べるには様々な方法があります。

この情報を得るのに最適なのは、clientgen Antタスクを使用してWebサービス固有のJAX-RPCスタブを生成し、生成された*.javaファイルを調べる方法です。これらのファイルは、destDir属性で指定したディレクトリ内のpackageName属性の値に対応したサブディレクトリ、またはWSDLのtargetNamespaceに基づくパッケージに対応したサブディレクトリ(packageName属性が指定されていない場合)に生成されます。

- ServiceName.javaソース・ファイルには、Webサービスのポートを取得するためのgetPortName()メソッドが含まれています(ServiceNameはWebサービス名、PortNameはポート名です)。WebサービスがJWSファイルで実装されている場合、Webサービス名は@WebService JWSアノテーションのserviceName属性の値となり、ポート名は@WLHttpTransportアノテーションのportName属性の値となります。

- PortType.javaファイルには、Webサービスのパブリック操作に対応するメソッド・シグネチャが含まれています(PortTypeはWebサービスのポートの種類です)。WebサービスがJWSファイルで実装されている場合、ポートの種類は@WebService JWSアノテーションのname属性の値となります。

Webサービスの実際のWSDLを調べることもできます。デプロイされているWebLogic WebサービスのWSDLの詳細は、「WebサービスのWSDLの参照」を参照してください。Webサービス名は、次のTraderService WSDLの抜粋に示すように、<service>要素内にあります。

<service name="TraderService">
<port name="TraderServicePort"
binding="tns:TraderServiceSoapBinding">
...
</port>
</service>

このWebサービス用に定義されている操作は、対応する<binding>要素の下に記述されています。たとえば次のWSDLの抜粋は、TraderService Webサービスにbuyとsellの2つの操作があることを示しています(わかりやすくするため、WSDLの関連部分のみを記載しています)。

<binding name="TraderServiceSoapBinding" ...>
...
<operation name="sell">
...
</operation>
<operation name="buy">
</operation>
</binding>

Webサービスを呼び出すJavaクライアント・アプリケーション・コードの記述

次のサンプル・コードでは、JavaアプリケーションがWebサービス操作を呼び出しています。このクライアント・アプリケーションは1つの引数(WebサービスのWSDL)を取ります。アプリケーションは次に標準JAX-RPC APIコードとclientgenによって生成されたServiceインタフェースのWebサービス固有の実装を使用して、Webサービスの操作を呼び出します。

この例では、ユーザー定義のデータ型(examples.webservices.complex.BasicStruct)を入力パラメータおよび戻り値として使用する操作を呼び出す方法も示します。clientgen Antタスクによって、このユーザー定義のデータ型のJavaコードが自動的に生成されます。

package examples.webservices.simple_client;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
// import the BasicStruct class, used as a param and return value of the
// echoComplexType operation.  The class is generated automatically by
// the clientgen Ant task.
import examples.webservices.complex.BasicStruct;
/**
* This is a simple Java client application that invokes the
* the echoComplexType operation of the ComplexService Web service.
*/
public class Main {
public static void main(String[] args)
throws ServiceException, RemoteException {
ComplexService service = new ComplexService_Impl (args[0] + "?WSDL" );
ComplexPortType port = service.getComplexServicePort();
BasicStruct in = new BasicStruct();
in.setIntValue(999);
in.setStringValue("Hello Struct");
BasicStruct result = port.echoComplexType(in);
System.out.println("echoComplexType called. Result: " + result.getIntValue() + ", " + result.getStringValue());
}
}

上記の例で注目すべき点は以下のとおりです。

- 次のコードは、ComplexPortTypeスタブを作成する方法を示します。

ComplexService service = new ComplexService_Impl (args[0] + "?WSDL");
ComplexPortType port = service.getComplexServicePort();

ComplexService_Implスタブ・ファクトリはJAX-RPCのServiceインタフェースを実装します。ComplexService_Implのコンストラクタは、指定されているWSDL URI (args[0] + "?WSDL")に基づいてスタブを作成します。getComplexServicePort()メソッドは、ComplexPortTypeスタブ実装のインスタンスを返すために使用します。

- 次のコードは、ComplexService WebサービスのechoComplexType操作を呼び出す方法を示します。

BasicStruct result = port.echoComplexType(in);

echoComplexType操作は、BasicStructというユーザー定義データ型を返します。

アプリケーションからWebサービス操作を呼び出すメソッドは、生成されたJAX-RPCスタブからスローされるjava.rmi.RemoteExceptionおよびjavax.xml.rpc.ServiceExceptionをスローまたは捕捉する必要があります。

クライアント・アプリケーションのコンパイルと実行

すべてのJavaファイル(クライアント・アプリケーションおよびclientgenによって生成されたファイルの両方)をクラス・ファイルにコンパイルするには、build.xmlファイルのbuild-clientターゲットにjavacタスクを追加します。該当箇所を次の例に太字で示します。

<target name="build-client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
destDir="clientclasses"
packageName="examples.webservices.simple_client"
type="JAXRPC"/>
<javac
srcdir="clientclasses"
destdir="clientclasses"
includes="**/*.java"/>
<javac
srcdir="src"
destdir="clientclasses"
includes="examples/webservices/simple_client/*.java"/>
</target>

この例では、1番目のjavacタスクでclientgenによって生成されたclientclassesディレクトリ内のJavaファイルをコンパイルし、2番目のjavacタスクでカレント・ディレクトリのexamples/webservices/simple_clientサブディレクトリ(Javaクライアント・アプリケーションのソースの場所と想定されるディレクトリ)内にあるJavaファイルをコンパイルしています。

この例では、clientgenによって生成されたJavaソース・ファイルとコンパイル後のクラスが同じディレクトリ(clientclasses)に格納されます。プロトタイピングの段階ではこれで十分ですが、多くの場合はソース・コード(生成されたコードも含む)とコンパイルされたクラスを別々のディレクトリに格納するのがベスト・プラクティスです。これを行うには、両方のjavacタスクのdestdirに、srcdirディレクトリとは異なるディレクトリを設定します。また、clientgenによって生成された以下のファイルを、clientgenの出力先ディレクトリからjavacの出力先ディレクトリにコピーする必要もあります。その際、出力先のサブディレクトリの階層構造は同じになるようにします。

packageName/ServiceName_internaldd.xml
packageName/ServiceName_java_wsdl_mapping.xml
packageName/ServiceName_saved_wsdl.wsdl

packageNameは生成されたJAX-RPCスタブのパッケージに対応するサブディレクトリ階層構造、ServiceNameはWebサービスの名前です。

クライアント・アプリケーションを実行するには、次に示すように、javaタスクの呼出しを含むbuild.xmlにrunターゲットを追加します。

<path id="client.class.path">
<pathelement path="clientclasses"/>
<pathelement path="${java.class.path}"/>
</path>
<target name="run" >
<java
fork="true"
classname="examples.webServices.simple_client.Main"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg line="http://${wls.hostname}:${wls.port}/complex/ComplexService" />
</target>

pathタスクは、CLASSPATHにclientclassesディレクトリを追加します。runターゲットはMainアプリケーションを呼び出し、デプロイされたWebサービスのURLを1つの引数として渡します。

この手順で説明されている追加のターゲット(cleanなど)を含む、完全なサンプルbuild.xmlファイルについては、「JavaクライアントのサンプルAntビルド・ファイル」を参照してください。

アーティファクトを再生成してクラスに再コンパイルするためにbuild-clientターゲットを再実行してから、runターゲットを実行してechoStruct操作を呼び出します。

prompt> ant build-client run

build.xmlファイルのbuild-clientおよびrunターゲットを使用して、開発プロセスの一環としてJavaクライアント・アプリケーションを繰返し更新、再ビルド、および実行できます。

JavaクライアントのサンプルAntビルド・ファイル

次の例では、Javaクライアントを生成およびコンパイルするための完全なbuild.xmlファイルを示します。太字のセクションについては、「クライアントのアーティファクトを生成するためのclientgen Antタスクの使用」および「クライアント・アプリケーションのコンパイルと実行」を参照してください。

<project name="webservices-simple_client" default="all">
<!-- set global properties for this build -->
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="example-output" value="output" />
<property name="clientclass-dir" value="${example-output}/clientclass" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<target name="clean" >
<delete dir="${clientclass-dir}"/>
</target>
<target name="all" depends="clean,build-client,run" />
<target name="build-client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.simple_client"
type="JAXRPC"/>
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/simple_client/*.java"/>
</target>
<target name="run" >
<java fork="true"
classname="examples.webservices.simple_client.Main"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg  line="http://${wls.hostname}:${wls.port}/complex/ComplexService"
/>
</java>
</target>
</project>

別のWebサービスからのWebサービスの呼出し

WebLogic Webサービス内からのWebサービスの呼出しは、「Java SEクライアントからのWebサービスの呼出し」で説明している、他のJavaアプリケーションからの呼出しと似ています。ただし、呼び出されるWebサービスのJAX-RPCスタブを生成するclientgen Antタスクを使用するのではなく、呼出し側のWebサービスをコンパイルするjwsc Antタスク内で、<jws>要素の<clientgen>子要素を使用します。一方、他のWebサービスを呼び出すJWSファイルでは、ServiceおよびPortTypeインスタンスの取得に同じ標準JAX-RPC APIを使用して、Webサービス操作を呼び出します。

「Java SEクライアントからのWebサービスの呼出し」をすでに読み、理解していることが前提となります。また、クライアント・アプリケーションのビルドやJavaファイルのコンパイルなどに開発環境でAntを使用していること、そして別のWebサービスを呼び出すために更新したいWebサービスをビルドするbuild.xmlファイルをすでに持っていることも前提となります。

クライアントWebサービスをビルドするbuild.xmlファイルに加える必要のある変更は次のとおりです(このクライアントWebサービスが別のWebサービスを呼び出すことになります)。build.xmlファイルの完全なサンプルについては、「Webサービス・クライアントのサンプルbuild.xmlファイル」を参照してください。

- JWSファイル(別のWebサービスを呼び出すWebサービスを実装しているもの)を指定する<jws>要素に、<clientgen>子要素を追加します。呼び出すWebサービスのWSDLに、必要なwsdl属性を設定します。JAX-RPCクライアント・スタブの生成先とするパッケージに、必要なpackageName属性を設定します。

クライアントWebサービスを実装するJWSファイルに加える必要のある変更は次のとおりです。JWSファイルの完全なサンプルについては、「Webサービスを呼び出すサンプルJWSファイル」を参照してください。

- jwsc Antタスクの<clientgen>子要素で生成される一連のファイルをインポートします。これらには、呼び出されるWebサービスの操作でパラメータまたは戻り値として使用するユーザー定義データ型のJava表現だけでなく、呼び出されるWebサービスのJAX-RPCスタブも含まれます。

注意:

ユーザー定義のデータ型は、clientgenで指定されるパッケージ内ではなく、WSDLのXMLスキーマ・データ型に基づくパッケージ内に生成されます。ただし、JAX-RPCスタブでは<clientgen>要素のpackageName属性で指定されるパッケージ名が使用されます。

- Webサービスの呼出しを含むメソッドを、java.rmi.RemoteExceptionとjavax.xml.rpc.ServiceExceptionの両方をスローまたは捕捉するように更新します。

- JAX-RPCのServiceおよびPortTypeスタブ実装を取得して、通常どおりポート上で操作を呼び出します。詳細は、「Webサービスを呼び出すJavaクライアント・アプリケーション・コードの記述」を参照してください。

Webサービス・クライアントのサンプルbuild.xmlファイル

次のサンプルbuild.xmlファイルでは、別のWebサービスを呼び出すWebサービスを作成する方法を示します。別のWebサービスを呼び出さない単純なWebサービスをビルドするためのbuild.xmlと異なっている部分は、太字で示されています。

この場合のbuild-serviceターゲットは、単純なWebサービスをビルドするターゲットとよく似ています。唯一の違いは、呼び出すWebサービスをビルドするjwsc Antタスクに<jws>要素の<clientgen>子要素も含まれるという点で、これによってjwscでは必要なJAX-RPCクライアント・スタブも生成されるようになります。

<project name="webservices-service_to_service" default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="ClientServiceEar" />
<property name="example-output" value="output" />
<property name="ear-dir" value="${example-output}/ClientServiceEar" />
<property name="clientclass-dir" value="${example-output}/clientclasses" />
<path id="client.class.path">
<pathelement path="${clientclass-dir}"/>
<pathelement path="${java.class.path}"/>
</path>
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="clientgen"
classname="weblogic.wsee.tools.anttasks.ClientGenTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all" depends="clean,build-service,deploy,client" />
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}" >
<jws
file="examples/webservices/service_to_service/ClientServiceImpl.java"
type="JAXRPC">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/complex/ComplexService?WSDL"
packageName="examples.webservices.complex" />
</jws>
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy" name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="undeploy">
<wldeploy action="undeploy" name="${ear.deployed.name}"
failonerror="false"
user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="client">
<clientgen
wsdl="http://${wls.hostname}:${wls.port}/ClientService/ClientService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.service_to_service.client"
type="JAXRPC"/>
<javac
srcdir="${clientclass-dir}" destdir="${clientclass-dir}"
includes="**/*.java"/>
<javac
srcdir="src" destdir="${clientclass-dir}"
includes="examples/webservices/service_to_service/client/**/*.java"/>
</target>
<target name="run">
<java classname="examples.webservices.service_to_service.client.Main"
fork="true"
failonerror="true" >
<classpath refid="client.class.path"/>
<arg
line="http://${wls.hostname}:${wls.port}/ClientService/ClientService"/>
</java>
</target>
</project>

Webサービスを呼び出すサンプルJWSファイル

次に示すサンプルJWSファイル(ClientServiceImpl.java)は、ClientServiceというWebサービスを実装しており、このWebサービスに含まれている操作がComplexServiceというWebサービスのechoComplexType操作を呼び出します。この操作では、パラメータとしても戻り値としてもユーザー定義データ型(BasicStruct)を使用します。該当するコードを太字で示し、例の後で説明を加えます。

package examples.webservices.service_to_service;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.jws.WebService;
import javax.jws.WebMethod;
import weblogic.jws.WLHttpTransport;
// Import the BasicStruct data type, generated by clientgen and used
// by the ComplexService Web Service
import examples.webservices.complex.BasicStruct;
// Import the JAX-RPC Stubs for invoking the ComplexService Web Service.
// Stubs generated by clientgen
import examples.webservices.service_to_service.ComplexPortType;
import examples.webservices.service_to_service.ComplexService_Impl;
import examples.webservices.service_to_service.ComplexService;
@WebService(name="ClientPortType", serviceName="ClientService",
targetNamespace="http://examples.org")
@WLHttpTransport(contextPath="ClientService", serviceUri="ClientService",
portName="ClientServicePort")
public class ClientServiceImpl {
@WebMethod()
public String callComplexService(BasicStruct input, String serviceUrl)
throws ServiceException, RemoteException
{
// Create service and port stubs to invoke ComplexService
ComplexService service = new ComplexService_Impl(serviceUrl + "?WSDL");
ComplexPortType port = service.getComplexServicePort();
// Create service and port stubs to invoke ComplexService
ComplexService service = new ComplexService_Impl(serviceUrl + "?WSDL");
ComplexPortType port = service.getComplexServicePortTypePort();
// Invoke the echoComplexType operation of ComplexService
BasicStruct result = port.echoComplexType(input);
System.out.println("Invoked ComplexPortType.echoComplexType." );
return "Invoke went okay!  Here's the result: '" + result.getIntValue() + ",  " + result.getStringValue() + "'";
}
}

別のWebサービスを呼び出すJWSファイルをプログラミングする際は、次のガイドラインに従います。ガイドラインのコード・スニペットは、前の例では太字で示されています。

- 呼び出されるWebサービスで使用されるユーザー定義データ型をインポートします。この例では、ComplexServiceでBasicStruct JavaBeanを使用しています。

import examples.webservices.complex.BasicStruct;

- ComplexService WebサービスのJAX-RPCスタブをインポートします。このスタブは、<jws>の<cliengen>子要素によって生成されます。

import examples.webservices.service_to_service.ComplexPortType;
import examples.webservices.service_to_service.ComplexService_Impl;
import examples.webservices.service_to_service.ComplexService;

- クライアントWebサービスがServiceExceptionおよびRemoteExceptionをスローまたは捕捉するようにします。

throws ServiceException, RemoteException

- ComplexServiceのJAX-RPC ServiceおよびPortTypeインスタンスを作成します。

ComplexService service = new
ComplexService_Impl(serviceUrl + "?WSDL");
ComplexPortType port = service.getComplexServicePortTypePort();

- ComplexServiceのechoComplexType操作を、直前にインスタンス化したポートを使用して呼び出します。

BasicStruct result = port.echoComplexType(input);

Webサービス呼出し時のスタンドアロン・クライアントJARファイルの使用

このドキュメントでは、clientgenまたはwsdlc Antタスクによって生成されたクライアント側アーティファクトを使用してWebサービスを呼び出す場合に、WebLogic Serverクラス全体がCLASSPATHに指定されていることを前提としています。ただし、ご使用のコンピュータにWebLogic Serverがインストールされていない場合でも、この項で説明するようにスタンドアロンのWebLogic Webサービス・クライアントJARファイルを使用することで、Webサービスを呼び出すことができます。

スタンドアロン・クライアントJARファイルは、次のような基本的なクライアント側の機能をサポートしています。

- clientgen Antタスクの双方によって作成されるクライアント側アーティファクトでの使用

- SOAPメッセージの処理

- クライアント側のSOAPメッセージ・ハンドラの使用

- MTOMの使用

- JAX-RPC Webサービスの呼出し

- SSLの使用

ただし、スタンドアロン・クライアントJARファイルは、次の高度な機能を使用するWebサービスの呼出しはサポートしていません。

- Webサービスの信頼性のあるSOAPメッセージング

- メッセージ・レベルのセキュリティ(WS-Security)

- 会話

- 非同期のリクエスト/レスポンス

- バッファリング

- JMSトランスポート

スタンドアロンのWebLogic Webサービス・クライアントJARファイルをクライアント・アプリケーションで使用するには、次の手順に従います。

1. ファイルWL_HOME/server/lib/wseeclient.zipを、WebLogic Serverをホストしているコンピュータからクライアント・コンピュータにコピーします。WL_HOMEは、WebLogic Serverのインストール・ディレクトリ(/Oracle/Middleware/wlserver_10.3など)を表します。

2. wseeclient.zipファイルを、適切なディレクトリに解凍します。たとえば、クライアント・アプリケーションで使用している他のクラスが格納されているディレクトリを解凍先にします。

3. wseeclient.jarファイル(wseeclient.zipファイルから解凍)を、CLASSPATHに追加します。

注意:

また、Antクラスが含まれるJARファイル(ant.jar)が、確実にCLASSPATHに格納されるようにしてください。このJARファイルは通常、Antディストリビューションのlibディレクトリ内にあります。

Webサービス呼出し時のプロキシ・サーバーの使用

プロキシ・サーバーを使用すると、クライアント・アプリケーションから、呼び出されるWebサービスをホストするアプリケーション・サーバー(WebLogic、非WebLogicいずれでも)へのリクエストをプロキシできます。通常、プロキシ・サーバーは、アプリケーション・サーバーがファイアウォールの内側にある場合に使用します。クライアント・アプリケーションでプロキシ・サーバーを指定するには、WebLogic HttpTransportInfo APIでプログラム的に行う方法と、システム・プロパティを使用する方法の2つがあります。

HttpTransportInfo APIを使用したプロキシ・サーバーの指定

標準のjava.net.*クラスとWebLogic固有のHttpTransportInfo APIを使用することにより、Webサービスの呼出しをプロキシするプロキシ・サーバーの詳細を、Javaクライアント・アプリケーション自体の中でプログラム的に指定できます。java.netクラスを使用して、プロキシ・サーバーを示すProxyオブジェクトを作成し、次にWebLogic APIとプロパティを使用してJAX-RPCスタブ上でプロキシ・サーバーを設定します(HttpProxySampleService Webサービスのecho操作を呼び出す次のサンプル・クライアントを参照)。太字で示したコードについては、例の後で説明します。

package dev2dev.proxy.client;
import java.net.Proxy;
import java.net.InetSocketAddress;
import weblogic.wsee.connection.transport.http.HttpTransportInfo;
/**
* Sample client to invoke a service through a proxy server via
* programmatic API
*/
public class HttpProxySampleClient {
public static void main(String[] args) throws Throwable{
assert args.length == 5;
String endpoint = args[0];
String proxyHost = args[1];
String proxyPort = args[2];
String user = args[3];
String pass = args[4];
//create service and port
HttpProxySampleService service = new HttpProxySampleService_Impl();
HttpProxySamplePortType port = service.getHttpProxySamplePortTypeSoapPort();
//set endpoint address
((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, endpoint);
//set proxy server info
Proxy p = new Proxy(Proxy.Type.HTTP, new  InetSocketAddress(proxyHost, Integer.parseInt(proxyPort)));
HttpTransportInfo info = new HttpTransportInfo();
info.setProxy(p);
((Stub)port)._setProperty("weblogic.wsee.connection.transportinfo",info);
//set proxy-authentication info
((Stub)port)._setProperty("weblogic.webservice.client.proxyusername",user);
((Stub)port)._setProperty("weblogic.webservice.client.proxypassword",pass);
//invoke
String s = port.echo("Hello World!");
System.out.println("echo: " + s);
}
}

上記の例のうち、留意すべきセクションは、次のとおりです。

- 必要なjava.net.*クラスのインポート。

import java.net.Proxy;
import java.net.InetSocketAddress;

- WebLogic HttpTransportInfo APIのインポート。

import weblogic.wsee.connection.transport.http.HttpTransportInfo;

- プロキシ・サーバーを表すProxyオブジェクトの作成。

Proxy p = new Proxy(Proxy.Type.HTTP, new  InetSocketAddress(proxyHost, Integer.parseInt(proxyPort)));

引数proxyHostおよびproxyPortは、プロキシ・サーバーのホスト・コンピュータおよびポートを表します。

- HttpTransportInfoオブジェクトを作成し、setProxy()メソッドを使用してプロキシ・サーバー情報を設定します。

HttpTransportInfo info = new HttpTransportInfo();
info.setProxy(p);

- weblogic.wsee.connection.transportinfo WebLogicスタブ・プロパティを使用して、JAX-RPCスタブ上でHttpTransportInfoオブジェクトを設定します。

((Stub)port)._setProperty("weblogic.wsee.connection.transportinfo",info);

- WebLogic固有のスタブ・プロパティweblogic.webservice.client.proxyusernameおよびweblogic.webservice.client.proxypasswordを使用して、プロキシ・サーバーへのアクセスが認証されているユーザーのユーザー名とパスワードを指定します。

((Stub)port)._setProperty("weblogic.webservice.client.proxyusername",user);
((Stub)port)._setProperty("weblogic.webservice.client.proxypassword",pass);

別の方法としては、次の例に示すように、HttpTransportInfo APIのsetProxyUsername()およびsetProxyPassword()メソッドを使用してプロキシ・ユーザー名とパスワードを設定することもできます。

info.setProxyUsername("juliet".getBytes());
info.setProxyPassword("secret".getBytes());

システム・プロパティを使用したプロキシ・サーバーの指定

プロキシ・サーバーの指定にシステム・プロパティを使用するには、クライアント・アプリケーションの記述は標準的な方式で行い、クライアント・アプリケーションの実行時にシステム・プロパティを指定します。

Javaの標準的なシステム・プロパティを使用するか、またはWebLogicの履歴プロパティを使用できます。proxySet systemプロパティがfalseに設定される場合(proxySet=false)、プロキシ・プロパティが無視され、プロキシは使用されません。

次の表に、Javaシステム・プロパティの概要を示します。この場合、proxySetシステム・プロパティを設定しないでください。

表6-3 プロキシ・サーバーの指定に使用するJavaシステム・プロパティ

プロパティ

説明

http.proxyHost=proxyHost

または

https.proxyHost=proxyHost

プロキシ・サーバーが動作しているホスト・コンピュータの名前。HTTP over SSLに対してhttps.proxyHostを使用します。

http.proxyPort=proxyPort

または

https.proxy.Port=proxyPort

プロキシ・サーバーがリスニングしているポート。HTTP over SSLに対してhttps.proxyPortを使用します。

http.nonProxyHosts=

hostname|hostname|...

プロキシをバイパスし、直接アクセスするホストのリスト。各ホスト名を「|」文字で区切ります。このプロパティはHTTPおよびHTTPSの両方に適用されます。

以下のAntビルド・スクリプトの抜粋では、clients.InvokeMyServiceというクライアント・アプリケーションを呼び出す場合のJavaシステム・プロパティの設定例を示します。

<target name="run-client">
<java fork="true"
classname="clients.InvokeMyService"
failonerror="true">
<classpath refid="client.class.path"/>
<arg line="${http-endpoint}"/>
<jvmarg line=
"-Dhttp.proxyHost=${proxy-host}
-Dhttp.proxyPort=${proxy-port}
-Dhttp.nonProxyHosts=${mydomain}"
/>
</java>
</target>

次の表に、WebLogicシステム・プロパティの概要を示します。この場合、proxySetシステム・プロパティをtrueに設定する必要があります。

表6-4 プロキシ・サーバーの指定に使用するWebLogicシステム・プロパティ

プロパティ

説明

proxySet=true

歴史的なWebLogicプロキシ・プロパティを使用することを指定するフラグ。

proxyHost=proxyHost

プロキシ・サーバーが動作しているホスト・コンピュータの名前。

proxyPort=proxyPort

プロキシ・サーバーがリスニングしているポート。

weblogic.webservice.client.proxyusername=username

プロキシ・サーバーにアクセスするために使用するユーザー名。

weblogic.webservice.client.proxypassword=password

プロキシ・サーバーにアクセスするために使用するパスワード。

以下のAntビルド・スクリプトの抜粋では、clients.InvokeMyServiceというクライアント・アプリケーションを呼び出す場合のWebLogicシステム・プロパティの設定例を示します。

<target name="run-client">
<java fork="true"
classname="clients.InvokeMyService"
failonerror="true">
<classpath refid="client.class.path"/>
<arg line="${http-endpoint}"/>
<jvmarg line=
"-DproxySet=true
-DproxyHost=${proxy-host}
-DproxyPort=${proxy-port}
-Dweblogic.webservice.client.proxyusername=${proxy-username}
-Dweblogic.webservice.client.proxypassword=${proxy-passwd}"
/>
</java>
</target>

Webサービスを再デプロイする際にクライアント側で考慮すべき事項

WebLogic Serverでは本番再デプロイメントをサポートしているため、更新後の新しいバージョンのWebLogic Webサービスを同じWebサービスの古いバージョンと並行してデプロイできます。

WebLogic Serverでは、新しいクライアントのリクエストのみが新しいバージョンに転送されるように、クライアント接続が自動的に管理されます。再デプロイメント時にすでにWebサービスに接続していたクライアントは、作業が完了するまで古いバージョンのサービスを使用し続け、それらの作業が完了した時点で、WebLogic Serverが古いWebサービスを自動的にリタイアします。クライアントが会話形式のWebサービスまたは信頼性のあるWebサービスに接続している場合、既存の会話シーケンスまたは信頼性のあるメッセージングのシーケンスがクライアントによって明示的に終了されるか、タイムアウトになったときに、クライアントの作業が完了したと見なされます。

Webサービスの新しいバージョンで次のWebサービス・アーティファクトが変更されていなければ、その新しいバージョンで古いクライアント・アプリケーションを引き続き使用できます。

- Webサービスを記述するWSDL

- Webサービスに添付されたWS-Policyファイル

上記のアーティファクトのいずれかが変更されている場合、clientgen Antタスクを再び実行して、クライアント・アプリケーションで使用されるJAX-RPCスタブを再生成する必要があります。

たとえば、Webサービスの新しいバージョンで操作のシグネチャを変更すると、Webサービスの新しいバージョンを記述するWSDLファイルも変更されます。この場合、JAX-RPCスタブを再生成する必要があります。ただし、単に操作の実装のみを変更し、操作のパブリック・コントラクトは変更しない場合、既存のクライアント・アプリケーションを引き続き使用できます。

WebLogic Webサービスのスタブ・プロパティ

WebLogic Serverには、WebLogic Webサービスの呼出しに使用するJAX-RPCスタブに対して設定できる一連のスタブ・プロパティが用意されています。プロパティの設定には、次の例のようにStub._setProperty()メソッドを使用します。

((Stub)port)._setProperty(WLStub.MARSHAL_FORCE_INCLUDE_XSI_TYPE,"true");

ほとんどのスタブ・プロパティはWLStubクラスに定義されています。詳細は、Oracle Fusion Middleware Oracle WebLogic Server APIリファレンス』の「weblogic.wsee.jaxrpc.WLStub」を参照してください。

WLStubクラスに定義されていない付加的なスタブ・プロパティについては、以下の表で説明します。

表6-5 付加的なスタブ・プロパティ

スタブ・プロパティ

説明

weblogic.wsee.transport.connection.timeout

Webサービスの呼出しを試行しているクライアント・アプリケーションが接続を待機する時間(ミリ秒単位)を指定します。指定した時間が経過しても接続が確立していない場合、その試行はタイムアウトになります。

weblogic.wsee.transport.read.timeout

クライアント・アプリケーションが呼び出しているWebサービスからのレスポンスを待機する時間(ミリ秒単位)を指定します。指定した時間が経過してもレスポンスが到着していない場合、そのクライアントはタイムアウトになります。

weblogic.wsee.security.bst.serverVerifyCert

クライアント・アプリケーションがWebLogic Serverからの署名されたレスポンスの検証に使用する証明書を指定します。デフォルトでは、検証に使用される証明書がSOAPレスポンス・メッセージ自体に格納されます。これが不可能な場合に、このスタブ・プロパティを使用して、別の証明書を指定します。

このスタブ・プロパティは、WebLogic Serverコンテナの内部で実行されるクライアント・アプリケーションのみに適用され、スタンドアロンのクライアント・アプリケーションには適用されません。

このプロパティの値は、java.security.cert.X509Certificateデータ型のオブジェクト。

weblogic.wsee.security.bst.serverEncryptCert

クライアント・アプリケーションが、WebLogic Serverに送信されるSOAPリクエスト・メッセージの暗号化に使用する証明書を指定します。デフォルトでは、クライアント・アプリケーションはWebサービスのWSDLでパブリッシュされているパブリック証明書を使用します。これが不可能な場合に、このスタブ・プロパティを使用して、別の証明書を指定します。

このスタブ・プロパティは、WebLogic Serverコンテナの内部で実行されるクライアント・アプリケーションのみに適用され、スタンドアロンのクライアント・アプリケーションには適用されません。

このプロパティの値は、java.security.cert.X509Certificateデータ型のオブジェクト。

weblogic.wsee.marshal.forceIncludeXsiType

Webサービス操作呼出しのSOAPメッセージに、各パラメータのXMLスキーマ・データ型を含める必要があることを指定します。デフォルトでは、各パラメータのデータ型はSOAPメッセージには含まれません。

次に例を示すように、このプロパティをTrueに設定すると、操作パラメータを記述するSOAPメッセージ内の要素に、パラメータのデータ型を指定するためのxsi:type属性が追加されます。

<soapenv:Envelope>
...
<maxResults xsi:type="xs:int">10</maxResults>
...

デフォルトでは(または、このプロパティをFalseに設定した場合は)、このパラメータ要素は次の例のようになります。

<soapenv:Envelope>
...
<maxResults>10</maxResults>
...

このプロパティの有効な値は、TrueおよびFalseです。デフォルト値はFalseです。

レスポンスSOAPメッセージの文字エンコーディングの設定

レスポンス(発信) SOAPメッセージの文字エンコーディングを設定するには、weblogic.wsee.jaxrpc.WLStub.CHARACTER_SET_ENCODING WLStubプロパティを使用します。設定できる値は次の2つです。

- UTF-8

- UTF-16

クライアント・アプリケーションからの以下の抜粋コードでは、文字エンコーディングをUTF-16に設定する方法を示します。

Simple port = service.getSimpleSoapPort();
((Stub) port)._setProperty(weblogic.wsee.jaxrpc.WLStub.CHARACTER_SET_ENCODING, "UTF-16");
port.invokeMethod();

詳細は、Oracle Fusion Middleware Oracle WebLogic Server APIリファレンス』の「weblogic.wsee.jaxrpc.WLStub」を参照してください。

7 Webサービスの管理

この章では、Java API for XML-based RPC (JAX-RPC)を使用したWebLogic Webサービスの管理方法について説明します。

この章では、以下のトピックについて説明します。

- WebLogic Webサービスの管理タスクの概要

- 管理ツール

- 管理コンソールの使用

- Oracle Enterprise Manager Fusion Middleware Controlの使用

- WebLogic Scripting Toolの使用

- WebLogic Antタスクの使用

- Java Management Extensions (JMX)の使用

- Java EEデプロイメントAPIの使用

- ワーク・マネージャによるWebサービス作業の優先付けとスタック実行スレッドの削減

WebLogic Webサービスの管理タスクの概要

jwsc Antタスクを使用してWebLogic Webサービスをコンパイルおよびパッケージ化すると、Webサービスはエンタープライズ・アプリケーションの一部としてパッケージ化されます。デフォルトでは、Webサービス自体はエンタープライズ・アプリケーション内にWebアプリケーションWARファイルとしてパッケージ化されます。ただし、JWSファイルにセッションBeanが実装されている場合、WebサービスはEJB JARファイルとしてパッケージ化されます。したがって、Webサービスの基本的な管理は、標準のJava Platform, Enterprise Edition (Java EE)バージョン5アプリケーションおよびモジュールの基本的な管理と非常に似ています。標準的なタスクは次のとおりです。

- Webサービスを含むエンタープライズ・アプリケーションのインストール。

- デプロイされたエンタープライズ・アプリケーションを起動および停止します。

- エンタープライズ・アプリケーションと、実際のWebサービスを実装するアーカイブ・ファイルの構成。エンタープライズ・アプリケーションの一般的な特性(デプロイメント順など)や、モジュールに固有の特性(Webアプリケーションのセッション・タイムアウト、EJBのトランザクションの種類など)を構成できます。

- エンタープライズ・アプリケーションのデプロイメント・プランを作成および更新します。

- エンタープライズ・アプリケーションをモニターします。

- エンタープライズ・アプリケーションをテストします。

Webサービス固有の管理タスクは次のとおりです。

- Webサービスの信頼性のあるメッセージングやJMSトランスポートに使用するJMSリソースの構成。

- Webサービス・エンドポイントまたはその操作に関連付けられたWS-Policyファイルの構成。

注意:

JWSファイルのプログラミング時にWebサービスの@Policyアノテーションを使用して、関連付けるWS-Policyファイルを指定した場合は、実行時に管理コンソールなどの管理ツールを使用してこの関連付けを変更することはできません。新しいWS-Policyファイルの関連付けや、実行時に追加したWS-Policyファイルの関連付けの解除のみが可能です。

- Webサービスに関連付けられたSOAPハンドラの表示。

- WebサービスのWSDLの表示。

- Webサービスのセキュリティ構成の作成。

管理ツール

WebLogic Serverで動作するJava EEモジュールおよびアプリケーション(Webサービスを含む)を管理するには様々な方法があります。ニーズに最も適合するツールを使用してください。

- 管理コンソールの使用

- WebLogic Scripting Toolの使用

- WebLogic Antタスクの使用

- Java Management Extensions (JMX)の使用

- Java EEデプロイメントAPIの使用

管理コンソールの使用

WebLogic Server管理コンソールは、サーバーやクラスタにデプロイされたWebLogic Serverドメイン、1つ以上のWebLogic Serverインスタンス、クラスタおよびアプリケーション(Webサービスを含む)の管理に使用するWebブラウザ形式のグラフィカル・ユーザー・インタフェースです。

各ドメインでは、1つのWebLogic Serverインスタンスが管理サーバーとして構成されます。管理サーバーではWebLogic Serverドメインを一元的に管理できます。ドメイン内の他のすべてのWebLogic Serverインスタンスは、管理対象サーバーと呼ばれます。1つのWebLogic Serverインスタンスしか含まれないドメインでは、そのサーバーが管理サーバーおよび管理対象サーバーとして機能します。管理コンソールは、管理サーバーによってホストされるWebアプリケーションであり、サポートされている任意のWebブラウザから、管理サーバーへのネットワーク・アクセスを使用してアクセスできます。

システム管理コンソールを使用して、以下の作業を行うことができます。

- エンタープライズ・アプリケーションのインストール

- デプロイされたエンタープライズ・アプリケーションの起動と停止

- エンタープライズ・アプリケーションの構成

- Webアプリケーションの構成

- EJBの構成

- デプロイメント・プランの作成.

- デプロイメント・プランの更新

- エンタープライズ・アプリケーションのモジュールのテスト

- 「Webサービスの信頼性のあるメッセージングのためのJMSリソースの構成」

- 「WS-PolicyファイルとWebサービスとの関連付け」

- 「WebサービスのSOAPメッセージ・ハンドラの表示」

- 「WebサービスのWSDLの表示」

- 「Webサービス・セキュリティ構成の作成」

管理コンソールの起動

ブラウザで管理コンソールを起動するには、次のURLを入力します。

http://host:port/console

説明:

- hostは、管理サーバーが動作しているコンピュータを指します。

- portは、管理サーバーが接続リクエストをリスニングしているポート番号を指します。管理サーバーのデフォルトのポート番号は7001です。

管理コンソールの右上にある「ヘルプ」ボタンをクリックすると、管理コンソールの詳しい使い方を説明するオンライン・ヘルプが表示されます。

次の図は、管理コンソールのメイン・ウィンドウを示しています。

図7-1 WebLogic Server管理コンソールのメイン・ウィンドウ

図7-1 「WebLogic Server管理コンソールのメイン・ウィンドウ」の説明

管理コンソールでのWebサービスの表示

通常、Webサービスはエンタープライズ・アプリケーションの一部としてWebLogic Serverにデプロイされます。エンタープライズ・アプリケーションは、EARとしてアーカイブするか、展開されたディレクトリの形式とすることができます。Webサービス自体はほとんどの場合、Webアプリケーションとしてパッケージ化されます。ただし、JWSファイルにセッションBeanが実装されている場合だけは、EJBとしてパッケージ化されます。Webサービスは、アーカイブ形式(Webアプリケーションの場合はWARファイル、EJBの場合はEJB JARファイル)または展開されたディレクトリ形式にできます。

Webサービスは、必ずしもエンタープライズ・アプリケーションの一部としてインストールする必要はありません。Webサービスは、WebアプリケーションまたはEJBとしてそのままインストールすることもできます。ただし、Webサービスをエンタープライズ・アプリケーションの一部としてインストールすることをお薦めします。Webサービスの作成に使用されるWebLogic Antタスク(jwsc)は、生成されたWebサービスを常にエンタープライズ・アプリケーションにパッケージ化します。

管理コンソールを使用してWebサービスに関するWebサービス固有の構成情報を表示および更新するには、左ペインの「デプロイメント」ノードをクリックし、右ペインに表示される「デプロイメント」表でWebサービスがパッケージ化されているエンタープライズ・アプリケーションを探します。「+」ノードをクリックしてアプリケーションを展開すると、「Webサービス」カテゴリにアプリケーション内のWebサービスのリストが表示されます。構成を表示または更新するには、そのWebサービスの名前をクリックします。

次の図では、管理コンソールの「デプロイメント」表に、helloWorldEarエンタープライズ・アプリケーションにパッケージ化されているHelloWorldService Webサービスが表示されています。

図7-2 WebLogic Server管理コンソールのメイン・ウィンドウ

図7-2 「WebLogic Server管理コンソールのメイン・ウィンドウ」の説明

Webサービスのセキュリティ構成の作成

メッセージ・レベルのセキュリティ(WS-Security仕様で定義されている暗号化およびデジタル署名)を使用するWebLogic Webサービスがデプロイされている場合、Webサービス・ランタイムでは、このサービスのWebサービス・セキュリティ構成との関連付けについても確認が行われます。このセキュリティ構成では、IDの認証にX.509証明書を使用するかどうか、パスワード・ダイジェストを使用するかどうか、暗号化にキーストアを使用するかどうかなどの情報を指定します。1つのセキュリティ構成を多数のWebサービスに関連付けることができます。

Webサービスのセキュリティ構成はドメイン全体を対象とするため、管理コンソールでは「デプロイメント」タブではなく「domainName」→「Webサービス・セキュリティ」タブから作成します。次の図に、このタブの場所を示します。

図7-3 管理コンソールでのWebサービスのセキュリティ構成

「図7-3 管理コンソールでのWebサービスのセキュリティ構成」の説明

Webサービスとクライアントのモニター

管理コンソールで、Webサービスおよびクライアントの実行時情報(呼出し、エラー、フォルトの数など)をモニターできます。

管理コンソールを使用してWebサービスをモニターするには、左ペインの「デプロイメント」ノードをクリックし、右ペインに表示される「デプロイメント」表でWebサービスがパッケージ化されているエンタープライズ・アプリケーションを探します。「+」ノードをクリックしてアプリケーションを展開すると、「Webサービス」カテゴリにアプリケーション内のWebサービスのリストが表示されます。Webサービスの名前をクリックし、「監視」タブをクリックします。

次の表に、Webサービス情報のモニターを選択できるタブをまとめます。各ページでは、Webサービスが実行されているすべてのサーバーの統計が集計されます。

表7-1 Webサービスのモニター

クリックするタブ

表示される内容

「監視」→「全般」

Webサービスの全般的な統計(エラー総数や呼出し総数など)。

「監視」→「呼出し」

呼出し統計(ディスパッチと実行の回数や平均など)。

「監視」→「WS-Policy」

認証、認可、機密性、整合性のカテゴリに分類された、Webサービスにアタッチされているポリシー。

「監視」→「ポート」

Webサービス・エンドポイント(ポート)をリストした表。この表は、各ポートの情報をまとめたものです。ポート名をクリックすると、クライアント・アプリケーションから呼び出せるパブリック操作が表示されます。

操作ごとに、WebLogic Serverインスタンスの起動後に操作が呼び出された回数、Webサービスの呼出しに要した平均時間、Webサービスが応答に要した平均時間など、実行時の監視情報が表示されます。表に表示される情報をカスタマイズするには、「この表のカスタマイズ」をクリックします。

「監視」→「ポート」→「全般」

Webサービス・エンドポイントの全般的な統計。このページには、Webサービス・エンドポイントの名前、URI、関連付けられているWebサービス、エンタープライズ・アプリケーション、アプリケーション・モジュールなどの情報が表示されます。エラーと呼出しの数は、Webサービス・エンドポイントのすべての操作について集計されます。

「監視」→「ポート」→「呼出し」

Webサービス・エンドポイントの呼出し統計(成功、フォルト、違反の数など)。

「監視」→「ポート」→「WS-Policy」

認証、認可、機密性、整合性のカテゴリに分類された、Webサービス・エンドポイントにアタッチされているポリシーに関連する統計。

「監視」→「ポート」→「操作」

Webサービス・エンドポイントの操作のリスト。操作ごとに、レスポンス、実行およびディスパッチの平均時間、レスポンス、呼出しおよびエラーの回数など、実行時の監視情報が表示されます。表に表示される情報をカスタマイズするには、「この表のカスタマイズ」をクリックします。

注意: JAX-WS Webサービスの場合、組込みのWs-Protocol操作については基礎となるWS-*プロトコルに関連する統計が表示されます。この情報は、アプリケーションのパフォーマンス評価に役立ちます。

操作の名前をクリックすると、詳細が表示されます。「全般」タブまたは「呼出し」タブをクリックすると、選択した操作の全般的な統計または呼出し統計が表示されます。

管理コンソールを使用してWebサービス・クライアントを監視するには、左ペインの「デプロイメント」ノードをクリックし、右ペインに表示される「デプロイメント」表でWebサービスがパッケージ化されているエンタープライズ・アプリケーションを探します。「+」ノードをクリックし、Webサービス・クライアントが存在するアプリケーション・モジュールをクリックします。「監視」タブ>「Webサービス・クライアント」タブの順にクリックします。表に各Webサービス・クライアントの実行時情報のサマリーが表示されます。表のクライアント名をクリックすると、詳細が表示されます。

表7-2

クリックするタブ

表示される内容

「監視」→「全般」

Webサービス・クライアントの全般的な統計(エラーと呼出しの総数など)。このページには、Webサービス・クライアントの名前、関連付けられているエンタープライズ・アプリケーションおよびアプリケーション・モジュール、コンテキスト・ルートなどの情報が表示されます。エラーと呼出しの統計は、Webサービスが実行されているすべてのサーバーについて集計されます。

「監視」→「呼出し」

呼出し統計(ディスパッチと実行の回数や平均など)。

「監視」→「WS-Policy」

認証、認可、機密性、整合性のカテゴリに分類された、Webサービス・クライアントにアタッチされているポリシー。

「監視」→「サーバー」

クライアントが現在実行されているサーバーをリストした表。クライアント名をクリックし、以降の手順のタブを使用すると、そのサーバー上のWebサービス・クライアントの詳細が表示されます。

「監視」→「サーバー」→「全般」

Webサービス・クライアントの全般的な統計。このページには、Webサービス・クライアントのポート、関連付けられているエンタープライズ・アプリケーションおよびアプリケーション・モジュール、コンテキスト・ルートなどの情報が表示されます。エラーと呼出しの数は、Webサービス・クライアントのすべての操作について集計されます。

「監視」→「サーバー」→「呼出し」

Webサービス・クライアントの呼出し統計(成功、フォルト、違反の数など)。

「監視」→「サーバー」→「WS-Policy」

認証、認可、機密性、整合性のカテゴリに分類された、Webサービス・クライアントにアタッチされているポリシーに関連する統計。

「監視」→「サーバー」→「操作」

Webサービス・クライアントの操作のリスト。操作ごとに、レスポンス、実行およびディスパッチの平均時間、レスポンス、呼出しおよびエラーの回数など、実行時の監視情報が表示されます。表に表示される情報をカスタマイズするには、「この表のカスタマイズ」をクリックします。

操作の名前をクリックすると、詳細が表示されます。「全般」タブまたは「呼出し」タブをクリックすると、選択した操作の全般的な統計または呼出し統計が表示されます。

Oracle Enterprise Manager Fusion Middleware Controlの使用

Oracle Enterprise Manager Fusion Middleware Control (Fusion Middleware Control)は、ファームをモニターと管理するために使用するWebブラウザ形式のグラフィカル・ユーザー・インタフェースです。ファームはFusion Middleware Controlによって管理されるコンポーネントの集合です。これは、Oracle WebLogic Serverドメイン、1つまたは複数の管理対象サーバー、およびドメインにインストール化、構成および実行できるOracle Fusion Middlewareシステムのコンポーネントが含まれています。

Fusion Middleware Controlは、様々なパフォーマンス・データおよび管理機能を個別のファームに対するWebベースのホームページ、Oracle WebLogic Serverドメイン、コンポーネントおよびアプリケーションに分割しています。Fusion Middleware Controlのホームページを使用すると、Webブラウザからの重要性の高いモニター・データと最もよく使用される管理機能のすべてを簡単に検索することができます。

次の図は、Fusion Middleware Controlを示します。

図7-4 Oracle Enterprise Manager Fusion Middleware Control

「図7-4 Oracle Enterprise Manager Fusion Middleware Control」の説明

Enterprise Managerを使用してWebサービスをモニターおよびテストする方法の詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のWebLogic Webサービスのセキュリティと管理に関する項を参照してください。

Fusion Middleware Controlは、Oracle Fusion Middleware製品に含まれていますが、Oracle WebLogic Serverのスタンドアロン・バージョンを購入した場合には同梱されていません。Fusion Middleware Controlの詳細は、『Oracle Fusion Middleware管理者ガイド』のOracle Enterprise Manager Fusion Middleware Controlの開始に関する項を参照してください。

WebLogic Scripting Toolの使用

WebLogic Scripting Tool (WLST)は、コマンド・ライン形式のスクリプト・インタフェースで、WebLogic Serverのドメインやインスタンスと対話して構成したり、Java EEモジュールおよびアプリケーション(Webサービスを含む)を特定のWebLogic Serverインスタンスにデプロイする目的で使用します。システム管理者およびオペレータは、WLSTを使用してWebLogic Serverの構成の変更を開始、管理および永続化できます。

通常、Webサービスの管理に使用するWLSTコマンドは、デプロイメント・カテゴリに分類されます。

WLSTの使い方の詳細は、『Oracle Fusion Middleware Oracle WebLogic Scripting Toolガイド』を参照してください。

WebLogic Antタスクの使用

WebLogic Serverには、構成タスクや管理タスクの多くを単一のAntビルド・スクリプトに一元化するのに使用できる様々なAntタスクが用意されています。これらのAntタスクを使用すると、以下のことが行えます。

- wlserverおよびwlconfig Antタスクを使用して、新しいWebLogic Serverドメインを作成、起動、および構成します。

- wldeploy Antタスクを使用して、新しく作成したドメインに、コンパイル済みアプリケーションをデプロイします。

Webサービスに関係のないWebLogic Antタスクに固有の情報については、『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』のAntタスクを使用したWebLogic Serverドメインの構成と使用に関する項およびwldeploy Antタスクのリファレンスの項を参照してください。

Java Management Extensions (JMX)の使用

マネージドBean (MBean)は、Java Management Extensions (JMX)インタフェースを提供するJava Beanです。JMXは、ネットワーク上のリソースをモニターおよび管理するためのJava EEソリューションです。JMXはSNMPおよび他の管理規格と同様に公開された仕様であり、一般的に用いられるモニター用製品を扱うベンダーの多くでサポートされています。

WebLogic Serverには、JMXを使用してWebLogic Serverリソースを構成、モニターおよび管理するための様々なMBeanが用意されています。WebLogic Webサービスにも、Webサービス管理タスクを実行する目的で使用する専用のMBeanが複数あります。

MBeanには、読取り専用のモニター情報の表示に使用する実行時MBeanと、デプロイ済のWebサービスの構成に使用する構成MBeanの2種類があります。

構成WebサービスMBeanは次のとおりです。

- WebserviceSecurityConfigurationMBean

- WebserviceCredentialProviderMBean

- WebserviceSecurityMBean

- WebserviceSecurityTokenMBean

- WebserviceTimestampMBean

- WebserviceTokenHandlerMBean

実行時WebサービスMBeanは次のとおりです。

- WseeRuntimeMBean

- WseeHandlerRuntimeMBean

- WseePortRuntimeMBean

- WseeOperationRuntimeMBean

- WseePolicyRuntimeMBean

JMXの詳細は、Oracle Fusion Middleware Oracle WebLogic Server MBeanリファレンスと、『Oracle Fusion Middleware Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』の次の項を参照してください:

- 「WebLogic Server Mbeanの理解」

- 「JMXを使用したWebLogic Server MBeanへのアクセス」

- 「JMXを使用したドメインの構成の管理」

Java EEデプロイメントAPIの使用

Java EE 5では、J2EE Application Deployment仕様(JSR-88) (http://jcp.org/en/jsr/detail?id=88を参照)により、ターゲット・アプリケーション・サーバー環境へのデプロイメント用にアプリケーションを構成するために使用できる標準APIが定義されています。

この仕様には、Java EE Deploymentアーキテクチャが記述されています。このアーキテクチャでは、ツールやアプリケーション・プログラマがあらゆるJava EEプラットフォーム製品でアプリケーションを構成およびデプロイできるようにするための規約を定義しています。この規約では、アプリケーションのデプロイメント構成とデプロイメントについて、ツールとJava EEプラットフォーム製品の間での共通モデルが定義されています。Deploymentアーキテクチャを使用すると、アプリケーションのデプロイメントがより容易に行えます。多様なJava EEプラットフォーム製品にアプリケーションをデプロイするために、さまざまなJava EEデプロイメント・ツールのすべての機能を理解する必要はありません。

『Oracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイ』を参照してください。

ワーク・マネージャによるWebサービス作業の優先付けとスタック実行スレッドの削減

クライアント・アプリケーションとWebサービスの間の接続が確立されると、理論的にはこれらの間の対話がスムーズかつ迅速になり、クライアントによるリクエストとサービスによるレスポンスが適切なタイミングで行われます。ただし、クライアント・アプリケーションが新しいリクエストを行うのに時間がかかり、その間(最長でWebLogic Serverインスタンスの存続時間の間)、Webサービスが応答を待機する状況が発生することもあります。これは、しばしばスタック実行スレッドと呼ばれます。ある一時点においてスタック実行スレッドが大量に発生すると、サーバー全体のパフォーマンスが低下する可能性があります。

特定のWebサービスが頻繁にこのような状態になる場合は、ワーク・マネージャを構成してサービスに適用することで、そのサービスにおいて作業の実行をどのように優先付けするかを指定できます。たとえば、レスポンス時間リクエスト・クラス(特定のタイプのワーク・マネージャ・コンポーネント)を構成すると、Webサービスのレスポンス時間の目標値を指定できます。

次に、デプロイメント記述子でレスポンス時間リクエスト・クラスを定義する方法の例を示します。

<work-manager>
<name>responsetime_workmanager</name>
<response-time-request-class>
<name>my_response_time</name>
<goal-ms>2000</goal-ms>
</response-time-request-class>
</work-manager>

レスポンス時間リクエスト・クラスは、管理コンソールを使用して構成することができます。Oracle Fusion Middleware Oracle WebLogic Server管理コンソール・ヘルプの「ワーク・マネージャ: レスポンス時間: 構成」を参照してください。

ワーク・マネージャ全般、およびワーク・マネージャをWebサービスに対して構成する方法の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverサーバー環境の構成』のワーク・マネージャを使用したスケジューリング済作業の最適化に関する項を参照してください。

8 WebLogic Webサービスの旧リリースから10.3.xへのアップグレード

この章では、10.3.xより前のWebLogic Server WebサービスをOracle WebLogic Server 11g リリース1 (10.3.x) Webサービスの実行時環境で動作するようにアップグレードする方法を説明します。

この章では、以下のトピックについて説明します。

- 9.2または10.0のWebLogic Webサービスを10.3.xにアップグレード

- 9.0または9.1のWebLogic Webサービスを10.3.xにアップグレード

- 8.1のWebLogic Webサービスを10.3.xにアップグレード

注意:

8.1および9.2のWebサービス・ランタイムはこのリリースでもサポートされるため、8.1および9.2のWebLogic Webサービスは変更しなくてもバージョン10.3.xのWebLogic Serverで引き続き実行できますが、8.1および9.2のWebサービス・ランタイムは非推奨になっており、今後のリリースの製品からは削除される予定です。このため、この章の指示に従って、8.1および9.2のWebサービスを10.3.xにアップグレードすることを強くお薦めします。

8.1のWebサービスをバージョン10.3.xのWebLogic Serverで実行するためには、次のシステム・プロパティを更新する必要があります。

System.setProperty('javax.xml.soap.SOAPFactory',
'weblogic.webservice.core.soap.SOAPFactoryImpl');

10.3.xのWebサービス・アプリケーションがこのシステム・プロパティの設定によって受ける影響を最小限にするには、8.1のWebサービスおよびクライアントを10.3.xのWebサービスおよびクライアントとは別のサーバーにデプロイすることをお薦めします。

9.2または10.0のWebLogic Webサービスを10.3.xにアップグレード

9.2または10.xのWebLogic Webサービスを10.3.xにアップグレードするために必要な手順はありません。該当Webサービスは、変更や再コンパイルを行わずにWebLogic Server 10.3.xに再デプロイできます。

9.0または9.1のWebLogic Webサービスを10.3.xにアップグレード

9.0または9.1のWebサービスで次のいずれかの機能を使用していた場合、WebLogic Server 10.3.xに再デプロイする前にWebサービスを再コンパイルする必要があります。

- 会話

- @weblogic.jws.Context JWSアノテーション

- weblogic.wsee.jws.JwsContext API

再コンパイルするには、Webサービスを実装するJWSファイルに対してjwsc Antタスクを再実行するだけです。

9.0または9.1のWebサービスでこれらの機能を使用していなかった場合、変更や再コンパイルを行わずにWebLogic Server 10.3.xに再デプロイできます。

8.1のWebLogic Webサービスを10.3.xにアップグレード

この項では、新しいバージョン10.3.xのWebサービス実行時環境を使用するように8.1 WebLogic Webサービスをアップグレードする方法を説明します。10.3.xのランタイムは、Web Services for Java EE 1.2仕様(http://www.jcp.org/en/jsr/detail?id=109)に基づいています。10.3.xのプログラミング・モデルでは、Web Services Metadata for the Java Platform仕様(JSR-181)(http://www.jcp.org/en/jsr/detail?id=181)で指定される標準JDK 1.5メタデータ・アノテーションを使用します。

注意:

8.1のWebサービス・ランタイムは10.3.xでもサポートされるため、8.1のWebLogic Webサービスは変更しなくてもバージョン10.3.xのWebLogic Serverで引き続き実行できますが、8.1のWebサービス・ランタイムは非推奨になっており、今後のリリースの製品からは削除される予定です。このため、この章の指示に従って、8.1のWebサービスを10.3.xにアップグレードすることを強くお薦めします。

8.1のWebサービスのアップグレードで行うタスクを大まかにまとめると次のようになります。以降の項の手順では、より詳しく説明します。

- Webサービスを実装するJavaクラスやステートレス・セッションEJBの8.1のJavaソース・コードを、JWSアノテーションを使用するように更新します。
10.3.xでは、WebLogic Webサービスは、JWSファイル(JWSアノテーションを含むJavaファイル)を使用して実装します。jwsc Antタスクは、常にWebサービスをプレーンJavaファイルとして実装します(ただし、JWSファイルに明示的にjavax.ejb.SessionBeanを実装する場合を除きます)。後者のケースは一般的ではありません。このプログラミング・モデルは、バックエンド・コンポーネントの種類(JavaクラスかEJBか)の指定が必要だった8.1のモデルとは異なります。

- WebサービスをビルドするAntビルド・スクリプトを、8.1のservicegenタスクではなく10.3.xのWebLogic WebサービスAntタスクjwscを呼び出すように更新します。

以下の項では、次のことが前提となっています。

- 8.1のWebサービスの生成にservicegenを使用したことがあり、より全般的には、WebLogic Serverで動作するWebサービスやその他のJava Platform, Enterprise Edition (Java EE)バージョン5アーティファクトを、開発環境でAntスクリプトを使用して繰り返し開発しています。この項の手順では、既存のAnt build.xmlファイルを更新する方法を説明します。

- 8.1のWebサービスのJavaクラスまたはEJBのソース・コードにアクセスできます。

この項では、以下の内容については説明しません。

- JMS実装の8.1 Webサービスのアップグレード(10.3.xのWebLogic Webサービス・ランタイムは、JMS実装のサービスをサポートしていないためです)。

- 8.1より前のバージョンのWebサービスのアップグレード。

- 8.1のWebサービスを呼び出すクライアント・アプリケーションから10.3.xのWebサービスを呼び出すクライアント・アプリケーションへのアップグレード。10.3.xのWebサービスを呼び出すクライアント・アプリケーションの記述方法の詳細は、第6章「Webサービスの呼出し」を参照してください。

Javaクラス実装の8.1のWebLogic Webサービスを10.3.xにアップグレード: 主な手順

8.1 Javaクラス実装のWebサービスを、10.3.x WebLogic Webサービス・ランタイムを使用するようにアップグレードするには:

1. コマンド・ウィンドウを開き、10.3.xのドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd(Windows)またはsetDomainEnv.sh(UNIX)スクリプトを実行して、WebLogic Server 10.3.x環境を設定します。
WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. プロジェクト・ディレクトリを作成します。

prompt> mkdir /myExamples/upgrade_pojo

3. プロジェクト・ディレクトリの下に、srcディレクトリと、古い8.1のJavaクラスに対応する新しい10.3.xのJWSファイル(この手順で後述)のパッケージ名に相当するサブディレクトリを作成します。

prompt> cd /myExamples/upgrade_pojo
prompt> mkdir src/examples/webservices/upgrade_pojo

4. 8.1のWebサービスを実装する古いJavaクラスを、作業ディレクトリのsrc/examples/webservices/upgrade_pojoディレクトリにコピーします。必要に応じてファイル名を変更してください。

5. 次の手順に従ってJavaファイルを編集します。具体的な例については、「8.1のJavaファイルと対応する10.3.xのJWSファイルの例」にある新旧のサンプルJavaファイルを参照してください。

1. 必要に応じて、新しい10.3.xのソース環境を反映するようにJavaファイルのパッケージ名とクラス名を変更します。

2. import文を追加して、標準およびWebLogic固有のJWSアノテーションがインポートされるようにします。

3. 少なくとも、次のJWSアノテーションを追加します。

- JWSファイルがWebサービスを実装することを指定する標準の@WebServiceアノテーション(Javaクラス・レベルで追加)。
以下のアノテーションも追加することをお薦めします。

- Webサービスの種類(document-literal-wrapped、RPC-encodedなど)を指定する標準の@SOAPBindingアノテーション(クラス・レベルで追加)。

- デプロイされたWebサービスを呼び出すURLで使用されるコンテキストとサービスURIを指定するWebLogic固有の@WLHttpTransportアノテーション(クラス・レベルで追加)。

- 標準の@WebMethodアノテーション(Webサービス操作として公開されるメソッドごとにメソッド・レベルで追加)。
JavaファイルでのJWSアノテーションの使用に関する概要については、第4章「JWSファイルのプログラミング」を参照してください。

4. 10.3.xに繰越す8.1 Webサービス機能によっては、アノテーションをJWSファイルに追加する必要があります。8.1では、このような機能の多くはservicegen属性を使用して構成されていました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表に、8.1でservicegenの属性を使用して有効にしていた機能に対応するJWSアノテーションをまとめてあります(相当するアノテーションがある場合のみ)。

6. 8.1のWebサービスのビルドに使用していた古いbuild.xmlファイルを10.3.xの作業ディレクトリにコピーします。

7. Ant build.xmlファイルを更新して、servicegenのかわりにjwsc Antタスクとその他のサポート・タスクが実行されるようにします。
Antビルド・ファイルでbuild-serviceなどの新しいターゲットを作成し、前の手順で作成した新しいJWSファイルをコンパイルするjwsc Antタスク呼出しを追加することをお薦めします。このターゲットがいったん正常に機能すれば、古いservicegen Antタスクは削除できます。

次に示す手順は、build.xmlファイルを更新する際の主な手順です。詳細な手順については、第3章「WebLogic Webサービスの開発」で説明する標準の反復開発プロセスを参照してください。

次の各手順の例については、「8.1と更新された10.3.xのAntビルド・ファイルの例(Javaクラス実装のWebサービス)」を参照してください。

1. jwsc taskdefをbuild.xmlファイルに追加します。

2. build-serviceターゲットを作成し、この後の手順に従って10.3.xのWebサービスをビルドするのに必要なタスクを追加します。

3. jwscタスクをビルド・ファイルに追加します。srdir属性にsrcディレクトリ(この例では/myExamples/upgrade_pojo/src)を設定し、destdir属性に前の手順で作成したエンタープライズ・アプリケーションのルート・ディレクトリを設定します。
<jws>子要素のfile属性に、前の手順で作成した新しいJWSファイルの名前を指定します。

10.3.xに繰越す8.1 Webサービス機能によっては、追加属性をjwscタスクに指定する必要があります。8.1では、このような機能の多くはservicegen属性を使用して構成されていました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表で、servicegenの属性を使用して有効にしていた機能に相当するjwsc属性があるかどうかについて説明しています。

8. build-service Antターゲットを実行します。すべてのタスクを正しく完了すると、アップグレードされた10.3.xのWebサービスがエンタープライズ・アプリケーションに含まれます。

Webサービスのデプロイとテストの詳細は、「WebLogic Webサービスのデプロイとアンデプロイ」および「WebサービスのWSDLの参照」を参照してください。

次の各項に示すサンプルJavaコードの場合、アップグレードされた10.3.xのWebサービスのWSDLを呼び出すURLは次のようになります。

http://host:port/upgradePOJO/HelloWorld?WSDL

8.1のJavaファイルと対応する10.3.xのJWSファイルの例

次のサンプルJavaクラスが8.1のWebサービスを実装していたものと仮定します。

package examples.javaclass;
/**
* Simple Java class that implements the HelloWorld Web service.   It takes
* as input an integer and a String, and returns a message that includes these
* two parameters.
*/
public final class HelloWorld81 {
/**
* Returns a text message that includes the integer and String input
* parameters.
*
*/
public String sayHello(int num, String s) {
System.out.println("sayHello operation has been invoked with arguments " + s + " and " + num);
String returnValue = "This message brought to you by the letter "+s+" and the number "+num;
return returnValue;
}
}

これに対応するものとして、Javaクラス実装の10.3.x WebサービスのJWSファイルを次に示します(相違点が太字で示されています)。一部のJWSアノテーションの値が、「8.1と更新された10.3.xのAntビルド・ファイルの例(Javaクラス実装のWebサービス)」に示す8.1のservicegen Antタスクの属性から取得されている点に注意してください。

package examples.webservices.upgrade_pojo;
// Import standard JWS annotations
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
// Import WebLogic JWS anntoation
import weblogic.jws.WLHttpTransport;
/**
* Simple Java class that implements the HelloWorld92 Web service.   It takes
* as input an integer and a String, and returns a message that includes these
* two parameters.
*/
@WebService(name="HelloWorld92PortType", serviceName="HelloWorld",
targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@WLHttpTransport(contextPath="upgradePOJO", serviceUri="HelloWorld",
portName="HelloWorld92Port")
public class HelloWorld92Impl {
/**
* Returns a text message that includes the integer and String input
* parameters.
*
*/
@WebMethod()
public String sayHello(int num, String s) {
System.out.println("sayHello operation has been invoked with arguments " + s + " and " + num);
String returnValue = "This message brought to you by the letter "+s+" and the number "+num;
return returnValue;
}
}

8.1と更新された10.3.xのAntビルド・ファイルの例(Javaクラス実装のWebサービス)

次の単純なbuild.xmlファイルでは、8.1でservicegen Antタスクを使用してWebLogic Webサービスをビルドする方法を示します。この例では、8.1のWebサービスを実装するJavaファイルがすでにexamples.javaclass.HelloWorld81クラスにコンパイルされています。

<project name="javaclass-webservice" default="all" basedir=".">
<!-- set global properties for this build -->
<property name="source" value="."/>
<property name="build" value="${source}/build"/>
<property name="war_file" value="HelloWorldWS.war" />
<property name="ear_file" value="HelloWorldApp.ear" />
<property name="namespace" value="http://examples.org" />
<target name="all" depends="clean, ear"/>
<target name="clean">
<delete dir="${build}"/>
</target>
<!-- example of old 8.1 servicegen call to build Web Service -->
<target name="ear">
<servicegen
destEar="${build}/${ear_file}"
warName="${war_file}">
<service
javaClassComponents="examples.javaclass.HelloWorld81"
targetNamespace="${namespace}"
serviceName="HelloWorld"
serviceURI="/HelloWorld"
generateTypes="True"
expandMethods="True">
</service>
</servicegen>
</target>
</project>

これに対応するものとして、jwsc Antタスクを呼び出して10.3.xのWebサービスをビルドするbuild.xmlファイルを次に示します(この項で説明する該当タスクは太字で示してあります)。この例では、10.3.xのWebサービスを実装する新しいJWSファイルにHelloWorld92Impl.javaという名前が付けられています。

<project name="webservices-upgrade_pojo" default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="upgradePOJOEar" />
<property name="example-output" value="output" />
<property name="ear-dir" value="${example-output}/upgradePOJOEar" />
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all" depends="clean,build-service,deploy" />
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/upgrade_pojo/HelloWorld92Impl.java" />
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy" name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="undeploy">
<wldeploy action="undeploy" name="${ear.deployed.name}"
failonerror="false"
user="${wls.username}" password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
</project>

EJB実装の8.1のWebLogic Webサービスを10.3.xにアップグレード: 主な手順

次の手順では、10.3.xのWebLogic Webサービス・ランタイムを使用するようにEJB実装の8.1 Webサービスをアップグレードする方法について説明します。

10.3.xのWebサービスのプログラミング・モデルは、Webサービスの基底の実装を隠す点で8.1のモデルとはまったく異なります。WebサービスをJavaクラスで実装するかEJBで実装するかを前もって指定するのではなく、JWSファイルに明示的にjavax.ejb.SessionBeanを実装しないかぎり(一般的には実装しない)、jwsc Antタスクで常にプレーンJavaクラス実装が選択されます。このため、8.1のWebサービスは明示的にEJBで実装されていましたが、次の手順ではEJBクラスをインポートする方法やEJBGenを使用する方法は示されていません。かわりに、EJB実装の8.1のWebサービスに対応する10.3.xの標準的なJWSファイルを作成する方法を示します。

1. コマンド・ウィンドウを開き、10.3.xのドメイン・ディレクトリのbinサブディレクトリにあるsetDomainEnv.cmd(Windows)またはsetDomainEnv.sh(UNIX)スクリプトを実行して、WebLogic Server 10.3.x環境を設定します。
WebLogic Serverドメインのデフォルトの場所は、MW_HOME/user_projects/domains/domainNameです。MW_HOMEはOracle製品の最上位のインストール・ディレクトリ、domainNameはドメインの名前です。

2. プロジェクト・ディレクトリを作成します。

prompt> mkdir /myExamples/upgrade_ejb

3. プロジェクト・ディレクトリの下に、srcディレクトリと、8.1のEJB実装に対応する新しい10.3.xのJWSファイル(この手順で後述)のパッケージ名に相当するサブディレクトリを作成します。

prompt> cd /myExamples/upgrade_ejb
prompt> mkdir src/examples/webservices/upgrade_ejb

4. javax.ejb.SessionBeanを実装していた8.1 EJB Beanファイルを、作業ディレクトリのsrc/examples/webservices/upgrade_ejbディレクトリにコピーします。必要に応じてファイル名を変更してください。

注意:

8.1のホームおよびリモートEJBファイルをコピーする必要はありません。

5. 次の手順に従ってEJB Beanファイルを編集します。具体的な例については、「8.1のEJBファイルと対応する10.3.xのJWSファイルの例」にある新旧のサンプルJavaファイルを参照してください。

1. 必要に応じて、新しい10.3.xのソース環境を反映するようにJavaファイルのパッケージ名とクラス名を変更します。

2. 必要に応じて、EJBクラス(javax.ejb.*)をインポートするimport文を削除します。これらのクラスは、アップグレード後のJWSファイルでは必要ありません。

3. import文を追加して、標準およびWebLogic固有のJWSアノテーションがインポートされるようにします。

4. JWSファイルのクラス宣言からimplements SessionBeanコードを削除して、それ以降javax.ejb.SessionBeanが実装されないようにします。

5. EJB固有のメソッドをすべて削除します。

- ejbActivate()

- ejbRemove()

- ejbPassivate()

- ejbCreate()

6. 少なくとも、次のJWSアノテーションを追加します。

- JWSファイルがWebサービスを実装することを指定する標準の@WebServiceアノテーション(Javaクラス・レベルで追加)。
以下のアノテーションも追加することをお薦めします。

- Webサービスの種類(document-literal-wrapped、RPC-encodedなど)を指定する標準の@SOAPBindingアノテーション(クラス・レベルで追加)。

- デプロイされたWebサービスを呼び出すURLで使用されるコンテキストとサービスURIを指定するWebLogic固有の@WLHttpTransportアノテーション(クラス・レベルで追加)。

- 標準の@WebMethodアノテーション(Webサービス操作として公開されるメソッドごとにメソッド・レベルで追加)。

JavaファイルでのJWSアノテーションの使用に関する概要については、第4章「JWSファイルのプログラミング」を参照してください。

7. 10.3.xに繰越す8.1 Webサービス機能によっては、アノテーションをJWSファイルに追加する必要があります。8.1では、このような機能の多くはservicegen属性を使用して構成されていました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表に、8.1でservicegenの属性を使用して有効にしていた機能に対応するJWSアノテーションをまとめてあります(相当するアノテーションがある場合のみ)。

6. 8.1のWebサービスのビルドに使用していた古いbuild.xmlファイルを10.3.xの作業ディレクトリにコピーします。

7. Ant build.xmlファイルを更新して、servicegenのかわりにjwsc Antタスクとその他のサポート・タスクが実行されるようにします。
Antビルド・ファイルでbuild-serviceなどの新しいターゲットを作成し、前の手順で作成した新しいJWSファイルをコンパイルするjwsc Antタスク呼出しを追加することをお薦めします。このターゲットがいったん正常に機能すれば、古いservicegen Antタスクは削除できます。

次に示す手順は、build.xmlファイルを更新する際の主な手順です。詳細な手順については、標準の反復開発プロセスを参照してください。

次の各手順の例については、「8.1と更新された10.3.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)」を参照してください。

1. jwsc taskdefをbuild.xmlファイルに追加します。

2. build-serviceターゲットを作成し、この後の手順に従って10.3.xのWebサービスをビルドするのに必要なタスクを追加します。

3. jwscタスクをビルド・ファイルに追加します。srdir属性にsrcディレクトリ(この例では/myExamples/upgrade_ejb/src)を設定し、destdir属性に前の手順で作成したエンタープライズ・アプリケーションのルート・ディレクトリを設定します。
<jws>子要素のfile属性に、前の手順で作成した新しいJWSファイルの名前を指定します。

10.3.xに繰越す8.1 Webサービス機能によっては、追加属性をjwscタスクに指定する必要があります。8.1では、このような機能の多くはservicegen属性を使用して構成されていました。「servicegen属性とJWSアノテーションまたはjwsc属性のマッピング」の表に、servicegenの属性を使用して有効にしていた機能に対応するjwsc属性があるかどうかを示しています。

8. build-service Antターゲットを実行します。すべてのタスクを正しく完了すると、アップグレードされた10.3.xのWebサービスがエンタープライズ・アプリケーションに含まれます。

Webサービスのデプロイとテストの詳細は、「WebLogic Webサービスのデプロイとアンデプロイ」および「WebサービスのWSDLの参照」を参照してください。

次の各項に示すサンプルJavaコードの場合、アップグレードされた10.3.xのWebサービスのWSDLを呼び出すURLは次のようになります。

http://host:port/upgradeEJB/HelloWorldService?WSDL

8.1のEJBファイルと対応する10.3.xのJWSファイルの例

次の3つの項に示すBean、ホームおよびリモートのクラスとインタフェースが8.1のステートレス・セッションEJB(つまり8.1のWebサービス)を実装していたものと仮定します。

「対応する10.3.xのJWSファイル」に、対応する10.3.xのJWSファイルを示します。8.1のクラスと10.3.xのクラスの相違点は太字で示しています。一部のJWSアノテーションの値が、「8.1と更新された10.3.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)」に示す8.1のservicegen Antタスクの属性から取得されている点に注意してください。

8.1 SessionBeanクラス

package examples.statelessSession;
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* HelloWorldBean is a stateless session EJB.  It has a single method,
* sayHello(), that takes an integer and a String and returns a String.
* <p>
* The sayHello() method is the public operation of the Web service based on
* this EJB.
*/
public class HelloWorldBean81 implements SessionBean {
private static final boolean VERBOSE = true;
private SessionContext ctx;
// You might also consider using WebLogic's log service
private void log(String s) {
if (VERBOSE) System.out.println(s);
}
/**
*   Single EJB business method.
*/
public String sayHello(int num, String s) {
System.out.println("sayHello in the HelloWorld EJB has "+
"been invoked with arguments " + s + " and " + num);
String returnValue = "This message brought to you by the "+
"letter "+s+" and the number "+num;
return returnValue;
}
/**
* This method is required by the EJB Specification,
* but is not used by this example.
*
*/
public void ejbActivate() {
log("ejbActivate called");
}
/**
* This method is required by the EJB Specification,
* but is not used by this example.
*
*/
public void ejbRemove() {
log("ejbRemove called");
}
/**
* This method is required by the EJB Specification,
* but is not used by this example.
*
*/
public void ejbPassivate() {
log("ejbPassivate called");
}
/**
* Sets the session context.
*
* @param ctx SessionContext Context for session
*/
public void setSessionContext(SessionContext ctx) {
log("setSessionContext called");
this.ctx = ctx;
}
/**
* This method is required by the EJB Specification,
* but is not used by this example.
*
*/
public void ejbCreate () throws CreateException {
log("ejbCreate called");
}
}

8.1リモート・インタフェース

package examples.statelessSession;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
/**
* The methods in this interface are the public face of HelloWorld.
* The signatures of the methods are identical to those of the EJBean, except
* that these methods throw a java.rmi.RemoteException.
*/
public interface HelloWorld81 extends EJBObject {
/**
* Simply says hello from the EJB
*
* @param num               int number to return
* @param s                 String string to return
* @return                  String returnValue
* @exception               RemoteException if there is
*                          a communications or systems failure
*/
String sayHello(int num, String s)
throws RemoteException;
}

8.1 EJBホーム・インタフェース

package examples.statelessSession;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
/**
* This interface is the Home interface of the HelloWorld stateless session EJB.
*/
public interface HelloWorldHome81 extends EJBHome {
/**
* This method corresponds to the ejbCreate method in the
* HelloWorldBean81.java file.
*/
HelloWorld81 create()
throws CreateException, RemoteException;
}

対応する10.3.xのJWSファイル

8.1のファイルと10.3.xのファイルの相違点は太字で示してあります。一部のJWSアノテーションの値は、「8.1と更新された10.3.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)」に示す8.1のservicegen Antタスクの属性から取得されています。

package examples.webservices.upgrade_ejb;
// Import the standard JWS annotations
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// Import the WebLogic specific annotation
import weblogic.jws.WLHttpTransport;
// Class-level annotations
@WebService(name="HelloWorld92PortType", serviceName="HelloWorldService",
targetNamespace="http://example.org")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
@WLHttpTransport(contextPath="upgradeEJB", serviceUri="HelloWorldService",
portName="HelloWorld92Port")
/**
* HelloWorld92Impl is the JWS equivalent of the HelloWorld81 EJB that
* implemented the 8.1 Web Service.  It has a single method,
* sayHello(), that takes an integer and a String and returns a String.
*/
public class HelloWorld92Impl {
/** the sayHello method will become the public operation of the Web
*  Service.
*/
@WebMethod()
public String sayHello(int num, String s) {
System.out.println("sayHello in the HelloWorld92 Web Service has "+
"been invoked with arguments " + s + " and " + num);
String returnValue = "This message brought to you by the "+
"letter "+s+" and the number "+num;
return returnValue;
}
}

8.1と更新された10.3.xのAntビルド・ファイルの例(EJB実装の8.1のWebサービス)

次の単純なbuild.xmlファイルでは、8.1でservicegen Antタスクを使用してEJB実装のWebLogic Webサービスをビルドする方法を示します。この例の後に、jwsc Antタスクを呼び出して10.3.xのWebサービスをビルドする場合の、対応するbuild.xmlファイルを示します。

<project name="ejb-webservice" default="all" basedir=".">
<!-- set global properties for this build -->
<property name="source" value="."/>
<property name="build" value="${source}/build"/>
<property name="ejb_file" value="HelloWorldWS.jar" />
<property name="war_file" value="HelloWorldWS.war" />
<property name="ear_file" value="HelloWorldApp.ear" />
<property name="namespace" value="http://examples.org" />
<target name="all" depends="clean,ear"/>
<target name="clean">
<delete dir="${build}"/>
</target>
<!-- example of old 8.1 servicegen call to build Web Service -->
<target name="ejb">
<delete dir="${build}" />
<mkdir dir="${build}"/>
<mkdir dir="${build}/META-INF"/>
<copy todir="${build}/META-INF">
<fileset dir="${source}">
<include name="ejb-jar.xml"/>
</fileset>
</copy>
<javac srcdir="${source}" includes="HelloWorld*.java"
destdir="${build}" />
<jar jarfile="${ejb_file}" basedir="${build}" />
<wlappc source="${ejb_file}" />
</target>
<target name="ear" depends="ejb">
<servicegen
destEar="${build}/${ear_file}"
warName="${war_file}">
<service
ejbJar="${ejb_file}"
targetNamespace="${namespace}"
serviceName="HelloWorldService"
serviceURI="/HelloWorldService"
generateTypes="True"
expandMethods="True">
</service>
</servicegen>
</target>
</project>

これに対応するものとして、jwsc Antタスクを呼び出して10.3.xのWebサービスをビルドするbuild.xmlファイルを次に示します(この項で説明する該当タスクは太字で示してあります)。

<project name="webservices-upgrade_ejb" default="all">
<!-- set global properties for this build -->
<property name="wls.username" value="weblogic" />
<property name="wls.password" value="weblogic" />
<property name="wls.hostname" value="localhost" />
<property name="wls.port" value="7001" />
<property name="wls.server.name" value="myserver" />
<property name="ear.deployed.name" value="upgradeEJB" />
<property name="example-output" value="output" />
<property name="ear-dir" value="${example-output}/upgradeEJB" />
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<taskdef name="wldeploy"
classname="weblogic.ant.taskdefs.management.WLDeploy"/>
<target name="all" depends="clean,build-service,deploy" />
<target name="clean" depends="undeploy">
<delete dir="${example-output}"/>
</target>
<target name="build-service">
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/upgrade_ejb/HelloWorld92Impl.java" />
</jwsc>
</target>
<target name="deploy">
<wldeploy action="deploy" name="${ear.deployed.name}"
source="${ear-dir}" user="${wls.username}"
password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
<target name="undeploy">
<wldeploy action="undeploy" name="${ear.deployed.name}"
failonerror="false"
user="${wls.username}" password="${wls.password}" verbose="true"
adminurl="t3://${wls.hostname}:${wls.port}"
targets="${wls.server.name}" />
</target>
</project>

servicegen属性とJWSアノテーションまたはjwsc属性のマッピング

次の表に、8.1のservicegen Antタスクの属性と、それに対応する10.3.xのJWSアノテーションまたはjwsc属性を示します。

最初の列には、メインのservicegen Antタスクの属性と、servicegenの4つの子要素(<service>、<client>、<handlerChain>、および<security>)の属性が混在しています。

10.3.xのJWSアノテーションとjwsc Antタスクの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービス・リファレンス』のJWSアノテーション・リファレンスの項とjwscに関する項を参照してください。

表8-1 servicegen属性とJWSアノテーションまたはjwsc属性のマッピング

servicegenまたはservicegenの子要素の属性

対応するJWSアノテーションまたはjwsc属性

contextURI

WebLogic固有の@WLHttpTransportアノテーションのcontextPath属性。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

destEAR

jwsc Antタスクのdestdir属性。

keepGenerated

jwsc AntタスクのkeepGenerated属性。

mergeWithExistingWS

相当するものはありません。

overwrite

相当するものはありません。

warName

jwsc Antタスクの<jws>子要素のname属性。

ejbJAR

(service子要素の属性)

jwsc Antタスクは、コンパイルされたEJBまたはJavaクラスからではなく、JWSファイルからWebサービス・アーティファクトを生成するため、直接的に対応するものはありません。

間接的に対応するのは、JWSファイルの名前を指定するjwsc Antタスクの<jws>子要素のfile属性。

excludeEJBs

(service子要素の属性)

相当するものはありません。

expandMethods

(service子要素の属性)

相当するものはありません。

generateTypes

(service子要素の属性)

相当するものはありません。

ignoreAuthHeader

(service子要素の属性)

相当するものはありません。

includeEJBs

(service子要素の属性)

相当するものはありません。

javaClassComponents

(service子要素の属性)

jwsc Antタスクは、コンパイルされたEJBまたはJavaクラスからではなく、JWSファイルからWebサービス・アーティファクトを生成するため、直接的に対応するものはありません。

間接的に対応するのは、JWSファイルの名前を指定するjwsc Antタスクの<jws>子要素のfile属性。

JMSAction

(service子要素の属性)

JMS実装のWebサービスは10.3.xリリースではサポートされないため、対応するものはありません。

JMSConnectionFactory

(service子要素の属性)

JMS実装のWebサービスは10.3.xリリースではサポートされないため、対応するものはありません。

JMSDestination

(service子要素の属性)

JMS実装のWebサービスは10.3.xリリースではサポートされないため、対応するものはありません。

JMSDestinationType

(service子要素の属性)

JMS実装のWebサービスは10.3.xリリースではサポートされないため、対応するものはありません。

JMSMessageType

(service子要素の属性)

JMS実装のWebサービスは10.3.xリリースではサポートされないため、対応するものはありません。

JMSOperationName

(service子要素の属性)

JMS実装のWebサービスは10.3.xリリースではサポートされないため、対応するものはありません。

protocol

(service子要素の属性)

以下のいずれかのWebLogic固有アノテーション。

- @WLHttpTransport

- @WLJmsTransport

注意: これらはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

serviceName

(service子要素の属性)

標準の@WebServiceアノテーションのserviceName属性。

serviceURI

(service子要素の属性)

WebLogic固有の@WLHttpTransportまたは@WLJmsTransportアノテーションのserviceUri属性。

注意: これらはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

style

(service子要素の属性)

標準の@SOAPBindingアノテーションのstyle属性。

typeMappingFile

(service子要素の属性)

相当するものはありません。

targetNamespace

(service子要素の属性)

標準の@WebServiceアノテーションのtargetNamespace属性。

userSOAP12

(service子要素の属性)

WebLogic固有の@weblogic.jws.Binding JWSアノテーションのvalue属性。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

clientJarName

(client子要素の属性)

相当するものはありません。

packageName

(client子要素の属性)

直接的に相当するものはありません。

クライアント側Javaコードおよびアーティファクトを生成するには、clientgen AntタスクのpackageName属性を使用します。

saveWSDL

(client子要素の属性)

相当するものはありません。

userServerTypes

(client子要素の属性)

相当するものはありません。

handlers

(handlerChain子要素の属性)

標準の@HandlerChainまたは@SOAPMessageHandlersアノテーション。

name

(handlerChain子要素の属性)

標準の@HandlerChainまたは@SOAPMessageHandlersアノテーション。

duplicateElimination

(reliability子要素の属性)

直接的に相当するものはありません。

Webサービスの信頼性のあるメッセージングのポリシー・アサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPCを使用したWebサービスの高度な機能のプログラミング』のWebサービスの信頼性のあるメッセージングの使用に関する項を参照してください。

persistDuration

(reliability子要素の属性)

直接的に相当するものはありません。

Webサービスの信頼性のあるメッセージングのポリシー・アサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

このリリースでは、対応する属性はJAX-RPC Webサービスに対してのみ有効です。『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPCを使用したWebサービスの高度な機能のプログラミング』のWebサービスの信頼性のあるメッセージングの使用に関する項を参照してください。

enablePasswordAuth

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

encryptKeyName

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

encryptKeyPass

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

password

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

signKeyName

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

signKeyPass

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

username

(security子要素の属性)

直接的に相当するものはありません。

メッセージ・レベルのセキュリティ・ポリシーのアサーションを含むWS-Policyファイルを指定するには、WebLogic固有の@Policy属性を使用します。

注意: これはWebLogic固有のアノテーションであるため、JAX-RPC Webサービスの生成にのみ使用可能であり、JAX-WS Webサービスの生成には使用できません。

『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの保護』のメッセージ・レベルのセキュリティの構成に関する項を参照してください。

Copyright © 2007, 2013, Oracle and/or its affiliates. All rights reserved.