| Oracle® Fusion Middleware Jersey JAX-RS Reference Implementationの使用 11gリリース1 (10.3.6) E64859-01 |
|
![]() 前 |
このドキュメントでは、Oracle Fusion Middleware 11gとともにJersey JAX-RS Reference Implementation (RI)を使用する方法について説明します。内容は次のとおりです。
RESTとは、Simple Object Access Protocol (SOAP)のように追加のメッセージ層を使用することなく、HTTPなどの標準化されたインタフェースでデータを転送するためのシンプルなインタフェースを記述したものです。RESTはアーキテクチャ・スタイルであり、ツールキットではありません。リソースまたは特定の情報のソース(データおよび機能)として表示される、ステートレスなサービスを作成するための設計ルールのセットを提供します。各リソースは一意のURI (Uniform Resource Identifier)で識別されます。
クライアントはURI、標準化されたメソッドの固定セットを使用してリソースにアクセスし、リソースの表現が戻されます。リソースの表現は、一般的にリソースの現在または意図された状態を取得するドキュメントです。クライアントは、新しいリソース表現を受け取るたびに転送状態に設定されます。
表1-1に、アプリケーションがRESTfulだと見なされるために従う必要のある、RESTアーキテクチャ・スタイルにより定義された制約のセットを定義します。
表1-1 RESTアーキテクチャ・スタイルの制約
| 制約 | 説明 |
|---|---|
|
アドレス可能度 |
URI (Uniform Resource Identifier)を使用してすべてのリソースを識別します。英語では、URIは名詞と同じです。 |
|
共通インタフェース |
HTTPメソッド(GET、POST、PUT、DELETE)などの共通インタフェースを使用して、リソースへのアクセスを可能にします。英語の類推を適用して、これらのメソッドは動詞と見なされ、名前付けされたリソースに適用できるアクションを説明します。 |
|
クライアント・サーバー・アーキテクチャ |
クライアントとサーバーを、インタフェース要件とデータ・ストレージ要件とに分割します。このアーキテクチャは、サーバー・コンポーネントを簡略化することで、複数のプラットフォーム間でのユーザー・インタフェースの移植性と拡張性を高めます。 |
|
ステートレスな相互作用 |
ステートレスな通信プロトコルを使用します。通常はHypertext Transport Protocol (HTTP)です。すべてのリクエストは、特定のリクエストに必要なすべての情報を含む必要があります。セッション状態はクライアントにのみ保存されます。 この相互作用のスタイルにより、次のことが向上します。
|
|
キャッシュ可能 |
クライアントのレスポンスのキャッシングを可能にします。レスポンスはキャッシュ可能かキャッシュ不可能かに識別される必要があります。キャッシングにより、一部の相互作用は必要なくなり、効率性、拡張性、および認識されるパフォーマンスが向上します。 |
|
階層化システム |
クライアントがエンド・サーバーに直接接続するのではなく中間サーバーに接続できるようにします(クライアントは認識しません)。中間サーバーの使用は、ロード・バランシングと共有キャッシングを提供することで、システムの拡張性を向上させます。 |
RESTful Webサービスは、REST原則に従って構築され、それによりWebで適切に動作するように設計されたサービスです。
RESTful Webサービスは、表1-1に定義されたアーキテクチャ・スタイル制約に従います。通常、RESTful WebサービスはHTTPプロトコル上に構築され、GET、POST、PUT、DELETEなどの共通HTTPメソッドにマップされる操作を実装し、リソースをそれぞれ作成、取得、更新、削除します。
WebLogic Serverには、Webアプリケーションとしてパッケージされ、Jersey JAX-RS RIに基づくアプリケーションの実行に必要な事前に作成された共有ライブラリが含まれています。次のバージョンがサポートされています。
Jersey JAX-RS RIバージョン1.9
Jersey JAX-RS RIバージョン1.1.5.1
次の項では、Jersey JAX-RS RI共有ライブラリとその使用手順、および新しいバージョンのJersey JAX-RS RIの登録方法について説明します。
共有ライブラリは、WL_HOME/common/deployable-librariesディレクトリに格納されています。
表1-2に、Jersey JAX-RS RIバージョン1.9 Webサービスをサポートする事前作成共有ライブラリを示します。
表1-2 Jersey JAX-RS RI 1.9の共有ライブラリ
| 機能 | 説明 |
|---|---|
|
|
|
JAX-RS API |
|
表1-3に、Jersey JAX-RS RIバージョン1.1.5.1 Webサービスをサポートする構築済共有ライブラリを、対応する機能ごとにまとめています。共有ライブラリが必須か省略可能かも示します。
表1-3 Jersey JAX-RS RI 1.1.5.1の共有ライブラリ
| 機能 | 説明 | 必須かどうか |
|---|---|---|
|
Jersey |
|
必須 |
|
JAX-RS API |
|
必須 |
|
JSON処理 |
|
省略可能 |
|
JSON処理 |
|
省略可能 |
|
JSON処理 |
|
省略可能 |
|
JSONストリーミング |
|
省略可能 |
|
ATOM処理 |
|
省略可能 |
また、次の表にWebLogic Serverで使用可能な依存JARを示します。これらは共有ライブラリとして登録する必要はありません。
Jersey JAX-RS RIを使用するには、次の手順を実行します:
Jersey JAX-RS RI共有ライブラリを1つ以上のWebLogic Serverインスタンスに登録します。「WebLogic ServerインスタンスへのJersey JAX-RS RI共有ライブラリの登録」を参照してください。
Jersey JAX-RS RI共有ライブラリを使用するように、RESTfulなWebサービスを含むWebアプリケーションを構成します。「Jersey JAX-RS RIを使用するWebアプリケーションの構成」を参照してください。
JAX-RS Webサービスおよびクライアントを作成します。「RESTful Webサービスおよびクライアントの作成」を参照してください。
オプションで、Oracle Web Services Manager (Oracle WSM)ポリシーを使用してJerseyサーブレット・アプリケーションまたはRESTful Webサービス・クライアントを保護します。詳細な情報は、次を参照してください:
必要に応じて、さらに新しいバージョンのJersey JAX-RS RI共有ライブラリを構築してデプロイできます。「新しいバージョンのJersey JAX-RS RIの登録」を参照してください。
Jersey JAX-RS RIの詳細やRESTfulなWebサービスの開発例は、https://jersey.java.netを参照してください。
共有Java EEライブラリを1つ以上のWebLogic Serverインスタンスに登録するには、ライブラリをターゲットのサーバーにデプロイして、そのデプロイメントを共有することを指示します。共有Java EEライブラリは、ライブラリを参照するアプリケーションをデプロイするのと同じWebLogic Serverインスタンスにターゲット指定する必要があります。
参照側アプリケーションがデプロイされると、WebLogic Serverは共有ライブラリ・ファイルをそのアプリケーションにマージします。必須ライブラリが登録されていないサーバー・インスタンスに参照側アプリケーションをデプロイしようとすると、参照側アプリケーションのデプロイが失敗します。
アプリケーションで必要な機能および使用するJersey JAX-RS RIのバージョンに基づいて、「Jersey JAX-RS RI共有ライブラリの要約」で定義されている1つ以上のJersey JAX-RS共有ライブラリを次のように登録できます。
Jersey JAX-RS RIのバージョン1.9または1.1.5.1のうち、使用するバージョンを選択します。選択したバージョンに基づいて、表1-2または表1-3のいずれかを参照し、アプリケーションで必要な共有ライブラリを決定します。
共有ライブラリを登録するWebLogic Serverターゲットを決定します。共有ライブラリは、参照側アプリケーションをデプロイするのと同じWebLogic Serverインスタンスに登録する必要があります(後で必要に応じて参照側アプリケーションをデプロイできるように、ドメイン内のすべてのサーバーにライブラリをデプロイしてもかまいません)。
共有ライブラリ・ファイルを手順2で決定したターゲット・サーバーにデプロイし、-libraryオプションを使用してデプロイメントをライブラリとして指定することで、共有ライブラリを登録します。
Jersey JAX-RS RIバージョン1.9機能およびJAX-RS APIをサポートする共有ライブラリをデプロイする方法の例を次に示します。
weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jersey-bundle-1.9.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jsr311-api-1.1.1.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
JAX-RS RIバージョン1.1.5.1を使用する場合の、Jersey JAX-RS RIの基本機能とJAX-RS APIをサポートする共有ライブラリのデプロイ方法を次の例に示します。
weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jersey-bundle-1.1.5.1.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library weblogic.Deployer -verbose -noexit -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jsr311-api-1.1.1.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
weblogic.Deployerの詳細は、「Oracle WebLogic Serverへのアプリケーションのデプロイ」のweblogic.Deployerコマンドライン・リファレンスに関する項を参照してください。
Jersey共有ライブラリを使用するように、RESTfulなWebサービスを含むWebアプリケーションを構成する必要があります。特に、アプリケーションに関連付けられている次の2つのデプロイメント記述子ファイルを更新する必要があります。
web.xml: WebリクエストをJerseyサーブレットに委任するように更新します。「WebリクエストをJerseyサーブレットに委任するためのweb.xmlの更新」を参照してください。
weblogic.xml: アプリケーションで必要な表1-3の共有ライブラリを参照するように更新します。「共有ライブラリを参照するためのweblogic.xmlの更新」を参照してください。
すべてのWebリクエストをJerseyサーブレットcom.sun.jersey.spi.container.servlet.ServletContainerに委任するように、web.xmlファイルを更新します。web.xmlファイルは、アプリケーション・アーカイブのルート・ディレクトリのWEB-INFディレクトリにあります。
次に、web.xmlファイルの更新例を示します。
<web-app>
<servlet>
<display-name>My Jersey Application</display-name>
<servlet-name>MyJerseyApp</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>myPackage.myJerseyApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyJerseyApp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
前述の例に示したように、次の要素を定義する必要があります。
<servlet-class>要素は、Jersey JAX-RS RIへのエントリ・ポイントであるサーブレットを定義します。この値は、常にcom.sun.jersey.spi.container.servlet.ServletContainerに設定する必要があります。
<init-param>要素は、「アプリケーション・サブクラス」で説明しているように、javax.ws.rs.core.Applicationを拡張するクラスを定義します。
<servlet-mapping>要素は、MyJerseyAppサーブレットにマップされる基本URLパターンを定義します。URLのhttp://<host>:<port>よりも後の部分に<webAppName>を付加したものが、WebLogic Serverによって<url-pattern>と比較されます。パターンが一致すれば、この要素でマップされているサーブレットが呼び出されます。
web.xmlデプロイメント・ディスクリプタの詳細は、Oracle WebLogic Server用のWebアプリケーション、サーブレットおよびJSPの開発のweb.xmlデプロイメント・ディスクリプタの要素に関する項を参照してください。
アプリケーションで必要な共有ライブラリを参照するようにweblogic.xmlファイルを更新します。weblogic.xmlファイルは、アプリケーション・アーカイブのルート・ディレクトリのWEB-INFディレクトリにあります。
<exact-match>ディレクティブを使用すると、デプロイされた共有ライブラリの最新バージョンが使用されるかどうかを制御できます。trueに設定すると、新しいバージョンがWebLogic Serverにデプロイされているかどうかに関係なく、weblogic.xmlに指定されたバージョンが使用されます。falseに設定すると、weblogic.xmlファイルでの指定内容にかかわらず、WebLogic Serverにデプロイされている最新バージョンが使用されます。
たとえば、<exact-match>ディレクティブをfalseに設定し、「新しいバージョンのJersey JAX-RS RIの登録」の説明に従い、より新しいバージョンのJerseyソフトウェアを共有ライブラリとして登録すると、アプリケーションでは新しい方の共有ライブラリが自動的に使用されます。このケースでは、最新バージョンを使用するためにweblogic.xmlファイルを編集する必要はありません。
次の例は、JAX-RS RIバージョン1.9を使用するためにweblogic.xmlファイルを更新する方法を示しています。
<library-ref>
<library-name>jax-rs</library-name>
<specification-version>1.1</specification-version>
<implementation-version>1.9</implementation-version>
<exact-match>false</exact-match>
</library-ref>
次の例は、JAX-RS RIバージョン1.1.5.1を使用するためにweblogic.xmlファイルを更新する方法を示しています。すべての共有ライブラリ参照は、すべてのWebアプリケーションに必要なわけではありません。ただし、jersey-bundleおよびjsr311共有ライブラリは共にJersey JAX-RS RIを使用する必要があります。この例では、<exact-match>はfalseに設定され、WebLogic Serverにデプロイされた共有ライブラリの最新バージョンが使用されるように指定します。
<library-ref>
<library-name>jersey-bundle</library-name>
<specification-version>1.1.1</specification-version>
<implementation-version>1.1.5.1</implementation-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>jsr311</library-name>
<specification-version>1.1.1</specification-version>
<implementation-version>1.1.1</implementation-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>jackson-core-asl</library-name>
<specification-version>1.0</specification-version>
<implementation-version>1.1.1</implementation-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>jettison</library-name>
<specification-version>1.1</specification-version>
<implementation-version>1.1</implementation-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>rome</library-name>
<specification-version>1.0</specification-version>
<implementation-version>1.0</implementation-version>
<exact-match>false</exact-match>
</library-ref>
weblogic.xmlデプロイメント記述子の詳細は、Oracle WebLogic ServerのためのWebアプリケーション、サーブレットおよびJSPの開発のweblogic.xmlデプロイメント記述子の要素に関する項を参照してください。
Jersey JAX-RS RIを登録し、Webアプリケーションを構成してから、デプロイメントに必要なRESTful Webサービスおよびクライアント、そしてアプリケーション・サブクラスを作成できます。次に、単純なWebサービスとクライアントを示します。
次に、RESTfulなWebサービスの非常に単純な例を示します。
package samples.helloworld;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
// Specifies the path to the RESTful service
@Path("/helloworld")
public class helloWorld {
// Specifies that the method processes HTTP GET requests
@GET
@Path("sayHello")
@Produces("text/plain")
public String sayHello() {
return "Hello World!";
}
}
次に、事前に定義されたRESTful Webサービスを呼び出す簡単なRESTfulクライアントを示します。このサンプルでは、Jersey JAX-RS RIによって具体的に提供されるクラスを使用します。このクラスはJAX-RS規格の一部ではありません。
package samples.helloworld.client;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
public class helloWorldClient {
public helloWorldClient() {
super();
}
public static void main(String[] args) {
Client c = Client.create();
WebResource resource = c.resource("http://localhost:7101/RESTfulService-Project1-context-root/jersey/helloWorld");
String response = resource.get(String.class);
}
}
次の例では、RESTful Webサービスのアプリケーション・デプロイメントのコンポーネントを定義するためにjavax.ws.rs.core.Applicationを拡張し、追加のメタデータを提供するクラスの作成方法を説明します。javax.ws.rs.core.Applicationの詳細は、https://jersey.java.net/apidocs/1.9/jersey/javax/ws/rs/core/Application.htmlでJavadocを参照してください。
Applicationサブクラス内で、必要に応じて、getClasses()およびgetSingletons()メソッドをオーバーライドし、RESTful Webサービス・リソースのリストを戻します。リソースはそれを戻すApplicationサブクラスにバインドされます。
両方のメソッドが同じリソースを戻す場合、エラーが戻されることに注意してください。
javax.ws.rs.ApplicationPathアノテーションを使用して、サーブレットにマップされる基底URIパターンを定義します。@ApplicationPath注釈の詳細は、https://jersey.java.net/apidocs/1.9/jersey/javax/ws/rs/core/Application.htmlでJavadocを参照してください。
javax.ws.rs.core.Applicationを拡張し、@ApplicationPathアノテーションを使用してリソースの基底URIを定義するクラスの例を次に示します。
import javax.ws.rs.core.Application;
javax.ws.rs.ApplicationPath;
...
@ApplicationPath("resources")
public class MyApplication extends Application {
public Set<java.lang.Class<?>> getClasses() {
Set<java.lang.Class<?>> s = new HashSet<Class<?>>();
s.add(HelloWorldResource.class);
return s;
}
}
Jerseyサーブレット・アプリケーションを保護するために、次のOracle WSMポリシーのうちの1つ以上をアタッチできます。これらのポリシーに関する詳細情報およびポリシーを手動で構成する方法は、『Webサービスのためのセキュリティおよび管理者ガイド』の事前定義済ポリシーに関する項を参照してください。
認証ポリシー
oracle/wss_http_token_service_policy
oracle/http_basic_auth_over_ssl_service_policy
oracle/http_jwt_token_service_policy
oracle/http_jwt_token_over_ssl_service_policy
oracle/http_oam_token_service_policy
oracle/http_saml20_token_bearer_service_policy
oracle/http_saml20_token_bearer_over_ssl_service_policy
oracle/multi_token_rest_service_policy (1つのみのポリシー)
oracle/multi_token_over_ssl_rest_service_policy (1つのみのポリシー)
|
注意: oracle/http_spnego_token_service_templateアサーション・テンプレートを使用して作成する、SPNEGOトークン・ポリシーを添付することもできます。詳細は、『Webサービスのためのセキュリティおよび管理者ガイド』のSPNEGO Negotiationを使用したKerberosの構成方法に関する項を参照してください。 |
認可ポリシー
oracle/binding_authorization_denyall_policy
oracle/binding_authorization_permitall_policy
oracle/binding_permission_authorization_policy
Oracle WSMポリシーを使用してJerseyサーブレット・アプリケーションを保護するには、web.xmlファイルを更新します。詳細手順は、Webサービスのためのセキュリティおよび管理者ガイドのサーブレット・アプリケーションへのポリシーのアタッチに関する項を参照してください。
次に、web.xmlファイルの更新例を示します。
例1-1 ポリシーをJerseyサーブレット・アプリケーションにアタッチするために更新するweb.xmlファイルの例
<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">
<filter>
<filter-name>OWSM Security Filter</filter-name>
<filter-class>oracle.wsm.agent.handler.servlet.SecurityFilter</filter-class>
<init-param>
<param-name>servlet-name</param-name>
<param-value>MyJerseyApp</param-value>
</init-param>
<init-param>
<param-name>oracle.wsm.metadata.policySet</param-name>
<param-value><![CDATA[<sca11:policySet name="policySet"
appliesTo="REST-Resource()"
attachTo="Service('*')"
xmlns:sca11="http://docs.oasis-open.org/ns/opencsa/sca/200903"
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
xmlns:wsp15="http://www.w3.org/ns/ws-policy">
<wsp15:PolicyReference
URI="oracle/multi_token_rest_service_policy"
orawsp:category="security" orawsp:status="enabled">
</wsp15:PolicyReference>
<wsp15:PolicyReference
URI="oracle/binding_authorization_permitall_policy"
orawsp:category="security" orawsp:status="enabled">
</wsp15:PolicyReference>
</sca11:policySet>]]>
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>OWSM Security Filter</filter-name>
<servlet-name>MyJerseyApp</servlet-name>
</filter-mapping>
<servlet>
<display-name>My Jersey Application</display-name>
<servlet-name>MyJerseyApp</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>myPackage.myJerseyApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyJerseyApp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
RESTful Webサービス・クライアントを保護するために、次のOracle WSMポリシーのうちの1つ以上をアタッチできます。これらのポリシーに関する詳細情報およびポリシーを手動で構成する方法は、『Webサービスのためのセキュリティおよび管理者ガイド』の事前定義済ポリシーに関する項を参照してください。
認証ポリシー
oracle/wss_http_token_client_policy
oracle/http_basic_auth_over_ssl_client_policy
oracle/http_jwt_token_client_policy
oracle/http_jwt_token_over_ssl_client_policy
oracle/http_saml20_token_bearer_client_policy
oracle/http_saml20_token_bearer_over_ssl_client_policy
|
注意: oracle/http_spnego_token_client_templateアサーション・テンプレートを使用して作成する、SPNEGOトークン・ポリシーをアタッチすることもできます。詳細は、『Webサービスのためのセキュリティおよび管理者ガイド』のSPNEGO Negotiationを使用したKerberosの構成方法に関する項を参照してください。 |
Oracle WSMポリシーを使用してRESTful Webサービスを保護するには:
「Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリのWebLogic Serverインスタンスへの登録」の説明に従って、Oracle WSM RESTfulクライアント・フィルタで必要とされる共有ライブラリをWebLogic Serverインスタンスに登録します。
「Oracle WSM RESTfulクライアント・フィルタを使用するWebアプリケーションの構成」の説明に従って、Oracle WSM RESTfulクライアント・フィルタで必要とされる共有ライブラリを参照するようにweblogic.xmlデプロイメント記述子を更新します。
次のいずれかの方法を使用して、Oracle WSMポリシーをRESTful Webサービス・クライアントにアタッチします。
「機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチ」の説明に従い、機能クラスを使用して直接アタッチします。
Webサービスのためのセキュリティおよび管理者ガイドのポリシー・セットの作成および管理に関する項の説明に従って、rest-clientリソース・タイプを使用してグローバルにアタッチします。次に例を示します。
C:\Oracle\Middleware\oracle_common\common\bin> wlst.cmd ... wls:/offline> connect("weblogic","password","t3://myAdminServer.example.com:7001") Connecting to t3://myAdminServer.example.com:7001" with userid weblogic ... Successfully connected to Admin Server "AdminServer" that belongs to domain "my_domain". Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. wls:/my_domain/serverConfig> beginRepositorySession() Session started for modification. wls:/my_domain/serverConfig> createPolicySet('myPolicySet','rest-client', 'Domain("*")') Description defaulted to "Global policy attachments for REST clients." The policy set was created successfully in the session. wls:/my_domain/serverConfig> attachPolicySetPolicy('oracle/wss_http_token_client_policy') Policy reference "oracle/wss_http_token_service_policy" added. wls:/my_domain/serverConfig> commitRepositorySession() The policy set myPolicySet is valid. Creating policy set myPolicySet in repository. Session committed successfully.
Oracle WSM RESTfulクライアント・フィルタの使用中に問題が発生した場合は、Webサービスのためのセキュリティおよび管理者ガイドのOracle WSM RESTfulクライアント・フィルタでの問題の診断に関する項を参照してください。
(Jersey JAX-RS RI共有ライブラリのほかに)Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリには、次のようなものがあります。
MW_HOME/oracle_common/modules/oracle.wsm.common_11.1.1/wsm-rest-lib.war
MW_HOME/oracle_common/modules/oracle.webservices_11.1.1/wls-rest-client.war
Java EE RESTfulクライアントの場合、Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリをWebLogic Serverインスタンスに登録するには:
共有ライブラリを登録するWebLogic Serverターゲットを決定します。共有ライブラリは、参照側アプリケーションをデプロイするのと同じWebLogic Serverインスタンスに登録する必要があります。(後で必要に応じて参照側アプリケーションをデプロイできるように、ドメイン内のすべてのサーバーにライブラリをデプロイしてもかまいません)。
共有ライブラリ・ファイルを手順1で決定したターゲット・サーバーにデプロイし、-libraryオプションを使用してデプロイメントをライブラリとして指定することで、共有ライブラリを登録します。
次に例を示します。
weblogic.Deployer -verbose -noexit -source C:\myinstall\oracle_common\modules\oracle.wsm.common_11.1.1\wsm-rest-lib.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
weblogic.Deployer -verbose -noexit -source C:\myinstall\oracle_common\modules\oracle.webservices_11.1.1\wls-rest-client.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library
Java SE RESTfulクライアントの場合、Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリをWebLogic Serverインスタンスに登録するには、共有ライブラリをクラスパスに追加する必要があります。
|
注意: さらに、「Jersey JAX-RS RIを使用するWebアプリケーションの構成」の説明に従って、Jersey JAX-RS RIを使用するようにWebアプリケーションを構成する必要があります。 |
Oracle WSM RESTfulクライアント・フィルタで必要な共有ライブラリを参照するようにweblogic.xmlファイルを更新します。weblogic.xmlファイルは、アプリケーション・アーカイブのルート・ディレクトリのWEB-INFディレクトリにあります。
次の例は、Oracle WSM RESTfulクライアント・フィルタを使用するようにweblogic.xmlファイルを更新する方法を示しています。
|
注意: 次の例では、Jersey JAX-RS RIバージョン1.9共有ライブラリを使用するようにWebアプリケーションを構成しています。Jersey JAX-RS RIバージョンの構成の詳細は、「Jersey JAX-RS RIを使用するWebアプリケーションの構成」を参照してください。 |
<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app
http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"
xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
...
<library-ref>
<library-name>jax-rs</library-name>
<specification-version>1.1</specification-version>
<implementation-version>1.9</implementation-version>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>wsm-rest-lib</library-name>
<exact-match>false</exact-match>
</library-ref>
<library-ref>
<library-name>wls-rest-client</library-name>
<specification-version>1.1</specification-version>
<implementation-version>1.1.0.0</implementation-version>
<exact-match>false</exact-match>
</library-ref>
...
</weblogic-web-app>
weblogic.xmlデプロイメント記述子の詳細は、Oracle WebLogic ServerのためのWebアプリケーション、サーブレットおよびJSPの開発のweblogic.xmlデプロイメント記述子の要素に関する項を参照してください。
表1-5で定義している機能クラスを使用して、プログラムによってRESTful Webサービス・クライアントにOracle WSMセキュリティ・ポリシーをアタッチできます。クラスはoracle.wsm.metadata.featureパッケージで提供されます。
表1-5 RESTfulクライアントへのポリシーのアタッチに使用される機能クラス
| 機能クラス | 説明 |
|---|---|
|
|
ポリシー・サブジェクトの機能クラスのためのベース抽象クラス。 |
|
|
ポリシー・サブジェクトにアタッチするためのポリシー参照と構成オーバーライド・プロパティのセット。 |
|
|
ポリシー・サブジェクトにアタッチするための単一のポリシー参照。 |
|
|
1つ以上のポリシーの構成のオーバーライドに使用できるオプションのプロパティ。 |
RESTfulクライアント・インスタンスを作成するときにcom.sun.jersey.api.client.config.ClientConfigを定義してcom.sun.jersey.api.client.Clientクラスのcreateメソッドに情報を渡すことにより、必要に応じてクライアント構成プロパティを渡すことができます。
次の例に示すように、ClientConfigを使用して、Oracle WSMポリシーをアタッチして構成プロパティをオーバーライドできます。
次のコードは、OAuth 2.0ポリシーをRESTfulクライアントにアタッチし、機能クラスを使用して構成プロパティをオーバーライドします。
例1-2 機能クラスを使用したRESTful Webサービス・クライアントへのポリシーのアタッチ
package sample.restclient;
import java.io.IOException;
import java.io.PrintWriter;
import weblogic.jaxrs.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import javax.servlet.*;
import javax.servlet.http.*;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import oracle.wsm.metadata.feature.AbstractPolicyFeature;
import oracle.wsm.metadata.feature.PolicyReferenceFeature;
import oracle.wsm.metadata.feature.PolicySetFeature;
import oracle.wsm.metadata.feature.PropertyFeature;
public class BankingServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
private static final String OAUTH_TOKEN_ENDPOINT = "http://example.com:1234/ms_oauth/oauth2/endpoints/oauthservice/tokens";
private static final String RESOURCE_SERVER_ADDRESS = "http://example.com:1234";
private static final String ACCOUNT_RESOURCE = RESOURCE_SERVER_ADDRESS + "/banking_owsm/account/balance";
private static final String CLIENT_CSF_KEY = "bankingweb.csf.key";
private static final String OAUTH_RESOURCE_SCOPE = "AccountResource.balance.read";
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
response.setContentType(CONTENT_TYPE);
String userName = request.getRemoteUser();
out.println("<html>");
out.println("<head><title>The OAuth Bank</title></head>");
out.println("<body>");
out.println("<p>Hello " + userName + ", welcome to the OAuth Bank</p>");
ClientConfig cc = new DefaultClientConfig();
// Setting the token.uri. This is used by the Oracle WSM client agent
// when submitting requests for the authorization code.
PropertyFeature oAuthConfigPropFeature = new PropertyFeature("token.uri",OAUTH_TOKEN_ENDPOINT);
PropertyFeature[] oAuthClientPropFeatures = new PropertyFeature[2];
// Setting oauth2.client.csf.key and scope.
// The key pointed to by oauth2.client.csf.key must be available in the
// OPSS credential store as a password credential, holding the
// client id/client secret pair identifying the client.
// scope is the resource scope for which the requested access token is valid.
oAuthClientPropFeatures[0] = new PropertyFeature("oauth2.client.csf.key", CLIENT_CSF_KEY);
oAuthClientPropFeatures[1] = new PropertyFeature("scope",OAUTH_RESOURCE_SCOPE);
PolicyReferenceFeature[] policyFeatures = new PolicyReferenceFeature[2];
policyFeatures[0] = new PolicyReferenceFeature("oracle/oauth2_config_client_policy", oAuthConfigPropFeature);
policyFeatures[1] = new PolicyReferenceFeature("oracle/http_oauth2_token_client_policy", oAuthClientPropFeatures);
// Attaching policies.
cc.getProperties().put(AbstractPolicyFeature.ABSTRACT_POLICY_FEATURE, new PolicySetFeature(policyFeatures));
Client client = Client.create(cc);
WebResource webResource = client.resource(ACCOUNT_RESOURCE);
ClientResponse result = webResource.accept("application/json").get(ClientResponse.class);
if (result.getStatus() == 200) {
String body = result.getEntity(String.class);
final JSONObject obj = (JSONObject)JSONValue.parse(body);
if (obj != null && obj.get("balance") != null) {
String balance = obj.get("balance").toString();
out.println ("<p>Account balance: " + balance);
}
else {
out.println("<p>Error while retrieving account balance.");
}
}
else {
out.println("<p>Error retrieving account balance: HTTP response status: " + result.getStatus());
}
out.println("</body></html>");
out.close();
}
}
WebLogic Serverで提供されるバージョンよりも新しいJersey JAX-RS RI共有ライブラリを使用する場合、次の手順を実行する必要があります。
関連するJersey JARファイルの必要なバージョンをJersey Webサイト(http://jersey.java.net)からダウンロードします。
手順1でダウンロードしたJARファイルを拡張し、Oracle WebLogic Serverのためのアプリケーションの開発の共有Java EEライブラリの作成に関する項の手順を実行して、新しい共有ライブラリを作成します。
共有ライブラリ・ファイルを手順2で決定したターゲット・サーバーにデプロイし、-libraryオプションを使用してデプロイメントをライブラリとして指定することで、共有ライブラリを登録します。次の手順を実行する必要があります。
-name引数に、表1-3に定義されている標準Jersey JAX-RS RI共有ライブラリ名を設定します。たとえば、jersey-bundleと設定します。
異なる共有ライブラリのバージョンを区別するために、-libSpecVer引数と-libImplVer引数を設定します。
最新バージョンのJersey JAX-RS RI機能をデプロイする方法の例を次に示します。weblogic.Deployerの詳細は、「Oracle WebLogic Serverへのアプリケーションのデプロイ」のweblogic.Deployerコマンドライン・リファレンスに関する項を参照してください。
weblogic.Deployer -verbose -noexit -name jersey-bundle -source C:\myinstall\wlserver_10.3\common\deployable-libraries\jersey-bundle-1.2.war -targets myserver -adminurl t3://localhost:7001 -user system -password ******** -deploy -library -libspecver 1.2 -libimplver 1.2
Webアプリケーションを再構成する必要があるかどうかを判別します。
「Jersey JAX-RS RIを使用するWebアプリケーションの構成」の説明に従って、Webアプリケーションを構成するときにweblogic.xmlファイルで<exact-match>ディレクティブをfalseに設定すると、最新の指定バージョンの共有ライブラリが使用され、Webアプリケーションの構成を更新する必要はありません。
<exact-match>ディレクティブをtrueに設定する場合、つまり最新バージョンではないJersey JAX-RS RIを使用したい場合は、該当する共有ライブラリを参照するようにweblogic.xmlを更新する必要があります。詳細は、「Jersey JAX-RS RIを使用するWebアプリケーションの構成」を参照してください。
新たに登録したバージョンのJersey JAX-RS共有ライブラリを使用する必要があるアプリケーションを再デプロイします。