![]() ![]() ![]() ![]() |
Oracle Service Bus のプロキシ サービスとビジネス サービスを使用すると、サービスの管理、メッセージの変換、およびエンタープライズ全体でのメッセージのルーティングを行うことができます。
プロキシ サービスとビジネス サービスは、実行時環境 (Oracle Service Bus Console) または開発環境 (Workshop for WebLogic 用の Oracle Service Bus プラグイン) を使用して作成およびコンフィグレーションできます。既存の Web Services Description Language (WSDL) リソース (Oracle Service Registry などの UDDI レジストリからインポートされたリソースなど) に基づいてプロキシ サービスまたはビジネス サービスを作成した後に、コンソールまたはプラグインでさらにコンフィグレーションすることができます。
以下の節では、各サービスとそのコンフィグレーションについて説明します。
Oracle Service Bus プロキシ サービスとは、Oracle Service Bus がローカルに実装しホストする仲介 Web サービスの定義です。Oracle Service Bus では、プロキシ サービスを使用してビジネス サービス (エンタープライズ Web サービスやデータベースなど) とサービス クライアント (プレゼンテーション アプリケーションやその他のビジネス サービスなど) との間でメッセージをルーティングします。
プロキシ サービスのコンフィグレーションには、インタフェース、転送設定、セキュリティ設定、およびメッセージ フロー定義が含まれます。メッセージ フロー定義では、プロキシ サービスを介したメッセージ フローでメッセージを処理する方法を決定するロジックを定義します。プロキシ サービスが WSDL ドキュメントに基づいている場合、コンフィグレーションには WSDL ポートまたは WSDL バインディングも含まれます (「WSDL を使用したサービスの定義」を参照)。
Oracle Service Bus ビジネス サービスは、Oracle Service Bus がクライアントとなるエンタープライズ Web サービスの定義です。これらの外部 Web サービスは、外部システムに実装され、外部システムによってホストされます。そのため、Oracle Service Bus は呼び出す対象、呼び出す方法、および呼び出しの結果として予想される内容を認識しておく必要があります。Oracle Service Bus が外部サービスを呼び出すことができるように、Oracle Service Bus ビジネス サービスではそのインタフェースをモデル化しています。
ビジネス サービスのコンフィグレーションには、インタフェース、転送設定、およびセキュリティ 設定が含まれます (メッセージ フロー定義は含まれません)。ビジネス サービスが WSDL に基づいている場合、コンフィグレーションには WSDL ポートまたは WSDL バインディングも含まれます (「WSDL を使用したサービスの定義」を参照)。
Oracle Service Bus では、WSDL (Web サービスを記述するための XML ベースの仕様) を使用して、複数のタイプのビジネス サービスとプロキシ サービスを定義します。WSDL ドキュメントには、サービス操作、入力/出力パラメータ、およびクライアントがサービスに接続する方法が記述されます。WSDL 1.1 仕様については、W3C Note の「W3C Web Services Description Language (WSDL) 1.1 (英文)」を参照してください。
Oracle Service Bus では、「WSDL リソース」と呼ばれる既存の WSDL に基づいて新しいプロキシ サービスまたは新しいビジネス サービスを作成し、コンフィグレーションのプロパティをオーバーライドしたり追加したりできます。また、既存の WSDL に基づいていない新しいサービスを作成またはコンフィグレーションすることもできます。
WSDL ベースのサービスの場合、Oracle Service Bus は実際の .wsdl ファイルの代わりに「有効な WSDL」を使用します。「有効な WSDL」とは、Oracle Service Bus でコンフィグレーションされたサービスの WSDL プロパティです。
ソース WSDL は有効な WSDL のテンプレートとして機能します。WSDL に基づいてサービスを作成すると、Oracle Service Bus は元の WSDL の設定、ユーザが設定した転送コンフィグレーションの設定、およびユーザが元の WSDL で追加または変更したその他のコンフィグレーション設定を組み合わせて、有効な WSDL を生成します。新しいコンフィグレーションで使用しない元の WSDL の設定は、有効な WSDL から除外されます。
Oracle Service Bus では、次のタイプのプロキシ サービスおよびビジネス サービスの有効な WSDL を生成できます。
WSDL ベースのサービスをサポートする転送 (HTTP、JMS、SB など) を使用して、これらのタイプのサービスの有効な WSDL を生成できます。
Oracle Service Bus では、次のタイプのプロキシ サービスおよびビジネス サービスの有効な WSDL を生成できません。
有効な WSDL は、プロキシ サービスとビジネス サービス、および WSDL ポートに基づくサービスと WSDL バインディングに基づくサービスのさまざまな特性を備えています。これらの特性については、このドキュメント全体を通じて説明しています。特に、「WSDL ポートと WSDL バインディングに基づくサービスの作成」を参照してください。
「生成された WSDL」とは、WSDL リソースから作成されてはいないが、WSDL を使用して記述できる転送型サービス用に Oracle Service Bus が生成する有効な WSDL です。たとえば、EJB ベースのサービスから生成された WSDL は「生成された WSDL」です。
有効な WSDL には、以下の 3 とおりの方法でアクセスできます。
?WSDL
を付加して入力します。
この方法は、Oracle Service Bus が有効な WSDL を生成できる HTTP 転送ベースのサービスでのみ使用できます。
http://host:port/sbresource?PROXY/project/folder/proxyname
http://host:port/sbresource?BIZ/project/folder/businessservicename
この方法は、Oracle Service Bus が有効な WSDL を生成できる HTTP 転送ベースのサービスすべてに使用できます。
WSDL をエクスポートすると、有効な WSDL および関連付けられた依存関係 (スキーマや WS-Policy など) を含む .zip ファイルが生成されます。Oracle Service Bus はこの依存関係を評価し、WSDL の import
要素の location
属性に適切な場所が追加されます。
WS-Policy の import
要素はありません。WS-Policy では、ポリシー参照が保持され、エクスポート時にポリシー リソースが含まれます。
「リソースの詳細の表示」も参照してください。
WSDL ドキュメントでは、サービス、サービスの場所、サービス操作、およびクライアントがサービスと通信する方法を記述します。この節では、Oracle Service Bus の機能を説明する際のコンテキストを提供するために、WSDL の概要を簡単に説明します。
WSDL サービスの定義に使用する主な要素を表 2-1 に示します。
WSDL では、SOAP、HTTP、MIME、および Oracle Service Bus 固有のバインディング拡張が指定されます。これらのバインディング拡張では、WSDL バインディング メカニズムを拡張することで、プロトコル固有またはメッセージ フォーマット固有の機能をサポートします。
<types>
要素は、データ型定義のコンテナです。この要素では、XML スキーマ (XSD) などの型システムを使用して、このサービスで処理されるメッセージのボキャブラリを定義します。たとえば、株価を提供するサービスの場合、コード リスト 2-1 に示すように、
TradePriceRequest
および TradePrice
という用語によって XML ボキャブラリを定義できます。
<types>
<schema targetNamespace="http://example.com/stockquote.xsd"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="TradePriceRequest">
<complexType>
<all>
<element name="tickerSymbol" type="string"/>
</all>
</complexType>
</element>
<element name="TradePrice">
<complexType>
<all>
<element name="price" type="float"/>
</all>
</complexType>
</element>
</schema>
</types>
<message>
要素は、通信されるデータの抽象的な型付き定義です。メッセージを構成する部分ごとに、メッセージの 1 つの論理抽象単位を記述します。WSDL では、1 つまたは複数のメッセージを定義でき、各メッセージには 1 つまたは複数の部分を含めることができます。たとえば、コード リスト 2-2 の WSDL フラグメントでは、sellerInfoMessage
、buyerInfoMessage
、response
、および negotiationMessage
の 4 つのメッセージ タイプが定義されており、各メッセージ タイプには 1 つまたは複数の部分が含まれています。
<message name="sellerInfoMessage">
<part name="inventoryItem" type="xsd:string"/>
<part name="askingPrice" type="xsd:integer"/>
</message>
<message name="buyerInfoMessage">
<part name="item" type="xsd:string"/>
<part name="offer" type="xsd:integer"/>
</message>
<message name="response">
<part name="result" type="xsd:string"/>
</message>
<message name="negotiationMessage">
<part name="item" type="xsd:string"/>
<part name="price" type="xsd:integer"/>
<part name="outcome" type="xsd:string"/>
</message>
<portType>
要素では、(<port>
要素で定義された) 1 つまたは複数のエンドポイントがサポートする一連の操作を定義します。ポート タイプは、サービスが提供する操作のパブリック インタフェースを提供します。各操作は、サービスがサポートするアクションの抽象的な記述である <operation>
要素で定義されます。
たとえば、コード リスト 2-3 のフラグメントでは、入力メッセージ (GetLastTradePriceInput
) と出力メッセージ (GetLastTradePriceOuput
) を処理できる GetLastTradePrice
という 1 つの操作でポート タイプが定義されています。コード リスト 2-4 の <soap:operation>
下位要素に示すように、これらのメッセージの具体的な記述は WSDL バインディングで定義されています。
<portType name="StockQuotePortType">
<operation name="GetLastTradePrice">
<input message="tns:GetLastTradePriceInput"/>
<output message="tns:GetLastTradePriceOutput"/>
</operation>
</portType>
<binding>
要素では、ポート タイプの具体的なデータ フォーマット仕様と具体的な転送プロトコルを指定します。
コード リスト 2-4 のフラグメントでは、type
属性の値として示された StockQuotePortType
ポート タイプのバインディングを指定しています。<soap:binding>
下位要素は、このバインディングが SOAP プロトコル形式にバインドされることを示します。この下位要素では、style
属性でデータ フォーマットが SOAP ドキュメント スタイルであることを指定し、transport
属性で転送プロトコルが HTTP であることを指定しています。
<binding name="StockQuoteSoapBinding" type="tns:
StockQuotePortType">
transport="http://schemas.xmlsoap.org/soap/http"/>
<soap:binding style="document"
<operation name="GetLastTradePrice">
<soap:operation
soapAction="http://example.com/GetLastTradePrice"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service>
要素では、関連するエンドポイントの集合を定義します。各エンドポイントは、<port>
子要素で定義されます。ポートでは、ネットワーク アドレスに関連付けられたバインディングを定義します。たとえば、コード リスト 2-5 のフラグメントでは、StockQuotePort
と StockQuotePortUK
の 2 つのポートが定義されています。この 2 つのポートは、(<binding>
で具体的に定義された) tns:StockQuoteSoapBinding
という同じバインディングを使用していますが、ネットワーク アドレスは異なります (http://example.com/stockquote
と http://example.uk/stockquote
)。これらのポートは、このサービスで使用できる代替ポートです。
<service name="StockQuoteService">
<port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://example.com:9999/stockquote"/>
</port>
<port name="StockQuotePortUK" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://example.uk:9999/stockquote"/>
</port>
</service>
サービスで WSDL インタフェースが明確に定義されている場合、WSDL を使用してサービスを定義することをお勧めします。ただし、これは必須ではありません。
3 タイプの WSDL を定義できます。次の 3 タイプです。
ドキュメント ラップの Web サービスは、ドキュメント スタイルのサービスとして WSDL に記述されています。ただし、いくつかの追加規約に従います。標準のドキュメント指向の Web サービス操作では、1 つのパラメータまたはメッセージ部分だけを取得します (通常は、XML ドキュメントを取得します)。つまり、操作を実装するメソッドに含まれるパラメータも 1 つだけである必要があります。これに対して、ドキュメント ラップの Web サービス操作では、パラメータをいくつでも取得できます。パラメータ値は、SOAP メッセージ内の 1 つの複合データ型にラップされます。このラップされた複合データ型は、操作の 1 つのドキュメントとして WSDL に記述されます。
プロキシ サービスを SOAP スタイルのプロキシ サービスとしてコンフィグレーションし、ビジネス サービスを SOAP スタイルのビジネス サービスとしてコンフィグレーションすることができます。
SOAP 1.1 を使用するドキュメント スタイルの Web サービスの WSDL の例をコード リスト 2-6 に示します。
<definitions name="Lookup"
targetNamespace="http://example.com/lookup/service/defs"
xmlns:tns="http://example.com/lookup/service/defs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:docs="http://example.com/lookup/docs"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xs:schema targetNamespace="http://example.com/lookup/docs" elementFormDefault="qualified">
<xs:element name="PurchaseOrg" type="xs:string"/>
<xs:element name="LegacyBoolean" type="xs:boolean"/>
</xs:schema>
</types>
<message name="lookupReq">
<part name="request" element="docs:purchaseorg"/>
</message>
<message name="lookupResp">
<part name="result" element="docs:legacyboolean"/>
</message>
<portType name="LookupPortType">
<operation name="lookup">
<input message="tns:lookupReq"/>
<output message="tns:lookupResp"/>
</operation>
</portType>
<binding name="LookupBinding" type="tns:lookupPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="lookup">
<soap:operation/>
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
</definitions>
このサービスには、lookup
という操作 (Java クラスのメソッドに相当) が含まれています。バインディングは、これが SOAP 1.1 ドキュメント スタイル Web サービスであることを示しています。
上記のコード リストの WSDL を要求に使用したときに、ドキュメント スタイルのプロキシ サービスが取得する body 変数 ($body
) の値をコード リスト 2-7 に示します。
注意 : | わかりやすくするために、次のコード リストでは XML からネームスペース宣言を削除しています。 |
<soap-env:body>
<req:purchaseorg>Oracle</req:purchaseorg>
</soap-env:body>
コード リスト 2-7 では、soap-env
は定義済みの SOAP 1.1 ネームスペースであり、req
は PurchaseOrg
要素のネームスペース (http://example.com/lookup/docs
) です。
プロキシ サービスによるルーティング先となるビジネス サービスで上記の WSDL を使用した場合、上記の body 変数 ($body
) の値はプロキシ サービスの body 変数 ($body
) の値になります。
呼び出されたビジネス サービスからプロキシ サービスが受信する応答の body 変数 ($body
) の値をコード リスト 2-8 に示します。
注意 : | わかりやすくするために、次のコード リストでは XML からネームスペース宣言を削除しています。 |
<soap-env:body>
<req:legacyboolean>true</req:legacyboolean>
</soap-env:body>
これは、この WSDL を使用するプロキシ サービスによって返される応答の body 変数 ($body
) の値でもあります。
Oracle Workshop for WebLogic ツールをはじめとする多くのツールでは、プロキシ サービスの WSDL (ブラウザで、プロキシ サービスの URL に ?WSDL
サフィックスを追加することによって取得) を受け取り、適切な要求パラメータと応答パラメータを持つ Java クラスを生成して、サービスの操作を呼び出します。この Java クラスを使用して、この WSDL を使用するプロキシ サービスを呼び出すことができます。
プロキシ サービスを RPC スタイルのプロキシ サービスとしてコンフィグレーションし、ビジネス サービスを RPC スタイルのビジネス サービスとしてコンフィグレーションすることができます。
SOAP 1.1 を使用する RPC スタイルの Web サービスの WSDL の例をコード リスト 2-9 に示します。
<definitions name="Lookup"
targetNamespace="http://example.com/lookup/service/defs"
xmlns:tns="http://example.com/lookup/service/defs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:docs="http://example.com/lookup/docs"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xs:schema targetNamespace="http://example.com/lookup/docs" elementFormDefault="qualified">
<xs:complexType name="RequestDoc">
<xs:sequence>
<xs:element name="PurchaseOrg" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ResponseDoc">
<xs:sequence>
<xs:element name="LegacyBoolean" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</types>
<message name="lookupReq">
<part name="request" type="docs: RequestDoc"/>
</message>
<message name="lookupResp">
<part name="result" type="docs: ResponseDoc"/>
</message>
<portType name="LookupPortType">
<operation name="lookup">
<input message="tns:lookupReq"/>
<output message="tns:lookupResp"/>
</operation>
</portType>
<binding name="LookupBinding" type="tns:lookupPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="lookup">
<soap:operation/>
<input>
<soap:body use="literal" namespace="http://example.com/lookup/service"/>
</input>
<output>
<soap:body use="literal" namespace="http://example.com/lookup/service"/>
</output>
</operation>
</binding>
</definitions>
上記のコード リストに記述されたサービスには、lookup
という操作 (Java クラスのメソッドに相当) が含まれています。バインディングは、これが SOAP RPC Web サービスであることを示しています。つまり、この Web サービスの操作では、一連の要求パラメータを受け取り、一連の応答パラメータを返します。lookup
操作には、request
というパラメータと result
という戻りパラメータがあります。バインディングにおける操作のネームスペースは次のとおりです。
http://example.com/lookup/service/defs
コード リスト 2-9 の WSDL を要求に使用したときに、SOAP RPC プロキシ サービスが取得する body 変数 ($body
) の値をコード リスト 2-10 に示します。
注意 : | わかりやすくするために、次のコード リストでは XML からネームスペース宣言を削除しています。 |
<soap-env:body>
<ns:lookup>
<request>
<req:purchaseorg>Oracle</req:purchaseorg>
</request>
</ns:lookup>
<soap-env:body>
ここで、soap-env
は定義済みの SOAP 1.1 ネームスペース、ns
は操作のネームスペース (<http://example.com/lookup/service>
)、req
は PurchaseOrg
要素のネームスペース (http://example.com/lookup/docs
) です。
プロキシ サービスによるメッセージのルーティング先となるビジネス サービスでコード リスト 2-10 の WSDL を使用した場合、コード リスト 2-11 に示す body 変数 ($body
) の値は、プロキシ サービスの body 変数 ($body
) の値になります。
この WSDL を要求に使用したときに、呼び出されたビジネス サービスからプロキシ サービスが受信する応答の body 変数 ($body)
の値をコード リスト 2-10 に示します。
<soap-env:body>
<ns:lookupResponse>
<result>
<req:legacyboolean>true</req:legacyboolean>
</result>
</ns:lookupResponse>
<soap-env:body>
これは、この WSDL を使用するプロキシ サービスによって返される応答の body 変数 ($body
) の値でもあります。
Oracle Workshop for WebLogic ツールをはじめとする多くのツールでは、プロキシ サービスの WSDL (ブラウザで、プロキシの URL に ?WSDL
サフィックスを追加することによって取得) を受け取り、適切な要求パラメータと応答パラメータを持つ Java クラスを生成して、サービスの操作を呼び出します。このような Java クラスを使用して、この WSDL を使用するプロキシ サービスを呼び出すことができます。
SOAPAction
ヘッダが自動的に作成されます。SOAP 1.2 サービスの場合、プロキシ サービスが呼び出すサービスに Content-Type
ヘッダの action
パラメータが自動的に作成されます。 <url>?WSDL
構文をサポートしているため、HTTP プロキシ サービスの WSDL を動的に取得できます。この機能は、Oracle Workshop for WebLogic をはじめとする多くの SOAP クライアント生成ツールで役立ちます。$body
) がデフォルトでマップされるため、$body
の操作が容易になります。「メッセージ コンテキスト」を参照してください。$body
の実行時のコンテンツが、エディタに表示されるデフォルト マッピングと異なる場合があります。これは、Oracle Service Bus が型付きの変数を宣言して使用するプログラミング言語ではないためです。変数は型なしであり、値が割り当てられると実行時に動的に作成されます。また、変数の型は、メッセージ フローの任意の位置でコンテンツに基づく型になります。XQuery 式および XPath 式を容易に作成できるように、設計時エディタでは、指定した変数を型にマップすることによって、その変数の型をマップできます。XQuery エディタおよび XPath エディタを使用して式を作成する方法については、「変数の構造での作業」を参照してください。
WSDL リソースに基づいてサービスを作成する場合、サービスは次のように WSDL ポートまたは WSDL バインディングに基づいている必要があります。
サービスを作成または変更するときに、転送方式は変更できますが、データ フォーマットをオーバーライドすることはできません。
元の WSDL リソースのポート定義とバインディング定義は、以下で説明するさまざまな要因に応じて有効な WSDL 内で変更されます。
プロキシ サービス用に生成される有効な WSDL には、以下の特性があります。
wsdl:service
セクションは 1 つだけです。wsdl:service
セクションに含まれる wsdl:port
セクションは 1 つだけです。<wsdl:service>
定義が削除され、<wsdl:port>
が 1 つ含まれた新しいサービス定義が作成されます。 wsdl:binding
セクションに標準の WSDL SOAP バインディング要素と、転送を識別するユニークな転送 URI が含まれます。 wsdl:binding
セクションで WSDL 1.1 仕様で指定された標準のバインディング要素が使用されます。wsdl:binding
セクションで Oracle (Oracle Service Bus) 独自の WSDL XML バインディング要素が使用されます。 <bindingname>QSService と <bindingname>QSPort
) が定義されます。WSDL リソースで定義されているポートは、有効な WSDL には含まれません。
HTTP サービスの場合、コンソールまたはプラグインで転送をコンフィグレーションするときに転送アドレスを指定する必要があります。このアドレスが有効な WSDL のポート定義で使用されます。
Oracle Service Bus は常にプロキシ サービスをホストするため、プロキシ サービスの転送アドレスとして指定した URL は、常に Oracle Service Bus ドメイン内のパスからの相対位置になります。
http://www.oracle.com/transport/2007/05/
) で構成される値を設定します。
非転送型ビジネス サービス用に生成される有効な WSDL には、以下の特性があります。
wsdl:service
セクションは 1 つだけです。wsdl:service section
には、複数の wsdl:port
セクションが含まれる場合があります。通常、これが該当するのは、ロード バランシングを使用しており、サポートされるロード バランシング アルゴリズムのいずれかを使用することによって使用できる複数のエンドポイント アドレスが存在する場合です。wsdl:binding
セクションに標準の WSDL SOAP バインディング要素と、転送を識別するユニークな転送 URI が含まれます。 wsdl:binding
セクションに Oracle の WSDL XML バインディング要素が含まれます。 <portname_in_template>_1、<portname_in_template>_2
(以降も同様) という名前が付けられます。
Oracle Service Bus は、転送型ビジネス サービス用に生成される有効な WSDL の wsdl:service
セクションが 1 つだけであることを保証しません。WSDL は転送によって生成されるため、Oracle Service Bus が service セクションと port セクションを生成することはなく、クリーンアップも行いません。ただし、Oracle Service Bus は依存関係を評価し、エクスポート時に参照を設定します。
クラスタ化されたドメインで有効な WSDL を生成する場合、Oracle Service Bus はサーバまたはクラスタのコンフィグレーションに基づいてエンドポイント URL を書き換えます。フロントエンド HTTP ホスト/ポート (または HTTPS エンドポイントのフロントエンド HTTPS ホスト/ポート) が指定されている場合は、そのホストまたはポートが使用されます。それ以外の場合は、管理対象サーバのホストまたはポートが使用されます。クラスタ化されたドメインでは、フロントエンド HTTP または HTTPS ホスト/ポートを割り当てることを強くお勧めします。
WSDL リソースのポート定義とバインディング定義のフラグメントをコード リスト 2-12 に示します。
<portType name="StockQuotePortType
">
...
</portType>
<binding name="StockQuoteSoapBinding
" type="tns:StockQuotePortType
">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
...
</binding>
<service name="StockQuoteService
">
<port name="StockQuotePort
" binding="tns:StockQuoteSoapBinding">
<soap:address location="http://example.com:9999/stockquote
"/>
</port><port name="StockQuotePortUK" binding="tns:StockQuoteSoapBinding">
</service>
<soap:address location="http://example.uk:9999/stockquote"/>
</port>
コード リスト 2-12 の StockQuotePort
ポートに基づいてプロキシ サービスを作成すると、有効な WSDL はコード リスト 2-13 のフラグメントのようになります。
<binding name="StockQuoteSoapBinding
" type="ns:StockQuotePortType
">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
...
</binding>
<service name="StockQuoteService
">
<port name="StockQuotePort
" binding="ns:StockQuoteSoapBinding
">
<soap:address location="http://
host:port/project
/proxyname
"/>
</port>
</service>
StockQuoteService
) は同じです。StockQuotePortUK
は、有効な WSDL では定義されていません。 http://example.com:9999/stockquote
は、有効な WSDL のポートで生成されたアドレス http://
host:port/project
/proxyname
とは異なります。有効な WSDL では、Oracle Service Bus Console または Workshop for WebLogic 用 Oracle Service Bus プラグインで転送コンフィグレーションに指定したアドレスが使用されています。
コード リスト 2-12 の StockQuoteBinding
バインディングに基づいてプロキシ サービスを作成すると、有効な WSDL はコード リスト 2-14 のフラグメントのようになります。
<binding name="StockQuoteSoapBinding
" type="ns:StockQuotePortType
">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
...
</binding>
<wsdl:service name="StockQuoteSoapBindingQSService
"
<wsdl:port name="StockQuoteSoapBindingQSPort
"
binding="ns:StockQuoteSoapBinding
">
<soap:address location="http:/host:port/project/proxyname"/>
</wsdl:port>
</wsdl:service>
StockQuoteService
、有効な WSDL では StockQuoteSoapBindingQSService
です。 http://example.com:9999/stockquote
は、有効な WSDL のポートで生成されたアドレス http://
host:port/project
/stockquote
とは異なります。
1 つのポートだけをエクスポーズしてクライアントにさまざまなエンタープライズ アプリケーションを提供する場合は、[任意の SOAP サービス] または [任意の XML サービス] を使用します。任意の SOAP の場合、SOAP 1.1 と SOAP 1.2 のどちらであるかを指定する必要があります。
要求メッセージまたは応答メッセージのいずれかが XML 以外である場合、メッセージング サービス タイプを使用する必要があります。
Oracle Service Bus では、「misunderstand」SOAP ヘッダのチェックは自動では行われません。ただし、XQuery 条件式と検証アクションを使用することで、この種のチェックを明示的に実行できます。検証アクションの詳細については、『Oracle Service Bus Console の使い方』の「検証アクションの追加」、または『Workshop for WebLogic 用 Oracle Service Bus プラグインの使用』の「検証アクションのプロパティ」を参照してください。XQuery 条件式の詳細については、『Oracle Service Bus Console の使い方』のプロキシ サービス : エディタ、または『Workshop for WebLogic 用 Oracle Service Bus プラグインの使用』の「条件エディタ」を参照してください。
Oracle Service Bus を使用して検証アクションをコンフィグレーションし、メッセージ フローで XQuery 条件式を使用して検証チェックを明示的に実行できます。
サービス タイプの詳細については、『Oracle Service Bus Console の使い方』の「プロキシサービスの作成とコンフィグレーション」にある「[全般的なコンフィグレーション] ページ」を参照してください。
以下の節では、プロキシ サービスのコンフィグレーションの概要を説明します。プロキシ サービスをコンフィグレーションする際の特定の手順については、以下を参照してください。
各プロキシ サービスは特定のタイプであり、それぞれのタイプに適した転送プロトコルで使用できます。Oracle Service Bus では、複数の標準転送とカスタム転送をサポートしています。サービス タイプと各タイプで使用できる標準転送を表 2-2 に示します。
注意 : | すべてのサービス タイプで、MIME を使用して添付ファイルを送受信できます。 |
Oracle Service Bus Console または Workshop for WebLogic 用 Oracle Service Bus プラグインで、プロキシ サービスのすべてのタイプの転送設定をコンフィグレーションする必要があります。コンフィグレーションの詳細は、転送の種類によって異なります。特定のコンフィグレーション設定については、以下を参照してください。
選択する転送は、バインディング定義で必要とされる転送モード (要求/応答、一方向、または両方) をサポートする必要があり、それに従ってコンフィグレーションする必要があります。
両方のモードでメッセージを交換するサービスの場合、(要求/応答を 2 つの非同期呼び出しとして実装する JMS などの転送で) 転送モードを適宜選択するようにバインディング レイヤをコンフィグレーションする必要があります。サービスが具象型の場合、バインディング定義の記述に従って、この選択が自動的に行われます。サービスが具象型でない場合、バインディング レイヤをコンフィグレーションするには、$outbound 変数でモードを設定する必要があります。
転送方式と WSDL に基づいて、転送モードが自動的に選択されますが、$inbound
または $outbound
で上書きできます。
サービス プロバイダを使用して、プロキシ サービスのセキュリティを指定できます。サービス プロバイダが必要となるのは、プロキシ サービスがクライアント証明書認証を必要とする HTTPS サービスにメッセージをルーティングする場合です。また、一部のメッセージ レベルのセキュリティ シナリオで必要となる場合もあります。
サービス アカウントを作成して、ビジネス サービスへの接続時に認証を行うことができます。サービス アカウントは、必要なユーザ名とパスワードの組み合わせのエリアス リソースとして機能します。
WebLogic Server を使用して、資格レベルの検証を必要とするビジネス サービスのセキュリティ資格を直接管理することができます。
詳細については、『Oracle Service Bus Console の使い方』の「サービス キー プロバイダ」を参照してください。また、「プロキシ サービスのセキュリティ関連の検証」も参照してください。
プロキシ サービスの各タイプは、同じパターンに従ってモデル化されています。各サービス タイプでは、以下のコンフィグレーションを定義する必要があります。
プロキシ サービスの各タイプに固有のコンフィグレーションのプロパティを表 2-3 に示します。
|
|
プロキシ サービスのメッセージ フロー定義では、プロキシ サービスを介したメッセージ フローでメッセージを処理する方法を決定するロジックを定義します。メッセージ フロー定義では、必要に応じてメッセージを変換し、メッセージ データをビジネス サービス (発信メッセージの場合) または送信元のクライアント (着信メッセージの場合) に必要なフォーマットにマップします。次に、メッセージは適切な場所にルーティングされます。メッセージ フローのコンフィグレーションについては、「Oracle Service Bus でのメッセージ フローの作成」を参照してください。
アクティブなプロキシ サービスへの変更が含まれるセッションをアクティブ化する場合、Oracle Service Bus は変更を検証して、プロキシ サービスの静的なエンドポイントに必要なすべての資格が作成されているかどうかを確認します。たとえば、Web サービスを静的なエンドポイントとして使用するようにプロキシ サービスをコンフィグレーションしており、その Web サービスがデジタル署名を必要とする場合、Oracle Service Bus はプロキシ サービスにサービス キー プロバイダが関連付けられているかどうか、また、サービス キー プロバイダにデジタル署名として使用できるキーペア バインディングが含まれているかどうかを検証します。
セッションにサービス キー プロバイダのキーペア バインディングへの変更が含まれている場合は、そのサービス キー プロバイダを使用するすべてのプロキシ サービスに対して変更が検証されます。たとえば、暗号化用のキーペアを削除すると、暗号化が必要なエンドポイントを含むプロキシ サービス プロバイダを参照しているプロキシ サービスに対して、検証エラーが報告されます。
以下の条件により、セキュリティ関連の検証が実行されるタイミングと、検証中に行われるアクションが決定されます。
以下の節では、ビジネス サービスのコンフィグレーションの概要を説明します。ビジネス サービスをコンフィグレーションする際の特定の手順については、以下を参照してください。
各ビジネス サービスは特定のタイプであり、それぞれのタイプに適した転送プロトコルで使用できます。Oracle Service Bus では、複数の標準転送とカスタム転送をサポートしています。サービス タイプと各タイプで使用できる標準転送を表 2-4 に示します。
|
||
|
||
|
ビジネス サービスの各タイプは、同じパターンに従ってモデル化されています。各サービス タイプでは、以下のコンフィグレーションを定義する必要があります。
表 2-5 に示すビジネス サービスのコンフィグレーションのプロパティは、すべてのサービス タイプに共通するものです。各サービス タイプに固有のプロパティについては、「ビジネス サービスの各タイプのコンフィグレーション設定」を参照してください。
|
ビジネス サービスの各タイプに固有のコンフィグレーションのプロパティを表 2-6 に示します。
$body 変数と $header 変数に、ビジネス サービスにルーティングまたはパブリッシュされる SOAP メッセージの <soap:Body> と <soap:Header> がそれぞれ保持されます (SOAP 1.1 プロキシの場合、$body と $header では SOAP 1.1 ネームスペース本体とネームスペースを使用し、SOAP 1.2 プロキシでは SOAP 1.2 ネームスペース本体とネームスペースを使用します)。
|
|
$body 変数には、<soap:Body> 要素内にラップされた受信 XML メッセージが保持されます (SOAP 1.1 プロキシの場合、$body では SOAP 1.1 ネームスペース本体を使用し、SOAP 1.2 プロキシでは SOAP 1.2 ネームスペース本体を使用します)。
|
|
$body 変数には、<soap:Body> 要素内にラップされた受信メッセージが保持されます (SOAP 1.1 プロキシの場合、$body では SOAP 1.1 ネームスペース本体を使用し、SOAP 1.2 プロキシでは SOAP 1.2 ネームスペース本体を使用します)。
|
ビジネス サービスで Web サービス セキュリティが必要な場合は、ビジネス サービスの作成時に、指定する WSDL に必要な WS-Policy がアタッチされていることを確認してください。さらに、ビジネス サービスの WS-Policy により暗号化が必要な場合は、ビジネス サービスのパブリック証明書が WSDL に埋め込まれていることを確認してください。ビジネス サービスが WebLogic Server 9.0 以降の Web サービスである場合は、http://<host>:<port>/<service url>?WSDL
という URL を使用して WSD を取得できます。必要に応じて、パブリック証明書が自動的に埋め込まれます。
プロキシ サーバを介してメッセージをルーティングするように、ビジネス サービスをコンフィグレーションできます。これを行うには、必要な資格と共に 1 つまたは複数のプロキシ サーバを指定するプロキシ サーバ リソースを作成します。その後、プロキシ サーバ リソースをビジネス サービスに関連付けることができます。これにより、Oracle Service Bus が、コンフィグレーションされたプロキシ サーバを使用してビジネス サービスへの接続を行います。
複数のプロキシ サーバをリソースに追加することにより、Oracle Service Bus でロード バランシングを実行し、コンフィグレーションされたプロキシ サーバ間でフォールト トレランスを可能にします。資格はプロキシ サーバに対する接続を開く場合に使用されます。特定のプロキシ サーバにアクセスできない場合、Oracle Service Bus はコンフィグレーションに含まれる次のプロキシ サーバを使用しようとします。すべてのプロキシ サーバにアクセスできない場合、Oracle Service Bus はバック エンド サービスへの直接接続を試みます。これにも失敗すると、障害が発生して呼び出し元に返送されます。
プロキシ サーバをコンフィグレーションする際、ホスト名または IP アドレスに加えて、サーバのクリア テキストまたは SSL ポート番号を指定できます。プロキシ サーバ リソース コンフィグレーションで指定されたポートは、バック エンド サービスのポートではなく、Web プロキシ サーバの実際の物理的なポートに対応するものなので注意してください。ただし、ビジネス サービスでのエンド ポイント コンフィグレーションはバック エンド サービスの実際のエンド ポイントに対応します。これは HTTP CONNECT コマンドを使用した SSL/TLS トンネリングの場合にも当てはまります。
注意 : Web プロキシ サーバには、クリア テキスト ソケットを使用した HTTP CONNECT と SSL ソケットを使用した HTTP CONNECT の両方をサポートするサーバもあれば、クリア テキスト ソケットを使用した HTTP CONNECT のみをサポートするサーバもあります。たとえば、Sun Proxy Server 4.0 は、クリア テキスト ソケットを使用した HTTP CONNECT および SSL ソケットを使用した HTTP CONNECT をサポートしますが、プロキシ サーバ モードでの Apache Web Server 2.2 は、クリア テキスト ソケットを使用した HTTP CONNECT のみをサポートします。
通常は、SSL/TLS トンネリングをサポートする場合、物理的なプロキシ サーバにサーバまたは認証局 (CA) の証明書をインストールする必要はありません。代わりに、Web プロキシ サーバは安全なソケットを開くために、呼び出し元 (この場合、Oracle Service Bus) から受信した証明書を使用します。同様に、ビジネス アプリケーションをホストするサーバがクライアントの証明書を必要とする場合は、プロキシ サービスをホストするサーバ (Oracle Service Bus) の証明書が認証に使用されます。
Oracle Service Bus には、Oracle Service Bus に登録されたリソースをエクスポーズする際に使用するリソース サーブレットが用意されています。Oracle Service Bus に登録されているリソースは次のとおりです。
リソースをエクスポーズする際に使用する URL の形式も示します。
以下の URL 形式を使用して、リソースの詳細をエクスポーズできます。
http://host:port/sbresource?WSDL/project/...wsdlname
http://host:port/sbresource?POLICY/project/...policyname
http://host:port/sbresource?MFL/project/...mflname
http://host:port/sbresource?SCHEMA/project/...schemaname
http://host:port/sbresource?PROXY/project/...proxyname
http://host:port/sbresource?BIZ/project/...business_service_name
注意 : | Oracle Service Bus でリソースのエクスポーズに使用する URL は、特殊文字をエスケープするために UTF-8 でコード化する必要があります。 |
![]() ![]() ![]() |