![]() ![]() ![]() ![]() |
以下のトピックでは、JAX-WS 2.0 Web サービスを実装する理由とその方法について説明します。
Java API for XML-Based RPC (JAX-RPC) 1.1 と Java API for XML Web Services (JAX-WS) 2.0 は双方とも、このリリースの WebLogic Server でサポートされていますが、WebLogic Web サービスのドキュメントでは、ほぼ JAX-RPC ベースの Web サービスの作成方法のみに絞って説明します。なぜなら、すべての WS-* 仕様 (WS-Security、WS-ReliableMessaging など) および付加価値の高い WebLogic の機能 (非同期の要求と応答、コールバックなど) が、JAX-RPC 形式の Web サービスでのみ有効であるからです。このため、特に JAX-WS Web サービスを作成する必要がある場合を除いて、WebLogic Server で提供されるすべての機能を完全に利用できるよう、JAX-RPC サービスを作成することが前提となっています。ただしこの節では、JAX-WS 2.0 Web サービスを実装する理由とその方法について説明します。
JAX-WS 2.0 に基づく Web サービスを実装する理由としては、次のようなものが挙げられます。
一方、JAX-RPC 形式の Web サービスで使用できる組み込みデータ型やユーザ定義のデータ型は、広範ではありますが、「データ型とデータ バインディング」で説明されているものに限定されます。
一方、JAX-RPC 1.1 Web サービスでは、SOAP ハンドラしかプログラミングできませんでした。
xs:base64Binary
や xs:hexBinary
などの XML バイナリ データを、ネットワーク上で最適に転送する方法を定義します。注意 : | このリリースの WebLogic Server では、MTOM は JAX-RPC 1.1 形式の Web サービスに関してもサポートされます。 |
JAX-WS Web サービスの前述の機能のプログラミングに関する、その他のドキュメントおよびサンプルについては、java.net の「JAX-WS 2.0 User's Guide」を参照してください。
JAX-WS Web サービスの実装は、JAX-RPC Web サービスの実装に類似しており、大部分については、「WebLogic Web サービスの反復的な開発」に記載の手順で実行できます。しかし、下記のように、いくつかの相違点があります。
jwsc
、wsdlc
、または clientgen
Ant タスク使用時には、必ず新しい type
属性を使用して、このタスクがデフォルトの JAX-RPC Web サービスではなく、JAX-WS Web サービスのためのクライアントサイド アーティファクトをコンパイルまたは生成することを指定する。例については、「jwsc Ant タスクと clientgen Ant タスクに対する JAX-WS Web サービスの指定」を参照してください。
以下の節では、JAX-WS Web サービスの簡単な実装例を示します。
以下の Java ファイルでは、JAX-WS Web サービスの簡単な実装例を示します。
この例では、標準的な @javax.jws.WebService
アノテーションを使用して、これが Web サービスであることを宣言し、次に共通の @javax.annotation.Resource
アノテーションを使用して、Web サービスのコンテキストを context
変数に注入します。このコンテキストにより、Web サービスの情報 (この場合はサービスを呼び出すプリンシパル ユーザ) に関する情報を取得できます。
package examples.webservices.jaxws;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.annotation.Resource;
@WebService()
/**
* 簡単な JAX-WS WebLogic Web サービスの基本となる JWS ファイル
*
*/
public class JaxWsImpl {
@Resource
private WebServiceContext context;
public String sayHello(String message) {
String principal = context.getUserPrincipal().getName();
System.out.println("Hello!Here is the passed=in message: " + message + ".And here is the user principal: " + principal + ".");
return "Here is the message: '" + message + "'.And here is the user principal: '" + principal + "'."
}
}
build.xml
Ant ビルド ファイルからの以下の抜粋では、jwsc
Ant タスクの type
属性を使用して、このタスクがデフォルトの JAX-RPC サービスではなく、JAX-WS Web サービスを生成することを指定する方法を示します。
<jwsc
srcdir="src"
destdir="${ear-dir}">
<jws file="examples/webservices/jaxws/JaxWsImpl.java"
type="JAXWS"
/>
</jwsc>
同様に、以下の clientgen
に対する呼び出しでは、タスクが JAX-WS Web サービスの呼び出しに使用されるクライアントサイド アーティファクトを生成することを指定する方法を示します。
<clientgen
type="JAXWS"
wsdl="http://${wls.hostname}:${wls.port}/JaxWsImpl/JaxWsImplService?WSDL"
destDir="${clientclass-dir}"
packageName="examples.webservices.jaxws.client"/>
以下の簡単なスタンドアロン Java クライアントでは、ここまでの各節で実装された Web サービスを呼び出す方法を示します。
package examples.webservices.jaxws.client;
/**
* JaxWs Web サービスの sayHello オペレーションを呼び出す
* 簡単なスタンドアロンのクライアント アプリケーション
*
* @author Copyright (c) 2004 by BEA Systems. All Rights Reserved.
*/
public class Main {
public static void main(String[] args) {
JaxWsImplService service = new JaxWsImplService();
JaxWsImpl port = service.getJaxWsImplPort();
String result = null;
result = port.sayHello("Hi there!");
System.out.println( "Got result: " + result );
}
}
![]() ![]() ![]() |