Oracle® Fusion Middleware Oracle WebLogic Server Web サービス リファレンス 11g リリース 1 (10.3.1) B55558-01 |
|
戻る |
次へ |
以下の節では、WebLogic 固有の JWS アノテーションに関するリファレンスを提供します。
WebLogic Web サービスのプログラミング モデルでは、新しい JDK 5.0 メタデータ アノテーション http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#annotations
機能 (http://www.jcp.org/en/jsr/detail?id=175
JSR-175 による仕様) を採用しています。このプログラミング モデルでは、アノテーション付きの Java ファイルを作成し、Ant タスクを使用してそのファイルを Java クラスにコンパイルし、関連するアーティファクトをすべて生成します。
アノテーション付きの Java Web サービス (JWS) ファイルは、Web サービスの中核部分です。このファイルには Web サービスの動作を決定する Java コードが含まれています。JWS ファイルは、アノテーションを使用して Web サービスの形式や特性を指定した、通常の Java クラス ファイルです。
サポートされる JWS アノテーションは、JAX-WS を作成しているか、JAX-RPC Web サービスを作成しているかによって異なります。次の表は、JAX-WS と JAX-RPC における Web サービスのアノテーション サポートの比較を示しています。
JWS アノテーションは、JWS ファイルのクラス、メソッド、またはパラメータのいずれかのレベルを対象にします。アノテーションの中には、複数のレベルを対象にできるものもあります。たとえば、@SecurityRoles
は、クラスとメソッドの 2 つのレベルを対象にできます。
次に、標準 JSR-181 を使用した簡単な JWS ファイルの例を挙げます。標準 JSR-181 を使用している個所は太字で示しています。
package examples.webservices.complex; // 標準の JWS アノテーション インタフェースをインポートする import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; // BasicStruct JavaBean をインポートする import examples.webservices.complex.BasicStruct; // Web サービスの portType 名を「ComplexPortType」、パブリック サービス名を「ComplexService」、 // 生成される WSDL で使用される targetNamespace を「http://example.org」と指定する、 // 標準の JWS アノテーション @WebService(serviceName="ComplexService", name="ComplexPortType", targetNamespace="http://example.org") // document-literal-wrapped 型の Web サービスであることを指定する // 標準の JWS アノテーション @SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED) /** * この JWS ファイルは WebLogic Web サービスの基本となる。この Web サービスには * 以下の 2 つのパブリック オペレーションがある。 * * - echoInt(int) * - echoComplexType(BasicStruct) * * この Web サービスは「document-literal」サービスとして定義される。 * つまり、SOAP メッセージには、本文全体を定義する XML スキーマ要素 * を参照している 1 つの部分がある。 * */ public class ComplexImpl { // メソッドがパブリック オペレーションとして公開されることを指定する、 // 標準の JWS アノテーション。 アノテーションにはメンバー値の // 「operationName」が含まれていないので、オペレーションの名前は // メソッド名 echoInt と同じになる。 // // WebResult アノテーションは、生成される WSDL 内のオペレーションの // 結果の名前が、デフォルト名の「return」ではなく「IntegerOutput」 // であることを指定する。 WebParam アノテーションは、WSDL ファイル内の // 入力パラメータ名が、パラメータの Java 名「input」ではなく、 // 「IntegerInput」であることを指定する。 @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; } // メソッド「echoStruct」を「echoComplexType」というパブリック オペレーション // として公開するための、標準の JWS アノテーション。 // WebResult アノテーションは、生成される WSDL 内のオペレーションの結果の名前が、 // デフォルト名の「return」ではなく、「EchoStructReturnMessage」であることを // 指定する。 @WebMethod(operationName="echoComplexType") @WebResult(name="EchoStructReturnMessage", targetNamespace="http://example.org/complex") public BasicStruct echoStruct(BasicStruct struct) { System.out.println("echoComplexType called"); return struct; } }
次の節では、サポートされる JWS アノテーションについて説明します。
次の表は、Web サービスの形態と動作を指定するために JWS ファイルで使用可能な標準 JSR-181 アノテーションをまとめたものです。これらの各アノテーションは、javax.jws (http://java.sun.com/javase/6/docs/api/javax/jws/package-tree.html
) または javax.jws パッケージ (http://java.sun.com/javase/6/docs/api/javax/jws/soap/package-tree.html
) を使用することで利用できます。詳細については、http://www.jcp.org/en/jsr/detail?id=181
の「Web Services Metadata for the Java Platform 仕様 (JSR-181)」を参照してください。
表 3-2 標準 JSR-181 JWS アノテーション
アノテーション | 説明 |
---|---|
javax.jws.WebService |
クラス レベルで JWS ファイルが Web サービスを実装することを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』または『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Web サービス入門』の「JWS ファイルが Web サービスを実装することの指定 ( |
javax.jws.WebMethod |
JWS ファイルのメソッドを Web サービスのパブリック オペレーションとして公開することを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』または『Oracle Fusion Fusion Middleware JAX-RPC を使用した Oracle WebLogic Web サービス入門』の「JWS メソッドをパブリック オペレーションとして公開することの指定 ( |
javax.jws.OneWay |
オペレーションが呼び出し側アプリケーションに値を返さないことを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』または『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Web サービス入門』の「JWS メソッドをパブリック オペレーションとして公開することの指定 ( |
javax.jws.WebParam |
Web サービス オペレーションの入力パラメータと生成される WSDL ファイルの要素との間のマッピングを指定したり、パラメータの動作を指定したりする。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』または『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Web サービス入門』の「オペレーションのパラメータと WSDL 要素のマッピングのカスタマイズ (@WebParam アノテーション)」を参照。 |
javax.jws.WebResult |
Web サービス オペレーションの戻り値と生成される WSDL ファイル内の対応する要素との間のマッピングを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』または『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Web サービス入門』の「オペレーションの戻り値と WSDL 要素のマッピングのカスタマイズ ( |
javax.jws.HandlerChain |
外部ハンドラ チェーンを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』または『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「SOAP メッセージ ハンドラの作成と使用」を参照。 |
javax.jws.soap.SOAPBinding |
クラス レベルで Web サービスの SOAP バインディング ( |
注意 : JAX-WS JWS アノテーションは、JAX-WS Web サービスにのみ関連します。この節の内容は、JAX-RPC Web サービスには適用されません。 |
次の表は、Web サービスの形態と動作を指定するために JWS ファイルで使用可能な JAX-WS (JSR-224) アノテーションをまとめたものです。これらの各アノテーションは、javax.xml.ws (http://java.sun.com/javase/6/docs/api/javax/xml/ws/package-tree.html
) パッケージを使用することで利用できます。詳細については、https://jax-ws.dev.java.net/nonav/2.1.4/docs/annotations.html
の「JAX-WS 2.1 アノテーション」を参照してください。
表 3-3 JAX-WS (JSR-244) アノテーション
アノテーション | 説明 |
---|---|
javax.xml.ws.Action |
WS-Addressing |
javax.xml.ws.BindingType |
Web サービスの実装クラスに使用するバインディングを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「エンドポイントに使用するバインディングの指定 (@BindingType アノテーション)」を参照。 |
javax.xml.ws.FaultAction |
WS-Addressing |
javax.xml.ws.RequestWrapper |
実行時にエンドポイント インタフェースのメソッドに使用される要求ラッパー Bean を指定する。 |
javax.xml.ws.ResponseWrapper |
実行時にエンドポイント インタフェースのメソッドに使用される応答ラッパー Bean を指定する。 |
javax.xml.ws.ServiceMode |
プロバイダ実装がプロトコル メッセージ全体を対象とするのか、ペイロードのみを対象にするのかを指定する。 |
javax.xml.ws.WebEndpoint |
生成されたサービス インタフェースの |
javax.xml.ws.WebFault |
フォールト要素のローカルおよびネームスペース名、フォールト Beanの名前をそれぞれカスタマイズするためのサーバ固有の例外クラスを指定する。 |
javax.xml.ws.WebServiceClient |
生成されたサービス インタフェースを指定する。 |
javax.xml.ws.WebServiceProvider |
プロバイダ実装クラスを指定する。 |
javax.xml.ws.WebServiceRef |
Web サービスへの参照を指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「@WebServiceRef アノテーションを使用した Web サービス参照の定義」を参照。 |
注意 : JAXB JWS アノテーションは、JAX-WS Web サービスにのみ関連します。この節の内容は、JAX-RPC Web サービスには適用されません。 |
JAXB (JSR-222) (http://jcp.org/en/jsr/detail?id=222
) 仕様は、Web サービスの形態と動作を指定するために JWS ファイルで使用可能な JAXB アノテーションを定義しています。次の表は、JAXB アノテーションをまとめたものです。これらの各アノテーションは、javax.xml.bind.annotation (http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/package-tree.html
) パッケージを使用することで利用できます。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「JAXB アノテーションを使用した Java-to-XML スキーマ マッピングのカスタマイズ」または JAXB (http://jcp.org/en/jsr/detail?id=222
の JSR-222) 仕様を参照してください。
表 3-4 JAXB Mapping アノテーション (JSR-222)
アノテーション | 説明 |
---|---|
java.xml.bind.annotation.XmlAccessorType |
デフォルトでフィールドまたはプロパティをマップするかどうかを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「フィールドおよびプロパティのデフォルト シリアライゼーションの指定 (@XmlAccessorType)」を参照。 |
java.xml.bind.annotation.XmlElement |
クラスに格納されているプロパティを、格納しているクラスがマップされている XML スキーマの複合型のローカル要素へマップすることを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「プロパティとローカル要素のマッピング (@XmlElement)」を参照。 |
java.xml.bind.annotation.XmlRootElement |
Web サービスの WSDL によって使用される XML スキーマのグローバル要素に最上位クラスをマップすることを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「最上位クラスとグローバル要素のマッピング (@XmlRootElement)」を参照。 |
java.xml.bind.annotation.XmlSeeAlso |
現在のクラスをバインドするときにバインドする他のクラスを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「複数のクラスのバインディング (@XmlSeeAlso)」を参照。 |
java.xml.bind.annotation.XmlType |
クラス型または列挙型を XML スキーマ型にマップすることを指定する。詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「値クラスとスキーマ型のマッピング (@XmlType)」を参照。 |
次の表は、Web サービスの形態と動作を指定するために JWS ファイルで使用可能な JAX-WS (JSR-250) アノテーションをまとめたものです。
これらの各アノテーションは、javax.annotation
(http://java.sun.com/javase/6/docs/api/javax/annotation/package-tree.html
) パッケージを使用することで利用できます。詳細については、Common Annotations for the Java Platform (JSR-250) (http://jcp.org/en/jsr/detail?id=250
) 仕様を参照してください。
表 3-5 共通アノテーション (JSR-250)
アノテーション | 説明 |
---|---|
javax.annotation.Resource |
アプリケーションが必要とするリソースを指定する。アノテーションは、アプリケーション コンポーネント クラス、コンポーネント クラスのフィールドまたはメソッドに適用できる。 |
javax.annotation.PostConstruct |
依存性注入が完了した後に、初期化を実行するために呼び出す必要のあるメソッドを指定する。 |
javax.annotation.PreDestroy |
コンテナがインスタンスを削除しようとしていることを知らせるコールバック通知を受信するメソッドを指定する。 |
WebLogic Web サービスでは、JSR-181 の標準 JWS アノテーションに加え、さらに動作と機能を指定するのに使用できる JWS アノテーションのセットが定義されます。次の表は、WebLogic 固有のアノテーションをまとめたものです。JAX-WS または JAX-RPC でサポートされるかどうかを示しています。(ほとんどのアノテーションは JAX-RPC でのみサポートされます)。各アノテーションの詳細については、後の節で説明します。
表 3-6 WebLogic 固有のアノテーション
アノテーション | 説明 | JAX-WS/JAX-RPC/両方 |
---|---|---|
|
メイン JWS ファイルが別の Web サービスのオペレーションを非同期的に呼び出したときに発生する可能性のある障害を処理するメソッドを指定する。 |
JAX-RPC |
|
メイン JWS ファイルが別の Web サービスのオペレーションを非同期的に呼び出したときの応答を処理するメソッドを指定する。 |
JAX-RPC |
|
SOAP (Simple Object Access Protocol) メッセージの送受信時に、Web サービスで SOAP 実装のバージョン 1.1 を使うのか、バージョン 1.2 を使うのかを指定する。 |
JAX-RPC |
|
JMS キューの JNDI 名を指定する。WebLogic Server は、それに対して以下の操作を行う。
|
JAX-RPC |
|
アノテーション付き変数がコールバックであることを指定する。つまり、アノテーション付き変数を使って、対象 Web サービスのオペレーションを呼び出したクライアント Web サービスにコールバック イベントを返送できる。 |
JAX-RPC |
|
コールバック Web サービスから受け取るメッセージを処理する、クライアント Web サービスのメソッドを指定する。 |
JAX-RPC |
|
JWS ファイルが実際に、コールバック Web サービスを記述する Java インタフェースであることを指定する。 |
JAX-RPC |
|
アノテートされたフィールドが Web サービスの実行時コンテキストへのアクセスを提供するように指定する。 |
JAX-RPC |
|
|
JAX-RPC |
|
JWS ファイルが会話形式の Web サービスを実装するように指定する。 |
JAX-RPC |
|
会話状態などの内部状態情報の格納に、WebLogic Server のデフォルト ファイルストアではなく、プログラマ指定のファイルストアを使用することを指定する。 |
JAX-RPC |
|
JWS のどのパブリック メソッドがバッファされるかを指定する。クラス レベルで指定した場合、すべてのパブリック メソッドがバッファされます。一部のメソッドのみバッファする場合、適切なメソッド レベルでアノテーションを指定します。 |
JAX-RPC |
|
|
両方 |
|
デジタル署名、暗号化、または Web サービスの信頼性のあるメッセージングに関する情報を格納している WS-Policy ファイルを要求または応答 SOAP メッセージに適用するように指定する。 |
両方 |
weblogic.jws.ReliabilityBuffer |
WebLogic Server による JMS キューから Web サービス実装へのメッセージ配信試行回数、およびサーバが待機すべき再試行間隔など、信頼性のある Web サービスのオペレーションに対する信頼性のあるメッセージングのプロパティを指定する。 |
JAX-RPC |
weblogic.jws.ReliabilityErrorHandler |
クライアント Web サービスが信頼性のある Web サービスを呼び出したが、信頼性のある Web サービスが実際にそのメッセージを受け取ったという確認応答をそのクライアントが受信しなかった場合に発生するエラーを処理するメソッドを指定する。 |
JAX-RPC |
|
|
JAX-WS |
|
デジタル署名または暗号化に関する情報を格納している Oracle Web Services Manager (Oracle WSM) WS-Policy ファイルを要求または応答 SOAP メッセージに適用するように指定する。 |
JAX-WS |
|
JWS ファイルのアノテーション付き変数が、以下の機能を使用するときに、別の WebLogic Web サービスを呼び出すスタブであることを指定する。
|
JAX-RPC |
weblogic.jws.StreamAttachments |
WebLogic Web サービス ランタイムで、Web サービスのすべてのメソッド パラメータを読み込む際に Streaming API を使用するように指定する。 |
JAX-RPC |
|
アノテーション付きのオペレーション、またはアノテーションがクラスレベルで指定されている場合は JWS ファイルのすべてのオペレーションがトランザクション内で実行されるかどうかを指定する。 |
JAX-RPC |
|
戻り値またはパラメータの代替データ型の完全修飾 Java クラス名のカンマ区切りリストを指定する。 |
JAX-RPC |
|
|
JAX-RPC |
|
|
JAX-RPC |
|
生成された WSDL のポート名に加え、HTTP 転送形式で Web サービスを呼び出すために使用するコンテキスト パスおよび URL のサービス URI セクションを指定する。 |
JAX-RPC |
|
生成された WSDL のポート名に加え、HTTPS 転送形式で Web サービスを呼び出すために使用するコンテキスト パスおよび URL のサービス URI セクションを指定する。 |
JAX-RPC |
|
生成された WSDL のポート名に加え、JMS 転送形式で Web サービスを呼び出すために使用するコンテキスト パスおよび URL のサービス URI セクションを指定する。 |
JAX-RPC |
|
デプロイされた WebLogic Web サービスの WSDL をエクスポーズするかどうかを指定する。 |
JAX-RPC |
weblogic.jws.security.CallbackRolesAllowed |
Web サービスのコールバック メソッドを呼び出す許可を与えられたロールをリストする |
JAX-RPC |
weblogic.jws.security.RolesAllowed |
Web サービスの基本認証を有効にするかどうかを指定する。 |
JAX-RPC |
weblogic.jws.security.RolesReferenced |
Web サービスの呼び出しが許可されている実際のロールを参照する、ロール名のリストを指定する。 |
JAX-RPC |
|
WebLogic Server 内の Web サービスを実際に実行するロールおよびユーザ ID を指定する。 |
JAX-RPC |
weblogic.jws.security.SecurityRole |
Web サービスの呼び出しを許可されているロールの名前を指定する。 |
JAX-RPC |
weblogic.jws.security.SecurityRoleRef |
Web サービスの呼び出しを許可されている、指定済みのロールにリンクするロール名参照を指定する。 |
JAX-RPC |
weblogic.jws.security.UserDataConstraint |
クライアントが Web サービスを呼び出す際に、HTTPS 転送の使用が必要であるかどうかを指定する。 |
JAX-RPC |
weblogic.jws.security.WssConfiguration |
Web サービスで使用する Web サービス セキュリティ コンフィグレーションの名前を指定する。 |
両方 |
|
SOAP メッセージ プロトコルに対する Web サービス オペレーションのマッピングを指定する。 |
JAX-RPC |
weblogic.jws.security.SecurityRoles (非推奨) |
Web サービスのオペレーションにアクセスできるロールを指定する。 |
JAX-RPC |
weblogic.jws.security.SecurityIdentity (非推奨) |
呼び出された Web サービスが前提とする ID を指定する。 |
JAX-RPC |
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド
メイン JWS ファイルが別の Web サービスのオペレーションを非同期的に呼び出したときに発生する可能性のある障害を処理するメソッドを指定します。
JWS ファイルの内部から Web サービスのオペレーションを非同期的に呼び出すと、応答 (または障害の場合は例外) は、オペレーション呼び出しの直後ではなく、多少遅れて返されます。オペレーション呼び出しは応答を待たないので、JWS ファイル内の別のメソッドは、応答が返された時点でその応答を処理する必要があります。同様に、さらに別のメソッドは障害を処理する必要があります。@AsyncFailure
アノテーションは、非同期オペレーション呼び出しによって発生する可能性がある障害を処理する、JWS ファイル内のメソッドを指定するために使用します。
@AsyncFailure
アノテーションは、呼び出し対象となる Web サービスのスタブの名前と、非同期的に呼び出すオペレーションの名前の 2 つのパラメータを取ります。スタブは、@ServiceClient
アノテーションが付けられているスタブです。
非同期障害を処理するメソッドは、以下のガイドラインに従う必要があります。
void
を返す。
on
MethodName
AsyncFailure
という名前が付けられている。このうち、MethodName
は、非同期的に呼び出すメソッドの名前 (先頭の文字は常に大文字) です。
メイン JWS ファイルで、非同期メソッドの呼び出しは次のような形式になります。
port.getQuoteAsync (apc, symbol);
getQuote
はメソッドの非同期名ではない名前、apc
は非同期呼び出し前のコンテキスト、symbol
は getQuote
オペレーションに対する標準的なパラメータです。
非同期呼び出し後のコンテキスト (weblogic.wsee.async.AsyncPostCallContext
オブジェクトに格納)、および非同期オペレーション呼び出しで送出される可能性がある Throwable
例外の 2 つのパラメータを持っている。
メソッド自体の内部では、コンテキストからメソッド障害に関する詳細を入手し、特定の型の障害を問い合わせ、それに従って処理を実行できます。
通常、非同期オペレーション障害を処理するメソッドを明示的に指定する場合は、必ず @AsyncFailure
アノテーションを使用します。このアノテーションを使用しない唯一のケースは、単一のメソッドで、別の Web サービスを呼び出す複数のスタブの障害を処理する場合です。この場合、スタブは別の Web サービスに接続しますが、Web サービス ランタイムは、アノテーションではなくメソッドの名前を基に (on
MethodNameAsyncFailure
) 非同期障害の処理方法を判別するので、各 Web サービスは、名前が似ているメソッドを持っている必要があります。ただし、オペレーションのいずれか 1 つから非同期障害を処理するメソッドとスタブとの間に必ず 1 対 1 の対応が必要な場合は、
@AsyncFailure
を明示的に使用することをお勧めします。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「非同期の要求と応答を使用した Web サービスの呼び出し」を参照してください。
表 3-7 weblogic.jws.AsyncFailure JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
target |
オペレーションを非同期的に呼び出す Web サービスのスタブの名前。 スタブは、 |
文字列 |
必須 |
operation |
非同期的に呼び出すオペレーションの名前。 この名前は、WSDL ファイルで示されているオペレーションの実際の名前。JWS ファイルのメイン コードでこのオペレーションを呼び出すときに、そのオペレーション名に たとえば、 port.getQuoteAsync (apc, symbol); |
文字列 |
必須 |
以下のサンプル スニペットでは、別の Web サービスのオペレーションを非同期的に呼び出す、JWS ファイル内の @AsyncFailure
アノテーションの使い方を示します。ここでは、関連する Java コードのみを示します。
package examples.webservices.async_req_res; ... public class StockQuoteClientImpl { @ServiceClient(wsdlLocation="http://localhost:7001/async/StockQuote?WSDL", serviceName="StockQuoteService", portName="StockQuote") private StockQuotePortType port; @WebMethodpublic void getQuote (String symbol) { AsyncPreCallContext apc = AsyncCallContextFactory.getAsyncPreCallContext(); apc.setProperty("symbol", symbol); try { port.getQuoteAsync(apc, symbol ); System.out.println("in getQuote method of StockQuoteClient WS"); } catch (RemoteException e) { e.printStackTrace(); } } ... @AsyncFailure(target="port", operation="getQuote") public void onGetQuoteAsyncFailure(AsyncPostCallContext apc, Throwable e) { System.out.println("-------------------"); e.printStackTrace(); System.out.println("-------------------"); } }
この例では、port
というスタブが、http://localhost:7001/async/StockQuote
にある Web サービスを呼び出すために使用されています。getQuote
オペレーションが非同期的に呼び出され、この呼び出しで例外が発生すると、@AsyncFailure
アノテーションで指定されている onGetQuoteAsyncFailure
メソッドによって処理されます。
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド
メイン JWS ファイルが別の Web サービスのオペレーションを非同期的に呼び出したときの応答を処理するメソッドを指定します。
JWS ファイルの内部から Web サービスのオペレーションを非同期的に呼び出すと、応答は、オペレーション呼び出しの直後ではなく、多少遅れて返されます。オペレーション呼び出しは応答を待たないので、JWS ファイル内の別のメソッドは、応答が最終的に返された時点でその応答を処理する必要があります。@AsyncResponse
アノテーションは、非同期オペレーション呼び出しの応答を処理する、JWS ファイル内のメソッドを指定するために使用します。
@AsyncResponse
アノテーションは、呼び出し対象となる Web サービスのスタブの名前と、非同期的に呼び出すオペレーションの名前の 2 つのパラメータを取ります。スタブは、@ServiceClient
アノテーションが付けられているスタブです。
非同期応答を処理するメソッドは、以下のガイドラインに従う必要があります。
void
を返す。
On
MethodName
AsyncResponse
という名前が付けられている。このうち、MethodName
は、非同期的に呼び出すメソッドの名前 (先頭の文字は常に大文字) です。
メイン JWS ファイルで、非同期メソッドの呼び出しは次のような形式になります。
port.getQuoteAsync (apc, symbol);
getQuote
はメソッドの非同期名ではない名前、apc
は非同期呼び出し前のコンテキスト、symbol
は getQuote
オペレーションに対する標準的なパラメータです。
非同期呼び出し後のコンテキスト (weblogic.wsee.async.AsyncPostCallContext
オブジェクトに格納)、およびオペレーションの通常の戻り値の 2 つのパラメータを持っている。
非同期応答メソッド自体の内部では、応答を処理するコードを追加します。また、コンテキストからメソッド呼び出しに関する詳細を入手できます。
通常、非同期オペレーション応答を処理するメソッドを明示的に指定する場合は、必ず @AsyncResponse
アノテーションを使用します。このアノテーションを使用しない唯一のケースは、単一のメソッドで、別の Web サービスを呼び出す複数のスタブの応答を処理する場合です。この場合、スタブは別の Web サービスに接続しますが、Web サービス ランタイムは、アノテーションではなくメソッドの名前を基に (on
MethodNameAsyncResponse
) 非同期応答の処理方法を判別するので、各 Web サービスは、名前が似ているメソッドを持っている必要があります。ただし、オペレーションのいずれか 1 つから非同期応答を処理するメソッドとスタブとの間に必ず 1 対 1 の対応が必要な場合は、
@AsyncResponse
を明示的に使用することをお勧めします。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「非同期の要求と応答を使用した Web サービスの呼び出し」を参照してください。
表 3-8 weblogic.jws.AsyncResponse JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
target |
オペレーションを非同期的に呼び出す Web サービスのスタブの名前。 スタブは、 |
文字列 |
必須 |
operation |
非同期的に呼び出すオペレーションの名前。 この名前は、WSDL ファイルで示されているオペレーションの実際の名前。JWS ファイルのメイン コードでこのオペレーションを呼び出すときに、そのオペレーション名に たとえば、 port.getQuoteAsync (apc, symbol); |
文字列 |
必須 |
以下のサンプル スニペットでは、別の Web サービスのオペレーションを非同期的に呼び出す、JWS ファイル内の @AsyncResponse
アノテーションの使い方を示します。ここでは、関連する Java コードのみを示します。
package examples.webservices.async_req_res; ... public class StockQuoteClientImpl { @ServiceClient(wsdlLocation="http://localhost:7001/async/StockQuote?WSDL", serviceName="StockQuoteService", portName="StockQuote") private StockQuotePortType port; @WebMethodpublic void getQuote (String symbol) { AsyncPreCallContext apc = AsyncCallContextFactory.getAsyncPreCallContext(); apc.setProperty("symbol", symbol); try { port.getQuoteAsync(apc, symbol ); System.out.println("in getQuote method of StockQuoteClient WS"); } catch (RemoteException e) { e.printStackTrace(); } } ... @AsyncResponse(target="port", operation="getQuote") public void onGetQuoteAsyncResponse(AsyncPostCallContext apc, int quote) { System.out.println("-------------------"); System.out.println("Got quote " + quote ); System.out.println("-------------------"); } }
この例では、port
というスタブが、http://localhost:7001/async/StockQuote
にある Web サービスを呼び出すために使用されています。getQuote
オペレーションが非同期的に呼び出され、この呼び出しに対する応答は、@AsyncResponse
アノテーションで指定されている onGetQuoteAsyncResponse
メソッドによって処理されます。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
SOAP (Simple Object Access Protocol) メッセージの送受信時に、Web サービスで SOAP 実装のバージョン 1.1 を使うのか、バージョン 1.2 を使うのかを指定します。デフォルトでは、WebLogic Web サービスは SOAP 1.1 を使用します。
次に、SOAP 1.2 を指定する例を示します (関連コードのみ表示)。
package examples.webservices.soap12; ... import javax.jws.WebMethod; import javax.jws.WebService; import weblogic.jws.Binding; @WebService(name="SOAP12PortType", serviceName="SOAP12Service", targetNamespace="http://example.org") @Binding(Binding.Type.SOAP12) public class SOAP12Impl { @WebMethod() public String sayHello(String message) { ... } }
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
JMS キューの JNDI 名を指定します。WebLogic Server は、それに対して以下の操作を行います。
バッファ付き Web サービス オペレーションの呼び出しを格納する。
信頼性のある Web サービス オペレーションの呼び出しを格納する。
バッファ付き Web サービスで使用する場合、このアノテーションは、バッファリングされた JWS のメソッドを指定する @MessageBuffer
と組み合わせて使用します。信頼性のある Web サービスで使用する場合、このアノテーションは、Web サービスに関連付けられた、信頼性のあるメッセージング WS-Policy ファイルを指定する @Policy
と組み合わせて使用します。
Web サービスに対してバッファ付きまたは信頼性のあるメッセージングを有効にしているが、@BuffereQueue
アノテーションを指定していない場合、WebLogic Server は、デフォルトの Web サービス JMS キュー (weblogic.wsee.DefaultQueue
) を使用して、バッファ付きまたは信頼性のあるオペレーションの呼び出しを格納します。この JMS キューは、JMS 転送機能のデフォルト キューでもあります。これらの機能のいずれかに対してこの JMS キューを使用する場合は、JMS キューをあらかじめ作成していることが前提となります。
バッファ付きまたは信頼性のある Web サービスの詳細および作成例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「バッファ付き Web サービスの作成」と「Web サービスの信頼性のあるメッセージングの使用」を参照してください。
以下の例では、JWS ファイルのコード スニペットを示します。ここでは、パブリック オペレーションがバッファ付きで、WebLogic Server がオペレーションの呼び出しを入れている JMS キューが my.buffere.queue
と呼ばれています。関連する Java コードのみを示します。
package examples.webservices.buffered; ... @WebService(name="BufferedPortType", serviceName="BufferedService", targetNamespace="http://example.org") @BufferQueue(name="my.buffer.queue") public class BufferedImpl { ... @WebMethod() @MessageBuffer(retryCount=10, retryDelay="10 seconds") @Oneway() public void sayHelloNoReturn(String message) { System.out.println("sayHelloNoReturn: " + message); } }
以降の節では、アノテーションを詳細に説明します。
対象 : フィールド
アノテーション付き変数がコールバックであることを指定します。つまり、アノテーション付き変数を使って、対象 Web サービスのオペレーションを呼び出したクライアント Web サービスにコールバック イベントを返送できます。
対象 Web サービスにおいて @Callback
アノテーションを指定すると、クライアント Web サービスにコールバックできます。アノテーション付き変数のデータ型は、コールバック インタフェースです。
コールバック機能は、2 つの WebLogic Web サービス間で機能します。ただし、この機能をプログラミングする際、次の 3 つの Java ファイルを作成します。
コールバック インタフェース : コールバック メソッドを定義する Java インタフェース ファイル。このファイルは、明示的に実装するのではなく、jwsc
Ant タスクによってこのインタフェースの実装が自動的に生成されます。この実装によって、対象 Web サービスからクライアント Web サービスにメッセージが返送されます。生成された Web サービスは、クライアント Web サービスをホストする同じ WebLogic Server にデプロイされます。
対象 Web サービスを実装する JWS ファイル : 対象 Web サービスには、コールバック インタフェースで定義されたメソッドを呼び出す 1 つまたは複数の標準オペレーションが含まれます。このメソッドによって、対象 Web サービス オペレーションの呼び出し元のクライアント Web サービスにメッセージが返送されます。
クライアント Web サービスを実装する JWS ファイル : クライアント Web サービスは、対象 Web サービスのオペレーションを呼び出します。この Web サービスには、コールバック メソッドを介して対象 Web サービスからコールバック メッセージを受け取ったときに、クライアントが実行すべき動作を指定する 1 つまたは複数のメソッドが含まれます。
コールバック機能のプログラミングに関する詳細および手順については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「コールバックによるクライアントへのイベントの通知」を参照してください。
@Callback
アノテーションには、属性はありません。
次に、callback
という変数に @Callback
アノテーションを付けた非常に簡単な対象 Web サービスの例を示します。この変数のデータ型は CallbackInterface
で、これは、コールバック Web サービスがこの名前で存在する必要があることを意味します。変数にコールバック情報が注入された後で、CallbackInterface
で定義されているコールバック メソッドを呼び出すことができます。この例では、callbackOperation()
がコールバック メソッドです。
関連コードは、太字で示しています。
package examples.webservices.callback; import weblogic.jws.WLHttpTransport; import weblogic.jws.Callback; import javax.jws.WebService; import javax.jws.WebMethod; @WebService(name="CallbackPortType", serviceName="TargetService", targetNamespace="http://examples.org/") @WLHttpTransport(contextPath="callback", serviceUri="TargetService", portName="TargetServicePort") public class TargetServiceImpl { @Callback CallbackInterface callback; @WebMethod public void targetOperation (String message) { callback.callbackOperation (message); } }
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド
コールバック Web サービスから受け取るメッセージを処理する、クライアント Web サービスのメソッドを指定します。この属性を使うと、クライアント Web サービス内のコールバック メッセージ ハンドラ メソッドと、コールバック インタフェース内のコールバック メソッドをリンクできます。
コールバック機能は、2 つの WebLogic Web サービス間で機能します。ただし、この機能をプログラミングする際、次の 3 つの Java ファイルを作成します。
コールバック インタフェース : コールバック メソッドを定義する Java インタフェース ファイル。このファイルは、明示的に実装するのではなく、jwsc
Ant タスクによってこのインタフェースの実装が自動的に生成されます。この実装によって、対象 Web サービスからクライアント Web サービスにメッセージが返送されます。生成された Web サービスは、クライアント Web サービスをホストする同じ WebLogic Server にデプロイされます。
対象 Web サービスを実装する JWS ファイル : 対象 Web サービスには、コールバック インタフェースで定義されたメソッドを呼び出す 1 つまたは複数の標準オペレーションが含まれます。このメソッドによって、対象 Web サービス オペレーションの呼び出し元のクライアント Web サービスにメッセージが返送されます。
クライアント Web サービスを実装する JWS ファイル : クライアント Web サービスは、対象 Web サービスのオペレーションを呼び出します。この Web サービスには、コールバック メソッドを介して対象 Web サービスからコールバック メッセージを受け取ったときに、クライアントが実行すべき動作を指定する 1 つまたは複数のメソッドが含まれます。
コールバック機能のプログラミングに関する詳細および手順については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「コールバックによるクライアントへのイベントの通知」を参照してください。
次に、@CallbackMethod
アノテーションが付けられているクライアント Web サービスのメソッドを示します。この属性では、port
という変数に前もってスタブ情報が注入されていること、およびアノテーション付きメソッドが callbackOperation()
というコールバック オペレーションから受信したメッセージを処理することが示されています。
@CallbackMethod(target="port", operation="callbackOperation")
@CallbackRolesAllowed(@SecurityRole(role="engineer", mapToPrincipals="shackell"))
public void callbackHandler(String msg) {
System.out.println (msg);
}
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
JWS ファイルが実際に、コールバック Web サービスを記述する Java インタフェースであることを指定します。このアノテーションは、@javax.jws.WebService
に似ていますが、コールバックに限定され、属性の数も制限されています。
コールバック機能は、2 つの WebLogic Web サービス間で機能します。ただし、この機能をプログラミングする際、次の 3 つの Java ファイルを作成します。
コールバック インタフェース : コールバック メソッドを定義する Java インタフェース ファイル。このファイルは、明示的に実装するのではなく、jwsc
Ant タスクによってこのインタフェースの実装が自動的に生成されます。この実装によって、対象 Web サービスからクライアント Web サービスにメッセージが返送されます。生成された Web サービスは、クライアント Web サービスをホストする同じ WebLogic Server にデプロイされます。
対象 Web サービスを実装する JWS ファイル : 対象 Web サービスには、コールバック インタフェースで定義されたメソッドを呼び出す 1 つまたは複数の標準オペレーションが含まれます。このメソッドによって、対象 Web サービス オペレーションの呼び出し元のクライアント Web サービスにメッセージが返送されます。
クライアント Web サービスを実装する JWS ファイル : クライアント Web サービスは、対象 Web サービスのオペレーションを呼び出します。この Web サービスには、コールバック メソッドを介して対象 Web サービスからコールバック メッセージを受け取ったときに、クライアントが実行すべき動作を指定する 1 つまたは複数のメソッドが含まれます。
@CallbackInterface
アノテーションを使うと、Java ファイルがコールバック インタフェース ファイルであることが指定されます。
コールバック インタフェースをプログラミングする際、標準の非コールバック Web サービスと同様に、1 つまたは複数のコールバック メソッドを指定し、これらのメソッドに @javax.jws.WebMethod
アノテーションを付け、それらが Web サービス オペレーションであることを指定します。ただし、非コールバック メソッドとは異なり、これらのコールバック メソッドの実際の実装コードを記述する必要はありません。代わりに、jwsc
Ant タスクを使ったクライアント Web サービスのコンパイル時に、そのタスクで自動的にコールバック インタフェースの実装が作成され、それが Web サービスにパッケージ化されます。こうして生成された実装によって、コールバック メソッドがすべて同じ処理を行う (コールバック メソッドを呼び出す対象 Web サービスからクライアント Web サービスにメッセージを返送する) ことが指定されます。
コールバック機能のプログラミングに関する詳細および手順については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「コールバックによるクライアントへのイベントの通知」を参照してください。
表 3-12 weblogic.jws.CallbackService JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
name |
コールバック Web サービスの名前。WSDL ファイルの デフォルト値は、JWS ファイルの Java クラスの未修飾名。 |
文字列 |
省略可能 |
serviceName |
コールバック Web サービスのサービス名。WSDL ファイルの デフォルト値は、JWS ファイルの Java クラスの未修飾名に、文字列 |
文字列 |
省略可能 |
次に、非常に簡単なコールバック インタフェースの例を示します。結果のコールバック Web サービスは、callbackOperation()
というコールバック メソッドを 1 つ持ちます。
package examples.webservices.callback; import weblogic.jws.CallbackService; import javax.jws.Oneway; import javax.jws.WebMethod; @CallbackService public interface CallbackInterface { @WebMethod @Oneway public void callbackOperation (String msg); }
以降の節では、アノテーションを詳細に説明します。
対象 : フィールド
アノテートされたフィールドが Web サービスの実行時コンテキストへのアクセスを提供するように指定します。
クライアント アプリケーションが、JWS ファイルで実装された WebLogic Web サービスを呼び出すと、WebLogic Server は、Web サービスが、サービスに関する実行時情報のアクセス、および場合によっては変更に使用できるコンテキストを自動的に作成します。この情報の多くは、現在の会話が終了したか、会話のプロパティの現在の値、実行時の会話のプロパティの変更など、会話に関連しています。コンテキストを介してアクセス可能な情報には、Web サービスの呼び出しに使用されたプロトコル (HTTP/S または JMS)、SOAP メッセージ要求内にあった SOAP ヘッダなど、より一般的なものもあります。アノテーション フィールドのデータ型は weblogic.wsee.jws.JwsContext
です。これは、コンテキストを問い合わせるメソッドを含む WebLogic Web サービス API です。
このアノテーションの使用に関する詳細については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「Web サービスの実行時情報へのアクセス」参照してください。
このアノテーションには、属性はありません。
対象 : メソッド
@Conversation
アノテーション付きのメソッドが、2 つの WebLogic Web サービスの間の会話、またはスタンドアロン Java クライアントと会話形式の Web サービスとの間の会話の一部として呼び出すことができるように指定します。
会話形式の Web サービスは通常、3 つのメソッドを指定します。各メソッドには、会話の開始、継続、終了の各フェーズに対応する @Conversation
アノテーションが付けられています。@Conversational
アノテーションは、Web サービスが会話形式になるようにクラス レベルで指定する場合、および最大アイドル時間などの会話のプロパティをコンフィグレーションする場合に使用します。
2 つの Web サービスの間の会話の場合、クライアント サービスでは、@ServiceClient
アノテーションを使用して、wsdl、サービス名、呼び出された会話サービスのポートを指定します。サービスとスタンドアロン クライアントとの間の会話の場合、クライアントは、開始メソッド、継続メソッド、および終了メソッドを適切な順序で呼び出し、会話を行います。Web サービスを会話形式にするために、唯一の追加要件として、java.io.Serializable
を実装する必要があります。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「会話形式の Web サービスの作成」を参照してください。
表 3-13 weblogic.jws.Conversation JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
value |
アノテーション付きのメソッドが実装する会話のフェーズを指定する。 指定できる値は次のとおり。
デフォルト値は |
enum |
省略可能 |
以下のサンプル スニペットでは、会話の開始、継続、および終了の各フェーズを指定するために @Conversation
アノテーションが付けられた 3 つのメソッド (start
、middle
、および finish
) を含む JWS ファイルを示します。
... public class ConversationalServiceImpl implements Serializable { @WebMethod @Conversation (Conversation.Phase.START) public String start() { // 会話を開始する Java コードがここに入る } @WebMethod @Conversation (Conversation.Phase.CONTINUE) public String middle(String message) { // 会話を継続する Java コードがここに入る } @WebMethod @Conversation (Conversation.Phase.FINISH) public String finish(String message ) { // 会話を終了する Java コードがここに入る } }
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
JWS ファイルが会話形式の Web サービスを実装するように指定します。
Web サービスを会話形式にするために、このアノテーションを使用する必要はありません。@Conversation
アノテーションを 1 つのメソッドに付けるだけで、JWS ファイルのすべてのメソッドは自動的に会話形式になります。クラス レベルの @Conversational
アノテーションは、会話形式の動作の一部を変更する場合や、クラス レベルで JWS が会話形式であることを明示する場合にのみ使用します。
JWS ファイルで @Conversational
アノテーションを使用しない場合でも、デフォルト値がニーズに合っていれば、属性なしでアノテーションを指定できます。ただし、会話で可能な最大アイドル時間、会話の最大継続時間などの値を変更する場合は、それぞれに対応した属性を指定します。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「会話形式の Web サービスの作成」を参照してください。
表 3-14 weblogic.jws.Conversational JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
maxIdleTime |
WebLogic Server によって終了されるまで、会話がアイドル状態を維持できる時間を指定する。アクティビティは、会話のいずれかのフェーズを実行しているクライアント Web サービスによって定義される。 有効な値は数値で、以下のいずれか。
たとえば、最大アイドル時間を 10 分に設定するには、次のようにアノテーションを指定する。 @Conversational(maxIdleTime="10 minutes") 0 の値 ( デフォルト値は |
文字列 |
省略可能 |
maxAge |
WebLogic Server によって終了されるまで、会話がアクティブ状態を維持できる時間。 有効な値は数値で、以下のいずれか。
たとえば、最大アイドル時間を 3 日に設定するには、次のようにアノテーションを指定する。 @Conversational(maxAge="3 days") デフォルト値は |
文字列 |
省略可能 |
runAsStartUser |
既存の会話の継続フェーズと終了フェーズが、会話を開始したユーザによって実行されるかどうかを指定する。 通常、同じユーザが会話の開始、継続、および終了メソッドを実行するので、この属性の値を変更しても、何の影響もない。ただし、 有効な値は、 |
ブール |
省略可能 |
singlePrincipal |
会話を開始したユーザとは別のユーザが会話の継続フェーズと終了フェーズを実行できるかどうかを指定する。 通常、同じユーザが会話のすべてのフェーズを実行する。ただし、この属性を 有効な値は、 |
ブール |
省略可能 |
以下のサンプル スニペットでは、JWS ファイルが会話形式の Web サービスを実装するように指定する方法を示します。会話で許可されている最大アイドル時間は 10 分、会話の最大継続時間はアクティビティに関係なく 1 日です。会話の継続および終了フェーズは、会話を開始したユーザとは別のユーザによって実行されます。各フェーズが発生すると、対応するメソッドが、元のユーザではなく新しいユーザとして実行されます。
package examples.webservices.conversation; ... @Conversational(maxIdleTime="10 minutes", maxAge="1 day", runAsStartUser=false, singlePrincipal=false ) public class ConversationalServiceImpl implements Serializable { ...
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
会話状態などの内部状態情報の格納に、WebLogic Server のデフォルト ファイルストアではなく、プログラマ指定のファイルストアを使用することを指定します。JWS ファイルでこの JWS アノテーションを指定しなかった場合、Web サービスでは WebLogic Server にコンフィグレーションされているデフォルト ファイルストアが使用されます。
信頼性のある Web サービスの内部状態の格納に対しても、この JWS アノテーションを使用できます。
Web サービスをクラスタにデプロイする場合は、クラスタ内のすべてのサーバでファイルストアが同じ名前で使用できるように、ファイルストアの論理名を指定してください。
注意 : このアノテーションはファイルストアにのみ適用され、JDBC ストアには適用されません。 |
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
JWS のどのパブリック メソッドがバッファされるかを指定します。クラス レベルで指定した場合、すべてのパブリック メソッドがバッファされます。一部のメソッドのみバッファする場合、適切なメソッド レベルでアノテーションを指定します。
クライアント Web サービスが、別の WebLogic Web サービスのバッファ付きオペレーションを呼び出すと、呼び出された Web サービスをホストしている WebLogic Server は、呼び出しメッセージを JMS キューに入れます。実際の呼び出しは、後で WebLogic Server が JMS キューの先頭から Web サービスの実装にメッセージを配信したときに処理されます。クライアントは、応答を待つ必要がなく、処理の実行を継続できます。このため、バッファリングされたオペレーション (追加の非同期機能なしの場合) は、void
のみを返すことができ、@Oneway
アノテーションが付けられている必要があります。値を返すオペレーションをバッファリングする場合は、呼び出し側のクライアント Web サービスからの非同期の要求と応答も使用する必要があります。詳細については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「非同期の要求と応答を使用した Web サービスの呼び出し」を参照してください。
バッファリングは、バッファされた一方のオペレーションをもう一方が呼び出す 2 つの Web サービスの間でのみ機能します。
@MessageBuffer
の省略可能な属性を使用すると、JMS キューによる、バッファされた Web サービス オペレーションの呼び出しが成功するまでの回数、およびその呼び出しの間隔を指定できます。
省略可能なクラスレベルの @BufferQueue
アノテーションを使用すると、呼び出しメッセージを入れる JMS キューを指定できます。このアノテーションを指定しなかった場合、メッセージは、デフォルト Web サービス キュー weblogic.wsee.DefaultQueue
に入れられます。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「バッファ付き Web サービスの作成」を参照してください。
表 3-16 weblogic.jws.MessageBuffer JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
retryCount |
呼び出された WebLogic Server インスタンスの JMS キューが、呼び出しメッセージを Web サービスの実装に問題なく配信できるまでの再試行回数を指定する。 デフォルト値は 3。 |
int |
省略可能 |
retryDelay |
メッセージ配信の再試行間隔を指定する。再試行間隔は、JMS キューの呼び出しメッセージと Web サービスの実装へのメッセージ配信までの間隔。 有効な値は数値で、以下のいずれか。
たとえば、2 日後に再試行する場合は、次のように指定する。 @MessageBuffer(retryDelay="2 days") デフォルト値は |
文字列 |
省略可能 |
以下の例では、JWS ファイルのコード スニペットを示します。ここでは、パブリック オペレーション sayHelloNoReturn
がバッファ付きで、WebLogic Server がオペレーションの呼び出しを入れている JMS キューが my.buffere.queue
と呼ばれています。呼び出された Web サービスをホストしている WebLogic Server インスタンスは、最大再試行回数 10 回、再試行間隔 10 秒で、JMS キュー内の呼び出しメッセージを Web サービスの実装に配信しようとしています。以下のスニペットでは、関連する Java コードのみを示します。
package examples.webservices.buffered; ... @WebService(name="BufferedPortType", serviceName="BufferedService", targetNamespace="http://example.org") @BufferQueue(name="my.buffer.queue") public class BufferedImpl { ... @WebMethod() @MessageBuffer(retryCount=10, retryDelay="10 seconds") @Oneway() public void sayHelloNoReturn(String message) { System.out.println("sayHelloNoReturn: " + message); } }
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
@weblogic.jws.Policy
アノテーションの配列を指定します。
このアノテーションは、複数の WS-Policy ファイルを JWS ファイルのクラスまたはメソッドにアタッチする場合に使用します。アタッチする WS-Policy ファイルが 1 つだけの場合は、@weblogic.jws.Policy
を単独で使用できます。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「Web サービスの信頼性のあるメッセージングの使用」および『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Web サービスのセキュリティ』の「メッセージレベルのセキュリティのコンフィグレーション」を参照してください。
この JWS アノテーションには、属性はありません。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
デジタル署名、暗号化、または Web サービスの信頼性のあるメッセージングに関する情報を格納している WS-Policy ファイルを要求または応答 SOAP メッセージに適用するように指定します。
このアノテーションを単独で使用すると、単一の WS-Policy ファイルをクラスまたはメソッドに適用できます。複数の WS-Policy ファイルをクラスまたはメソッドに適用する場合は、@weblogic.jws.Policies
アノテーションを使用し、WS-Policy ファイルをまとめて適用します。
このアノテーションをクラス レベルで指定した場合、WS-Policy ファイル (1 つまたは複数) は Web サービスのあらゆるパブリック オペレーションに適用されます。アノテーションをメソッド レベルで指定した場合、WS-Policy ファイルは、対応するオペレーションにのみ適用されます。
デフォルトでは、WS-Policy ファイルは要求 (着信) と応答 (発信) の両方の SOAP メッセージに適用されます。このデフォルトの動作は、direction
属性を使用して変更できます。
デフォルトではまた、指定した WS-Policy ファイルは、Web サービス用に生成されてパブリッシュされた WSDL ファイルにアタッチされるので、コンシューマは、Web サービスの WS-Policy に関するすべての要件を確認できます。このデフォルトの動作を変更するには、attachToWsdl
属性を使用します。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「Web サービスの信頼性のあるメッセージングの使用」および『Oracle Fusion Middleware Oracle WebLogic Server Web サービスのセキュリティ』の「メッセージレベルのセキュリティのコンフィグレーション」を参照してください。
注意 : すべての JWS のアノテーションにあてはまることですが、@Policy アノテーションは実行時にはオーバーライドできません。つまり、ビルド時にアノテーションを使用して指定した WS-Policy ファイルが、常に Web サービスに関連付けられることになります。これは、たとえば Administration Console を使用して実行時に関連付けられた WS-Policy ファイルを確認できても、それを削除 (関連付け解除) することはできないことを意味します。ただし、Administration Console を使用して追加の WS-Policy ファイルを関連付けることはできます。手順の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「WS-Policy ファイルと Web サービスとの関連付け」を参照してください。 |
表 3-17 weblogic.jws.Policies JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
uri |
WS-Policy ファイルを検索する場所を指定する。 Web 上の WS-Policy ファイルの URL を指定するには、 WS-Policy ファイルが WebLogic Server の Web サービス アーカイブ ファイルまたは共有可能な Java EE ライブラリにパッケージ化されていることを指定する場合は、以下の例のように @Policy(uri="policy:MyPolicyFile.xml") Web サービス アーカイブ形式で WS-Policy ファイルをパブリッシュする場合は、EJB JAR ファイル (EJB 実装の Web サービスの場合) の ライブラリ内の WS-Policy ファイルのパブリッシュの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server アプリケーションの開発』の「共有 J2EE ライブラリおよびオプション パッケージの作成」を参照。 |
文字列 |
必須 |
direction |
policy: を着信要求 SOAP メッセージに対して適用するか、発信応答 SOAP メッセージに対して適用するか、またはその両方 (デフォルト) に対して適用するかを指定する。 この属性の有効な値は以下のとおり。
デフォルト値は |
enum |
省略可能 |
attachToWsdl |
Web サービスを記述する WSDL に WS-Policy ファイルをアタッチするかどうかを指定する。 有効な値は、 |
ブール |
省略可能 |
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド
WebLogic Server による JMS キューから Web サービス実装へのメッセージ配信試行回数、およびサーバが待機すべき再試行間隔など、信頼性のある Web サービスのオペレーションに対する信頼性のあるメッセージングのプロパティを指定します。
注意 : JWS ファイルでこのアノテーションを指定する場合は、Web サービス用に信頼性のあるメッセージングを有効にするために、@Policy アノテーションで、Web サービスの信頼性のあるメッセージング ポリシー アサーションがある WS-Policy ファイルも指定していることを前提にしています。
|
Web サービスに対して信頼性のある Web サービス メッセージングを有効にする際の詳細については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「Web サービスの信頼性のあるメッセージングの使用」を参照してください。
表 3-18 weblogic.jws.ReliabilityBuffer JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
retryCount |
送り先の WebLogic Server インスタンスの JMS キューが、信頼性のあるオペレーションを呼び出すクライアントから Web サービスの実装にメッセージを配信する際の再試行回数を指定する。 デフォルト値は 3。 |
int |
省略可能 |
retryDelay |
メッセージ配信の再試行間隔を指定する。再試行間隔は、JMS キューにあるクライアントの要求メッセージと Web サービスの実装へのメッセージ配信までの間隔。 有効な値は数値で、以下のいずれか。
たとえば、2 日後に再試行する場合は、次のように指定する。 @ReliabilityBuffer(retryDelay="2 days") デフォルト値は |
文字列 |
省略可能 |
以下のサンプル スニペットでは、メソッドレベルで信頼性のあるオペレーションのデフォルトの再試行回数と再試行間隔を変更する @ReliabilityBuffer
アノテーションの使い方を示します。ここでは、関連する Java コードのみを示します。
package examples.webservices.reliable; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.Oneway; ... import weblogic.jws.ReliabilityBuffer; import weblogic.jws.Policy; @WebService(name="ReliableHelloWorldPortType", serviceName="ReliableHelloWorldService") ... @Policy(uri="ReliableHelloWorldPolicy.xml", direction=Policy.Direction.inbound, attachToWsdl=true) public class ReliableHelloWorldImpl { @WebMethod() @Oneway() @ReliabilityBuffer(retryCount=10, retryDelay="10 seconds") public void helloWorld(String input) { System.out.println(" Hello World " + input); } }
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド
クライアント Web サービスが信頼性のある Web サービスを呼び出したが、信頼性のある Web サービスが実際にそのメッセージを受け取ったという確認応答をそのクライアントが受信しなかった場合に発生するエラーを処理するメソッドを指定します。
このアノテーションは、Web サービスの信頼性のあるメッセージング機能を実装する場合にのみ関係します。アノテーションは、信頼性のある Web サービスを呼び出すクライアントサイドの Web サービスで指定します。
@ReliabilityErrorHandler
アノテーションを付けるメソッドでは、データ型 weblogic.wsee.reliability.ReliabilityErrorContext
のパラメータを 1 つ取ります。このコンテキストを使うと、エラーの原因 (エラーの原因となったオペレーション、対象 Web サービス、障害など) に関する詳細な情報を取得できます。メソッドは、void
を返す必要があります。
@ReliabilityErrorHandler
アノテーションの 1 つの属性では、クライアント Web サービスが呼び出している信頼性のある Web サービスのスタブ情報を注入した変数を指定します。この情報は、@weblogic.jws.ServiceClient
アノテーションを使って変数に注入します。
信頼性のある Web サービスを呼び出すクライアント Web サービスの次のコードでは、@ReliabilityErrorHandler
アノテーションの使用方法を示します。ここでは、コードの一部のみが示され、このアノテーションに関連するコードについては太字で示されています。
package examples.webservices.reliable; ... import weblogic.jws.ServiceClient; import weblogic.jws.ReliabilityErrorHandler; import examples.webservices.reliable.ReliableHelloWorldPortType; import weblogic.wsee.reliability.ReliabilityErrorContext; import weblogic.wsee.reliability.ReliableDeliveryException; @WebService(name="ReliableClientPortType", ... public class ReliableClientImpl { @ServiceClient( wsdlLocation="http://localhost:7001/ReliableHelloWorld/ReliableHelloWorld?WSDL", serviceName="ReliableHelloWorldService", portName="ReliableHelloWorldServicePort") private ReliableHelloWorldPortType port; @WebMethod public void callHelloWorld(String input, String serviceUrl) throws RemoteException { ... } @ReliabilityErrorHandler(target="port") public void onReliableMessageDeliveryError(ReliabilityErrorContext ctx) { ReliableDeliveryException fault = ctx.getFault(); String message = null; if (fault != null) { message = ctx.getFault().getMessage(); } String operation = ctx.getOperationName(); System.out.println("Reliable operation " + operation + " may have not invoked. The error message is " + message); } }
上の例では、port
変数は ReliableHelloWorldService
Web サービスに対応するスタブで注入されており、クライアント Web サービスの特定の場所で、このスタブのオペレーションが呼び出されると見なされます。onReliableMessageDeliveryError
メソッドは、@ReliabilityErrorHandler
アノテーションが付けられ、port
スタブとリンクされているため、信頼性のある Web サービスの呼び出しにおいて障害が発生した場合、このメソッドが呼び出されます。信頼性のあるエラー処理メソッドでは、ReliabilityErrorContext
オブジェクトを使用して、このエラーの原因の詳細を取得します。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
@weblogic.jws.SecurityPolicy
アノテーションの配列を指定します。
このアノテーションは、複数の Oracle Web Services Manager (Oracle WSM) WS-Policy ファイルを JWS ファイルのクラスまたはメソッドにアタッチする場合に使用します。アタッチする Oracle WSM WS-Policy ファイルが 1 つだけの場合は、@weblogic.jws.Security Policy
を単独で使用できます。
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービスのセキュリティ』の「Oracle Web サービス セキュリティ ポリシー の使用」を参照してください。
この JWS アノテーションには、属性はありません。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
デジタル署名または暗号化に関する情報を格納している Oracle Web Services Manager (Oracle WSM) WS-Policy ファイルを要求または応答 SOAP メッセージに適用するように指定します。
このアノテーションを単独で使用すると、単一の Oracle WSM WS-Policy ファイルをクラスまたはメソッドに適用できます。複数の Oracle WSM WS-Policy ファイルをクラスまたはメソッドに適用する場合は、@weblogic.jws.SecurityPolicies
アノテーションを使用し、Oracle WSM WS-Policy ファイルをまとめて適用します。
このアノテーションをクラス レベルでのみ指定すると、Oracle WSM WS-Policy ファイル (1 つまたは複数) は Web サービスのあらゆるパブリック オペレーションに適用されていることを示します。
Oracle WSM WS-Security ポリシーは WebLogic Server JAX-WS Web サービスの WSDL に公開されません。(通常、Web サービスに関連付けられたポリシー ファイルはその WSDL にアタッチされます。Web サービス クライアント ランタイムはこれを読み取り、クライアント アプリケーションから呼び出されたオペレーションからの SOAP メッセージ リクエストのデジタル署名やデジタル暗号化を行うかどうかを判別したり、行う場合はその方法を判別したりします。)
このアノテーションの詳細および使用例については、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Web サービスのセキュリティ』の「Oracle Web サービス セキュリティ ポリシー の使用」を参照してください。
注意 : すべての JWS のアノテーションにあてはまることですが、@SecurityPolicy アノテーションは実行時にはオーバーライドできません。つまり、ビルド時にアノテーションを使用して指定した Oracle WSM WS-Policy ファイルが、常に Web サービスに関連付けられることになります。これは、たとえば Administration Console を使用して実行時に関連付けられた Oracle WSM WS-Policy ファイルを確認できても、それを削除 (関連付け解除) することはできないことを意味します。ただし、Administration Console を使用して追加の Oracle WSM WS-Policy ファイルを関連付けることはできます。手順の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Web サービスのセキュリティ』の「Administration Console で Oracle WSM セキュリティ ポリシーのコンフィグレーション」を参照してください。 |
表 3-20 weblogic.jws.SecurityPolicy JWS アノテーション タグ属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
uri |
Oracle WSM WS-Policy ファイルを取得する場所を指定する。 Web 上の Oracle WSM WS-Policy ファイルの URL を指定するには、 Oracle WSM WS-Policy ファイルが WebLogic Server の Web サービス アーカイブ ファイルまたは共有可能な Java EE ライブラリにパッケージ化されていることを指定する場合は、以下の例のように @SecurityPolicy(uri= "policy:oracle/wss10_username_token_with_message_protection_server_policy") 環境にカスタム Oracle WSM WS-Policy を追加するには、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Web サービスのセキュリティ』の「カスタム Oracle WSM WS-Security ポリシーの追加」を参照。 |
文字列 |
必須 |
以降の節では、アノテーションを詳細に説明します。
対象 : フィールド
JWS ファイルのアノテーション付き変数が、以下の機能を使用するときに、別の WebLogic Web サービスを呼び出すスタブであることを指定します。
Web サービスの信頼性のあるメッセージング
非同期の要求/応答
会話
信頼性のあるメッセージング機能および非同期の要求と応答機能は、2 つの Web サービスの間でのみ使用します。つまり、たとえば、スタンドアロン クライアントからではなく、別の Web サービスからのみ信頼性のある Web サービス オペレーションを呼び出すことができます。信頼性のあるメッセージングの場合は、http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf
にある WS-ReliableMessaging 仕様を実装された任意の 2 つのアプリケーション サーバ間で機能します。非同期の要求と応答機能は、2 つの WebLogic Server インスタンス間でのみ機能します。
クライアント Web サービスの場合、どの変数が、@ServiceClient
属性で記述した Web サービスのポートのタイプかを指定するには、@ServiceClient
アノテーションを使用します。クライアント Web サービスを格納するエンタープライズ アプリケーションも、呼び出している Web サービスのスタブを含んでいる必要があります。このスタブは、clientgen
Ant タスクで生成します。
@ServiceClient
アノテーションの詳細および使用例については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス プログラマーズ ガイド』を参照してください。
表 3-21 weblogic.jws.ServiceClient JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
serviceName |
呼び出す Web サービスの名前を指定する。呼び出された Web サービスの WSDL にある JWS ファイルを使用して、呼び出された Web サービスを実装した場合、この属性は、その Web サービスの |
文字列 |
必須 |
portName |
呼び出す Web サービスのポート名を指定する。 JWS ファイルを使用して、呼び出された Web サービスを実装した場合、この属性は、その Web サービスの この属性を指定しなかった場合、WSDL の |
文字列 |
省略可能 |
wsdlLocation |
呼び出す Web サービスを記述する WSDL ファイルを指定する。 この属性を指定しなかった場合、クライアント Web サービスが使用する WSDL ファイルは、呼び出される Web サービスの |
文字列 |
省略可能 |
endpointAddress |
呼び出す Web サービスのエンドポイント アドレスを指定する。 この属性を指定しなかった場合、クライアント Web サービスは、WSDL ファイルで指定したエンドポイント アドレスを使用する。 |
文字列 |
省略可能 |
以下の JWS ファイルの抜粋では、クライアント Web サービスで @ServiceClient
アノテーションを使用し、呼び出される Web サービス (WSDL が http://localhost:7001/ReliableHelloWorld/ReliableHelloWorld?WSDL
という URL 上にある ReliableHelloWorldService
) のスタブでフィールド (port
) にアノテーションを付ける方法を示します。ここでは、関連する部分のみを示します。
package examples.webservices.reliable; import javax.jws.WebService; ... import weblogic.jws.ServiceClient; import examples.webservices.reliable.ReliableHelloWorldPortType; @WebService(... public class ReliableClientImpl { @ServiceClient( wsdlLocation="http://localhost:7001/ReliableHelloWorld/ReliableHelloWorld?WSDL", serviceName="ReliableHelloWorldService", portName="ReliableHelloWorldServicePort") private ReliableHelloWorldPortType port; @WebMethod public void callHelloWorld(String input, String serviceUrl) throws RemoteException { port.helloWorld(input); System.out.println(" Invoked the ReliableHelloWorld.helloWorld operation reliably." ); } }
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
WebLogic Web サービス ランタイムで、Web サービスのすべてのメソッド パラメータを読み込む際に Streaming API を使用するように指定します。これによって、特に画像など、大きなパラメータの場合に Web サービス オペレーションの呼び出しのパフォーマンスが向上します。
同じ Web サービスで次の機能も使用している場合、このアノテーションは使用できません。
会話
信頼性のあるメッセージング
JMS 転送
クライアント アプリケーションと呼び出し対象の Web サービスとの間のプロキシ サーバ
@StreamAttachments
アノテーションには、属性はありません。
次に、@StreamAttachments
アノテーションを指定する簡単な JWS ファイルを示します。単一のメソッド echoAttachment()
は DataHandler
パラメータを取り、Web サービス オペレーションを呼び出したクライアント アプリケーションにエコー バックします。WebLogic Web サービス ランタイムでは、DataHandler の内容を読み込む際にストリーミングが使用されます。
package examples.webservices.stream_attach; import javax.jws.WebMethod; import javax.jws.WebService; import weblogic.jws.WLHttpTransport; import weblogic.jws.StreamAttachments; import javax.activation.DataHandler; import java.rmi.RemoteException; @WebService(name="StreamAttachPortType", serviceName="StreamAttachService", targetNamespace="http://example.org") @WLHttpTransport(contextPath="stream_attach", serviceUri="StreamAttachService", portName="StreamAttachServicePort") @StreamAttachments /** * 添付ファイルのストリーミング例 */ public class StreamAttachImpl { @WebMethod() public DataHandler echoAttachment(DataHandler dh) throws RemoteException { return dh; } }
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
アノテーション付きのオペレーション、またはアノテーションがクラスレベルで指定されている場合は JWS ファイルのすべてのオペレーションがトランザクション内で実行されるかどうかを指定します。デフォルトでは、オペレーションはトランザクションでは実行されません。
以下の例では、@Transactional
アノテーションを使って、Web サービスのオペレーションがトランザクションの一部として実行されるように指定する方法を示します。
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") /** * この JWS ファイルは、1 つのオペレーション sayHello を含む簡単な * WebLogic Web サービスの基本となる。 オペレーションはトランザクションの * 一部として実行される。 */ public class TransactionPojoImpl { @WebMethod() @Transactional(value=true) public String sayHello(String message) { System.out.println("sayHello:" + message); return "Here is the message: '" + message + "'"; } }
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド、パラメータ
戻り値またはパラメータの代替データ型の完全修飾 Java クラス名のカンマ区切りリストを指定します。代替データ型は、メソッド シグネチャで指定されたデータ型を拡張する必要があります。これに当てはまらない場合、JWS ファイルを Web サービスにコンパイルする際に jwsc
Ant タスクは検証エラーを返します。
たとえば、Address
基本データ型を作成してから、この基本型を拡張する USAAddress
および CAAddress
を作成しているものと仮定します。メソッド シグネチャで、この型が Address
パラメータを取ることが指定されている場合、このパラメータに @Types
アノテーションを付け、パブリック オペレーションでも、基本 Address
データ型の他に、パラメータとして USAAddress
および CAAddress
を取るように指定できます。
このアノテーションを使うと、java.util.Collection
または java.util.List
など、コレクション データ型の戻り値またはパラメータに格納可能なデータ型を制限することもできます。許容される格納データ型を制限することによって、生成される WSDL は明確で一義的となり、クライアント アプリケーションが Web サービス オペレーションを呼び出す際、Web サービス ランタイムはパラメータの適格確認処理を効率よく実行できます。
このアノテーションをメソッド レベルで指定すると、適用対象は戻り値に限定されます。アノテーションをパラメータに適用する場合、各関連パラメータについて、パラメータ レベルで指定する必要があります。
次の例では、@Types
アノテーションを使用する簡単な JWS ファイルを示します。関連する Java コードは太字で示しています。
package examples.webservices.types; import javax.jws.WebMethod; import javax.jws.WebService; import weblogic.jws.WLHttpTransport; import weblogic.jws.Types; import examples.webservices.types.BasicStruct; @WebService(serviceName="TypesService", name="TypesPortType", targetNamespace="http://example.org") @WLHttpTransport(contextPath="types", serviceUri="TypesService", portName="TypesServicePort") public class TypesImpl { @WebMethod() @Types({"examples.webservices.types.ExtendedStruct"}) public BasicStruct echoStruct( @Types({"examples.webservices.types.ExtendedStruct"}) BasicStruct struct) { System.out.println("echoStruct called"); return struct; } }
上の例では、echoStruct()
メソッドのシグネチャにおいて、パラメータおよび戻り値の両方として BasicStruct
値を取ることが示されています。ただし、メソッドおよび struct
パラメータはともに @Types
アノテーションが付けられているため、echoStruct
オペレーションを呼び出すクライアント アプリケーションは、データ型 ExtendedStruct
のパラメータも渡すことができます。この場合、オペレーションも ExtendedStruct
値を返します。ここでは、ExtendedStruct
が BasicStruct
を拡張するものと見なされています。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
javax.xml.soap.SOAPElement
または org.apache.xmlbeans.XmlObject
などのワイルドカード クラスがバインドする先の XML スキーマ データ型を指定します。デフォルトでは、これらの Java データ型は <xsd:any>
XML スキーマ データ型にバインドされます。このクラス レベルのアノテーションを使用すると、ワイルドカード クラスを代わりに <xsd:anyType>
にバインドするように指定できます。
表 3-24 weblogic.jws.WildcardBinding JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
className |
このバインドが適用されるワイルドカード クラスの完全修飾名を指定する。一般的な値は |
String |
必須 |
binding |
ワイルドカード クラスがバインドする先の XML スキーマ データ型を指定する。 以下のいずれかの値を指定可能。
|
enum |
必須 |
次に、@WildcardBinding
アノテーションを使って、Apache XMLBeans データ型の XMLObject が、この Web サービスの <xsd:any>
XML スキーマ データ型にバインドされるように指定する例を示します。
@WildcardBindings({ @WildcardBinding(className="org.apache.xmlbeans.XmlObject", binding=WildcardParticle.ANY), @WildcardBinding(className="org.apache.xmlbeans.XmlObject[]", binding=WildcardParticle.ANY)}) public class SimpleImpl { ...
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
@weblogic.jws.WildcardBinding
アノテーションの配列を指定します。
この JWS アノテーションには、属性はありません。
例については、weblogic.jws.WildcardBinding を参照してください。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
生成された WSDL のポート名に加え、HTTP 転送形式で Web サービスを呼び出すために使用するコンテキスト パスおよび URL のサービス URI セクションを指定します。
このアノテーションは、JWS ファイル内で最大で一度だけ指定できます。
表 3-25 weblogic.jws.WLHttpTransport JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
contextPath |
Web サービスのコンテキスト パス。この値は、Web サービスを呼び出す URL 内で使用する。 たとえば、Web サービスのコンテキスト パスを http://hostname:7001/financial/GetQuote?WSDL この属性のデフォルト値は JWS ファイルの名前。ただし、拡張子は付かない。たとえば、JWS ファイルが |
文字列 |
省略可能 |
serviceUri |
URL の Web サービス URI 部分。この値は、Web サービスを呼び出す URL 内で使用する。 たとえば、この属性を http://hostname:7001/financial/GetQuote?WSDL この属性のデフォルト値は JWS ファイルの名前。ただし、拡張子は付かない。たとえば、JWS ファイルが |
文字列 |
省略可能 |
portName |
生成された WSDL のポートの名前。この属性は、WSDL の この属性のデフォルト値は、JWS ファイルの |
文字列 |
省略可能 |
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
注意 : @weblogic.jws.WLHttpsTransport アノテーションは、WebLogic Server 9.2 で非推奨になりました。代わりに、@weblogic.jws.WLHttpTransport アノテーションを使用してください。これは HTTP および HTTPS プロトコルを両方ともサポートするようになったためです。クライアント アプリケーションに HTTPS プロトコルのみを使用して Web サービスにアクセスさせるには、JWS ファイルで @weblogic.jws.security.UserDataConstraint JWS アノテーションを指定する必要があります。 |
生成された WSDL のポート名に加え、HTTPS 転送形式で Web サービスを呼び出すために使用するコンテキスト パスおよび URL のサービス URI セクションを指定します。
このアノテーションは、JWS ファイル内で最大で一度だけ指定できます。
表 3-26 weblogic.jws.WLHttpsTransport JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
contextPath |
Web サービスのコンテキスト パス。この値は、Web サービスを呼び出す URL 内で使用する。 たとえば、Web サービスのコンテキスト パスを https://hostname:7001/financial/GetQuote?WSDL この属性のデフォルト値は JWS ファイルの名前。ただし、拡張子は付かない。たとえば、JWS ファイルが |
文字列 |
省略可能 |
serviceUri |
URL の Web サービス URI 部分。この値は、Web サービスを呼び出す URL 内で使用する。 たとえば、この属性を https://hostname:7001/financial/GetQuote?WSDL この属性のデフォルト値は JWS ファイルの名前。ただし、拡張子は付かない。たとえば、JWS ファイルが |
文字列 |
省略可能 |
portName |
生成された WSDL のポートの名前。この属性は、WSDL の この属性のデフォルト値は、JWS ファイルの |
文字列 |
省略可能 |
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
生成された WSDL のポート名に加え、JMS 転送形式で Web サービスを呼び出すために使用するコンテキスト パスおよび URL のサービス URI セクションを指定します。WebLogic Server がオペレーションの呼び出しの SOAP 要求メッセージを入れる JMS キューを指定する場合にも、このアノテーションを使用します。
このアノテーションは、JWS ファイル内で最大で一度だけ指定できます。
表 3-27 weblogic.jws.WLJmsTransport JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
contextPath |
Web サービスのコンテキスト パス (コンテキスト ルート)。この値は、Web サービスを呼び出す URL 内で使用する。 |
文字列 |
省略可能 |
serviceUri |
クライアント アプリケーションが Web サービスの呼び出しに使用する URL の Web サービス URI 部分。 |
文字列 |
省略可能 |
queue |
JMS 転送用にコンフィグレーション済みの JMS キューの JNDI 名。JMS 転送の使用の詳細については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「接続プロトコルとしての JMS 転送の使用」を参照。 この属性を指定しない場合のデフォルト値は |
文字列 |
省略可能 |
portName |
生成された WSDL のポートの名前。この属性は、WSDL の この属性を指定しない場合、 |
文字列 |
省略可能 |
connectionFactory |
JMS 転送用にコンフィグレーション済みの JMS 接続ファクトリの JNDI 名。JMS 転送の使用の詳細については、『Oracle Fusion Middleware JAX-RPC を使用した Oracle WebLogic Server Web サービス プログラマーズ ガイド』の「接続プロトコルとしての JMS 転送の使用」を参照。 |
文字列 |
必須 |
以下の例では、JMS 転送を使用して呼び出される Web サービスが JWS ファイルで実装されるように指定する方法を示します。WebLogic Server が、サービス オペレーションの呼び出しにある SOAP メッセージ要求を入れる JMS キューは JMSTransportQueue
です。ここでは、この JMS キューは WebLogic Server 用にすでにコンフィグレーションされていることを前提としています。
WLJmsTransport(contextPath="transports", serviceUri="JMSTransport", queue="JMSTransportQueue", portName="JMSTransportServicePort")
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
デプロイされた WebLogic Web サービスの WSDL をエクスポーズするかどうかを指定します。
デフォルトでは、WSDL は次の URL でエクスポーズされます。
http://[host]:[port]/[contextPath]/[serviceUri]?WSDL
各要素の説明は次のとおりです。
host - WebLogic Server が動作しているコンピュータの名前。
port - WebLogic Server がリスンしているポート番号 (デフォルト値は 7001
)。
contextPath
は、Web サービスを実装する JWS ファイルの @WLHttpTransport
JWS アノテーションで指定されている contextPath
属性の値、serviceUri
は serviceUri
属性の値を指す。
たとえば、次の @WLHttpTransport
アノテーションを使用しているとします。
@WLHttpTransport(portName="helloPort", contextPath="hello", serviceUri="SimpleImpl")
Web サービスが ariel
というホストのデフォルトのポート番号で実行されているとすると、その Web サービスの WSDL を表示する URL は次のとおりです。
http://ariel:7001/hello/SimpleImpl?WSDL
以下の @WSDL
アノテーションの使用例では、デプロイされる Web サービスの WSDL がエクスポーズされないように指定する方法を示します。ここでは、関連する Java コードのみを示します。
package examples.webservices;
import weblogic.jws.WSDL;
@WebService(name="WsdlAnnotationPortType",
serviceName="WsdlAnnotationService",
targetNamespace="http://example.org")
@WSDL(exposed=false)
public class WsdlAnnotationImpl {
...
}
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド、フィールド
Web サービスのコールバック メソッドを呼び出す許可を与えられたロールをリストする @SecurityRole
JWS アノテーションの配列を指定します。未指定のロールにマップされたユーザ、またはロールにマップされていないユーザは、コールバック メソッドの呼び出しを許可されません。
このアノテーションをフィールド レベルで使用した場合、指定したロールは、Web サービスのすべてのコールバック オペレーションの呼び出しを許可されます。このアノテーションをメソッド レベルで使用した場合、指定したロールは、コールバック メソッドのみの呼び出しを許可されます。両方のレベルで指定し、衝突がある場合、メソッド値がフィールド値をオーバーライドします。
表 3-29 weblogic.jws.security.CallbackRolesAllowed JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
value |
コールバック メソッドの呼び出しを許可されたロールをリストする |
文字列 |
必須 |
次に、メソッド レベルで @CallbackRolesAllowed
アノテーションを使って、ロール engineer
がコールバック メソッドの呼び出しを許可されるように指定する例を示します。
@CallbackMethod(target="port", operation="callbackOperation")
@CallbackRolesAllowed(@SecurityRole(role="engineer", mapToPrincipals="shackell"))
public void callbackHandler(String msg) {
System.out.println (msg);
}
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
Web サービスの基本認証を有効にするかどうかを指定します。具体的には、これは Web サービスを呼び出す許可を与えられたロールのリストを記述した @SecurityRole
JWS アノテーションの配列を指定します。未指定のロールにマップされたユーザ、またはロールにマップされていないユーザは、Web サービスの呼び出しを許可されません。
このアノテーションをクラス レベルで使用した場合、指定したロールは、Web サービスのすべてのオペレーションの呼び出しを許可されます。特定のオペレーション群のみに対してロールを指定するには、アノテーションをオペレーションレベルで指定します。
表 3-30 weblogic.jws.security.RolesAllowed JWS アノテーション タグの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
value |
Web サービス メソッドの呼び出しを許可されたロールをリストする |
文字列 |
必須 |
package examples.webservices.security_roles; ... import weblogic.jws.security.RolesAllowed; import weblogic.jws.security.SecurityRole; @WebService(name="SecurityRolesPortType", serviceName="SecurityRolesService", targetNamespace="http://example.org") @RolesAllowed ( { @SecurityRole (role="manager", mapToPrincipals={ "juliet","amanda" }), @SecurityRole (role="vp") } ) public class SecurityRolesImpl { ...
この例では、ロール manager
および vp
のみが Web サービスの呼び出しを許可されています。Web サービスのコンテキスト内で、ユーザ juliet
および amanda
にはロール manager
が割り当てられます。しかしロール vp
には、ユーザが外部でこのロールにマップされたことを示唆する mapToPrincipals
属性が含まれていません。ここでは、2 人のユーザ juliet
および amanda
が WebLogic Server セキュリティ レルムにすでに追加されていることが前提となっています。
対象 : クラス
Web サービスの呼び出しが許可されている実際のロールを参照する、ロール名のリストを指定します。具体的には、@SecurityRoleRef
JWS アノテーションの配列を指定します。各アノテーションには、参照されるロール名と、@SecurityRole
アノテーションで定義される実際のロールの間のリンクが記述されています。
この JWS アノテーションには、属性はありません。
package examples.webservices.security_roles; ... import weblogic.jws.security.RolesAllowed; import weblogic.jws.security.SecurityRole; import weblogic.jws.security.RolesReferenced; import weblogic.jws.security.SecurityRoleRef; @WebService(name="SecurityRolesPortType", serviceName="SecurityRolesService", targetNamespace="http://example.org") @RolesAllowed ( { @SecurityRole (role="manager", mapToPrincipals={ "juliet","amanda" }), @SecurityRole (role="vp") } ) @RolesReferenced ( @SecurityRoleRef (role="mgr", link="manager") ) public class SecurityRolesImpl { ...
この例では、ロール mgr
は Web サービスの呼び出しを許可されているロール manager
にリンクされています。つまり、mgr
のロールに割り当てられたユーザはすべて、Web サービスの呼び出しを許可されているということです。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
WebLogic Server 内の Web サービスを実際に実行するロールおよびユーザ ID を指定します。
たとえば、@RunAs
アノテーションが、roleA
ロールと userA
プリンシパルを指定すると仮定します。これは、Web サービスが userB
(roleB
にマップされている) によって呼び出された場合でも、関連のオペレーションは内部で実際には userA
として実行されているということです。
表 3-31 weblogic.jws.security.RunAs JWS アノテーションの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
role |
Web サービスが実行されるロールを指定する。 |
String |
必須 |
mapToPrincipal |
ロールにマップするプリンシパル ユーザを指定する。 通常は Administration Console を使用して、指定されたプリンシパル (ユーザ) を有効な WebLogic Server ユーザとしてコンフィグレーション済みであることが前提となっている。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ユーザの作成」を参照。 |
文字列 |
必須 |
package examples.webservices.security_roles; import weblogic.jws.security.RunAs; ... @WebService(name="SecurityRunAsPortType", serviceName="SecurityRunAsService", targetNamespace="http://example.org") @RunAs (role="manager", mapToPrincipal="juliet") public class SecurityRunAsImpl { ...
この例では、どのユーザによって呼び出されたかに関係なく、Web サービスを常にロール manager
にマップされているユーザ juliet
として実行するということを指定する方法を示します。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
Web サービスの呼び出しを許可されているロールの名前を指定します。このアノテーションは、JWS ファイルの中で常に @RolesAllowed
配列のメンバーとして指定されます。
クライアント アプリケーションは保護された Web サービスを呼び出す際、基本認証の一部としてユーザおよびパスワードを指定します。管理者は Administration Console を使用してユーザを有効な WebLogic Server ユーザとしてコンフィグレーション済みであることが前提となっています。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ユーザの作成」を参照してください。
Web サービスを呼び出すユーザは、関連のロールにもマップされている必要があります。このタスクは、次の 2 つの方法のいずれかによって実行できます。
Administration Console でユーザをロールにマップする。この場合、@SecurityRole
アノテーションの mapToPrincipals
属性は指定しません。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ロールへのユーザの追加」を参照してください。
mapToPrincipals
属性を使用して 1 人以上のユーザを指定することで、Web サービスのコンテキスト内でのみユーザをロールにマップする。
複数のロールが Web サービスの呼び出しを許可されていることを指定するには、複数の @SecurityRole
アノテーションを @RolesAllowed
アノテーション内に含めます。
package examples.webservices.security_roles; ... import weblogic.jws.security.RolesAllowed; import weblogic.jws.security.SecurityRole; @WebService(name="SecurityRolesPortType", serviceName="SecurityRolesService", targetNamespace="http://example.org") @RolesAllowed ( { @SecurityRole (role="manager", mapToPrincipals={ "juliet","amanda" }), @SecurityRole (role="vp") } ) public class SecurityRolesImpl { ...
この例では、ロール manager
および vp
のみが Web サービスの呼び出しを許可されています。Web サービスのコンテキスト内で、ユーザ juliet
および amanda
にはロール manager
が割り当てられます。しかしロール vp
には、ユーザが外部でこのロールにマップされたことを示唆する mapToPrincipals
属性が含まれていません。ここでは、2 人のユーザ juliet
および amanda
が WebLogic Server セキュリティ レルムにすでに追加されていることが前提となっています。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
Web サービスの呼び出しを許可されている、指定済みのロールにリンクするロール名参照を指定します。
ロール参照にマップされたユーザは、参照されたロールが Web サービスの @RolesAllowed
アノテーションで指定されている限り、Web サービスを呼び出すことができます。
package examples.webservices.security_roles; ... import weblogic.jws.security.RolesAllowed; import weblogic.jws.security.SecurityRole; import weblogic.jws.security.RolesReferenced; import weblogic.jws.security.SecurityRoleRef; @WebService(name="SecurityRolesPortType", serviceName="SecurityRolesService", targetNamespace="http://example.org") @RolesAllowed ( { @SecurityRole (role="manager", mapToPrincipals={ "juliet","amanda" }), @SecurityRole (role="vp") } ) @RolesReferenced ( @SecurityRoleRef (role="mgr", link="manager") ) public class SecurityRolesImpl { ...
この例では、ロール mgr
は Web サービスの呼び出しを許可されているロール manager
にリンクされています。つまり、mgr
のロールに割り当てられたユーザはすべて、Web サービスの呼び出しを許可されているということです。
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
クライアントが Web サービスを呼び出す際に、HTTPS 転送の使用が必要であるかどうかを指定します。
WebLogic Server は、このアノテーションの transport
属性が、Web サービスを実装する JWS ファイル内で Transport.INTEGRAL
と Transport.CONFIDENTIAL
のうちのいずれかに設定されていると、クライアントと Web サービスの間にセキュア ソケット レイヤ (SSL) 接続を確立します。
このアノテーションを JWS ファイル内で指定した場合は、weblogic.jws.WLHttpTransport アノテーション (または、jwsc
Ant タスクの<WLHttpTransport>
要素) も指定して、HTTPS バインディングが jwsc
Ant タスクによって WSDL ファイル内に確実に生成されるようにする必要があります。
表 3-34 weblogic.jws.security.UserDataConstraint JWS アノテーションの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
transport |
クライアントが Web サービスを呼び出す際に、HTTPS 転送の使用が必要であるかどうかを指定する。 有効な値は以下のとおり。
デフォルト値は |
enum |
省略可能 |
package examples.webservices.security_https; import weblogic.jws.security.UserDataConstraint; ... @WebService(name="SecurityHttpsPortType", serviceName="SecurityHttpsService", targetNamespace="http://example.org") @UserDataConstraint( transport=UserDataConstraint.Transport.CONFIDENTIAL) public class SecurityHttpsImpl { ...
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
Web サービスで使用する Web サービス セキュリティ コンフィグレーションの名前を指定します。JWS ファイルでこのアノテーションを指定しなかった場合、デフォルトのセキュリティ コンフィグレーション (default_wss
) をドメインで作成済みであれば、Web サービスは、そのセキュリティ コンフィグレーションに関連付けられます。
@WssConfiguration
アノテーションは、Web サービスでメッセージレベルのセキュリティ (暗号化およびデジタル署名) がコンフィグレーションされている場合にのみ有効です。このアノテーションを使用して Web サービスに関連付けられたセキュリティ コンフィグレーションでは、ID の認証に X.509 証明書を使用するかどうか、パスワード ダイジェストを使用するかどうか、暗号化やデジタル署名にキーストアを使用するかどうかなどを指定します。
WebLogic Web サービスは、必ずしもセキュリティ コンフィグレーションと関連付ける必要はありません。Web サービスのセキュリティ ランタイムのデフォルトの動作が十分なものであれば、追加のコンフィグレーションは不要です。しかし、Web サービスでデフォルトとは異なる動作が必要とされる場合 (ID の認証に、デフォルトのユーザ名/パスワードのトークンではなく X.509 証明書を使用する場合など) は、Web サービスにセキュリティ コンフィグレーションを関連付ける必要があります。
セキュリティ コンフィグレーションを指定した Web サービスを呼び出すことができるようにするには、あらかじめ Administration Console でセキュリティ コンフィグレーションを作成しておく必要があります。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「Web サービス セキュリティ コンフィグレーションの作成」を参照してください。メッセージレベルのセキュリティの概要については、『Oracle Fusion Middleware Oracle WebLogic Server WebLogic Web サービスのセキュリティ』の「メッセージレベルのセキュリティ のコンフィグレーション」を参照してください。
注意 : @WssConfiguration アノテーションを使用する場合、単一の Web アプリケーションにパッケージ化されているすべての WebLogic Web サービスは同じセキュリティ コンフィグレーションに関連付けられている必要があります。たとえば、特定の Web アプリケーションに含まれる Web サービスを実装するすべての JWS ファイルに @WssConfiguration アノテーションが存在している場合は、各 @WssConfiguration の value 属性が同じでなければなりません。
|
以下の例では、Web サービスが my_security_configuration
セキュリティ コンフィグレーションに関連付けられるように指定する方法を示します。ここでは、関連する Java コードのみを示します。
package examples.webservices.wss_configuration; import javax.jws.WebService; ... import weblogic.jws.security.WssConfiguration; @WebService(... ... @WssConfiguration(value="my_security_configuration") public class WssConfigurationImpl { ...
以降の節では、アノテーションを詳細に説明します。
対象 : メソッド
SOAP メッセージ プロトコルに対する Web サービス オペレーションのマッピングを指定します。
このアノテーションは、@javax.jws.soap.SOAPBinding
に似ていますが、クラスではなく、メソッドに適用される点が異なります。たとえば、このアノテーションを使用すると、ある Web サービス オペレーションで RPC エンコードの SOAP バインディングを使用し、同じ Web サービスの別のオペレーションでは document-literal-wrapped の SOAP バインディングを使用するように指定できます。
注意 : @weblogic.jws.soap.SOAPBinding および @javax.jws.soap.SOAPBinding は同じクラス名を持つため、JWS ファイルで使用する際は、どちらのアノテーションを指しているかに注意する必要があります。 |
表 3-36 weblogic.jws.soap.SOAPBinding JWS アノテーションの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
style |
呼び出されたアノテーション付きオペレーションの要求および応答の SOAP メッセージのメッセージ スタイルを指定する。 有効な値は以下のとおり。
デフォルト値は |
enum |
省略可能 |
use |
呼び出されたアノテーション付きオペレーションの要求および応答の SOAP メッセージのフォーマット スタイルを指定する。 有効な値は以下のとおり。
デフォルト値は |
enum |
省略可能 |
parameterStyle |
メソッド パラメータがメッセージ本文を表しているかどうか、パラメータがオペレーションに基づく名前の最上位の要素内にラップされている要素かどうかを判別する。 有効な値は以下のとおり。
デフォルト値は 注意 : この属性は、ドキュメントリテラル形式の Web サービスに対してのみ有効となる。つまり、 |
enum |
省略可能 |
次に、Web サービスのオペレーションが document-literal-wrapped の SOAP バインディングをデフォルトで使用するように指定する簡単な JWS ファイルを示します。これは、@javax.jws.soap.SOAPBinding
アノテーションをクラス レベルで使用することによって指定できます。この例では、@weblogic.jws.soap.SOAPBinding
アノテーションをメソッド レベルで使用して個々のメソッドに異なる SOAP バインディングを指定する方法も示します。具体的には、sayHelloDocLitBare()
メソッドでは document-literal-bare の SOAP バインディングを使用し、sayHelloRPCEncoded()
メソッドでは RPC エンコードの SOAP バインディングを使用します。
package examples.webservices.soap_binding_method; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import weblogic.jws.WLHttpTransport; @WebService(name="SoapBindingMethodPortType", serviceName="SoapBindingMethodService", targetNamespace="http://example.org") @SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED) @WLHttpTransport(contextPath="soap_binding_method", serviceUri="SoapBindingMethodService", portName="SoapBindingMethodServicePort") /** * メソッドの SOAP バインディングを指定する簡単な JWS の例 */ public class SoapBindingMethodImpl { @WebMethod() @weblogic.jws.soap.SOAPBinding( style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.BARE) public String sayHelloDocLitBare(String message) { System.out.println("sayHelloDocLitBare" + message); return "Here is the message: '" + message + "'"; } @WebMethod() @weblogic.jws.soap.SOAPBinding( style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.ENCODED) public String sayHelloRPCEncoded (String message) { System.out.println("sayHelloRPCEncoded" + message); return "Here is the message: '" + message + "'"; } }
以降の節では、アノテーションを詳細に説明します。
対象 : クラス、メソッド
注意 : WebLogic Server 9.0 以降では、@weblogic.security.jws.SecurityRoles JWS アノテーションは非推奨となっています。 |
Web サービスのオペレーションにアクセスできるロールを指定します。
このアノテーションをクラス レベルで指定した場合、指定したロールは、Web サービスのすべてのパブリック オペレーションに適用されます。複数のロールを同じ Web サービスの複数のオペレーションに関連付ける場合は、メソッド レベルでロールのリストを指定することもできます。
注意 : @SecurityRoles アノテーションは、EJB 実装の Web サービスのコンテキスト内でのみ有効です。そのため、このアノテーションは、javax.ejb.SessionBean を明示的に実装している JWS ファイル内でのみ指定できます。EJB へのアクセス保護の概念については、『Oracle Fusion Middleware Oracle WebLogic Server Security プログラマーズ ガイド』の「エンタープライズ JavaBean (EJB) のセキュリティ対策)」を参照してください。JWS ファイル内での EJB の明示的な実装については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「ステートレス セッション EJB を実装すべき場合」を参照してください。 |
表 3-37 weblogic.jws.security.SecurityRoles JWS アノテーションの属性
名前 | 説明 | データ型 | 必須/省略可能 |
---|---|---|---|
rolesAllowed |
Web サービスにアクセスできるロールのリストを指定する。 このアノテーションは、Web サービスを実装するステートレス セッション EJB の |
文字列の配列 |
不可 |
rolesReferenced |
Web サービスで参照されるロールのリストを指定する。 Web サービスは、リストされたロールの資格を使用して他のリソースにアクセスできる。 このアノテーションは、Web サービスを実装するステートレス セッション EJB の |
文字列の配列 |
省略可能 |
以下の例では、Admin
ロールのみが Web サービスを呼び出すことができるようにクラスレベルで指定する方法を示します。ここでは、関連する部分のみを示します。
package examples.webservices.security_roles; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import weblogic.ejbgen.Session; import javax.jws.WebService; ... import weblogic.jws.security.SecurityRoles; @Session(ejbName="SecurityRolesEJB") @WebService(... // Web サービス全体を呼び出すことができるロールを指定する @SecurityRoles(rolesAllowed="Admnin") public class SecurityRolesImpl implements SessionBean { ...
以降の節では、アノテーションを詳細に説明します。
対象 : クラス
注意 : WebLogic Server 9.1 以降では、@weblogic.security.jws.SecurityIdentity JWS アノテーションは非推奨となっています。 |
呼び出された Web サービスが前提とする ID を指定します。
別の値を指定した場合を除き、Web サービスは、認証された呼び出し側の ID を前提とします。このアノテーションを使用すると、Web サービスが特定のロールで実行されるように設定を変更できます。ロールは、WebLogic Server のセキュリティ レルム内のユーザまたはグループに対応している必要があります。
注意 : @SecurityIdentity アノテーションは、EJB 実装の Web サービスのコンテキスト内でのみ有効です。そのため、このアノテーションは、javax.ejb.SessionBean を明示的に実装している JWS ファイル内でのみ指定できます。EJB へのアクセス保護の概念については、『Oracle Fusion Middleware Oracle WebLogic Server Security プログラマーズ ガイド』の「エンタープライズ JavaBean (EJB) のセキュリティ対策)」を参照してください。JWS ファイル内での EJB の明示的な実装については、『Oracle Fusion Middleware JAX-WS を使用した Oracle WebLogic Server Web サービス入門』の「ステートレス セッション EJB を実装すべき場合」を参照してください。 |
以下の例では、呼び出された Web サービスが Admin
ロールで実行されるように指定する方法を示します。
package examples.webservices.security_roles; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import weblogic.ejbgen.Session; import javax.jws.WebService; ... import weblogic.jws.security.SecurityIdentity; @Session(ejbName="SecurityRolesEJB") @WebService(... // Web サービスが Admin ロールで実行されるように指定する @SecurityIdentity( value="Admin") public class SecurityRolesImpl implements SessionBean { ...