Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g(10.1.3.1.0) B31854-01 |
|
OC4Jで提供されるOracleのタグ・ライブラリを使用して、開発者はJSPページを作成し、Webサービスのクライアント・プログラムとして使用できます。この章では、タグ・ライブラリについて説明します。次の項目が含まれます。
この章では、読者にWebサービス、Simple Object Access Protocol(SOAP)およびWeb Services Description Language(WSDL)の知識があることを前提としていますが、これらの概要についても説明します。さらに、関連するWorld Wide Web Consortium(W3C)仕様など、追加ドキュメントの参照先も示します。
OC4J Webサービス・タグ・ライブラリは、Oracle Application Server Web Servicesに基づいています。詳細は、『Oracle Application Server Web Services開発者ガイド』参照してください。
次の各項では、Webサービスの概念について大まかに説明します。
Webサービスとは、コンピューティング・プラットフォームに関係なくクライアントがインターネット上で起動できる一連のプロシージャまたはアクションのことです。Webサービスは、SOAP、WSDLおよびUDDI(すべて後述します)など、広範囲に採用されている一連の標準に従って分散コンピューティング環境で緩やかに結合されたコンポーネントで構成されます。たとえば、「ワールド・カップ・サッカー」というサービスは、得点、スケジュールおよび順位表を取得するアクションで構成されます。
Webサービスには、次の機能が必要です。
Webサービス、特にOracleAS Web Servicesの詳細は、『Oracle Application Server Web Services開発者ガイド』を参照してください。
関連する仕様は、次のWebサイトを参照してください。
http://www.w3.org/TR/SOAP(W3C SOAP仕様)
http://www.w3.org/TR/wsdl(W3C WSDL仕様)
http://www.uddi.org/specification.html(UDDI仕様)
この項では、SOAPの概要について説明します。詳細は、W3C Simple Object Access Protocol(SOAP)1.1仕様を参照してください。
SOAPはXMLベースの軽量のプロトコルで、型指定されたデータや構造化データをインターネット上またはその他の分散環境上で交換するために使用されます。これ以外の機能として、SOAPは、リモート・プロシージャ・コール(RPC)およびメッセージ指向のデータ交換をサポートします。
メッセージ指向の実装では、データ交換は、モジュール化パッケージングとエンコーディング・モデルを使用して行われます。メッセージは、操作に関連付けられた入力データ部分と出力データ部分が指定されたWSDLコンポーネントです。詳細は、「Webサービス・メッセージとXML Schema定義の概要」を参照してください。
RPCはソケットの代替で、プロシージャ・コール・レベルでの通信インタフェースを備えています。RPCはローカル・プロシージャのコールに似ていますが、実際には、コールの引数はパッケージ化されてリモート・ターゲットに送信されます。RPC機能では、リクエスト/レスポンスの方法論を利用しています。この場合、エンド・ポイントでは、プロシージャ指向のメッセージを受信し、対応するレスポンスを返信します。
SOAPをRPCとともに使用する場合は、プロトコル・バインディングに依存しません。HTTPがプロトコル・バインディングの場合、HTTPリクエストはRPCコールに対応し、HTTPレスポンスはRPCレスポンスに対応しています。
SOAPの主な特長は、次のとおりです。
Webサービスは、XMLベースのWeb Services Description Languageを使用してWSDL(.wsdl
)文書に記述されます。
次に、WSDLの主要な用語を示します。
より正確に言うと、Webサービスは、単なる抽象的なアクションや操作のコレクションではなく、関連するポート、つまりエンド・ポイントのコレクションです。
WSDLの仕様では、WSDL文書の一般的な構造の概要について説明しています。次の主要な要素が含まれています。詳細は、W3C Web Services Description Language(WSDL)1.1仕様を参照してください。
<types>
要素には、1つ以上の<schema>
サブ要素を使用して、サービスの操作で使用されるメッセージで交換されるデータの説明を含めます。
<message>
要素には、操作の入力または出力として送信されるデータの抽象的な定義を含めます。
<portType>
要素には、1つ以上の<operation>
サブ要素を使用して、Webサービス操作の抽象的な定義を含めます。<operation>
要素では、操作の入力に使用されるメッセージと出力に使用されるメッセージを指定します。
<binding>
要素は、<operation>
サブ要素を使用して、各操作を特定のプロトコル、および使用するデータ・フォーマットにバインドします。
<service>
要素は、Webサービスのポート、つまりエンド・ポイントを定義します。<service>
要素内には、1つ以上の<port>
サブ要素があり、各<port>
要素によって、バインディングはエンド・ポイントを定義するアドレスに結合されます。
メッセージは、Webサービスの操作、つまりメソッドで使用されるパラメータを定義します。メッセージは、1つ以上のパートで構成される通信対象データの型指定された定義です。各パートは、「購入発注書」パートや「請求書」パートなどの論理エンティティに相当します。各パートには、関連付けられたデータ項目に対する型指定があります。
OracleAS Web ServicesなどのSOAPベースの実装では、メッセージで使用するデータ型は、XML Schema Definition(XSD)言語を使用して定義します。この言語は、事前定義の単純型とユーザー定義の複合型をサポートしています。
XSDを使用した実装の場合、メッセージを定義する構文は、次のとおりです。
<message name="nmtoken"> <part name="nmtoken" [type="qname"] [element="qname"] /> </message>
この構文では、element
属性は、XSD構文を使用して定義されたXSD複合型の場所を参照します。type
属性はXSD単純型を、「nmtoken
」は標準XMLの名前トークンを、「qname
」は標準XMLの修飾名をそれぞれ示しています。メッセージ、および各メッセージのパートは0(ゼロ)以上です。
SOAPエンコーディング・スタイルのencoded
では、使用できるのは単純型のみであるため、element
属性は使用されません。エンコーディング・スタイルがliteral
の場合は、単純型も複合型も設定できます。したがって、<part>
要素には、type
属性かelement
属性のいずれかを使用できます。ただし、両方は使用できません。
次に、後述の「例: WSDL定義」から抜粋したメッセージ定義の例を示します。
<message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message>
GetLastTradePriceInput
は、メッセージ名です。その名前が示すとおり、これは入力メッセージです。この場合、element
属性は、複合型のTradePriceRequest
が定義されている名前空間を参照します。次に、その定義例(後述の「例: WSDL定義」の一部)を示します。
<element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> <element name="companyName" type="string"/> </all> </complexType> </element>
XML Schemaの入門書は、次のW3Cのサイトから入手できます。
http://www.w3.org/TR/xmlschema-0/
この例では、WebサービスのWSDL定義を示し、HTTPリクエストとHTTPレスポンスにそれぞれ埋め込まれた入力メッセージと出力メッセージの例を示します。
W3C Web Services Description Language(WSDL)1.1仕様には、次のWSDL文書の例が記載されています。この例では、入力として株価銘柄記号を受け取り、出力として現在の株価を戻す、株式相場サービスを定義しています。SOAPエンコーディング・スタイルのliteral
を使用しているため、複合型が使用できます(実際に使用されています)。
<?xml version="1.0"?> <definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace="http://example.com/stockquote.xsd" xmlns="http://www.w3.org/2000/10/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 name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message> <message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePrice"/> </message> <portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <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 name="StockQuoteService"> <documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions>
WSDL定義では、最初に入力メッセージGetLastTradePriceInput
および出力メッセージGetLastTradePriceOutput
を指定し、次にこれらを操作GetLastTradePrice
に結合した後、その操作のバインドとポートを定義します。
前述の例で定義されているWebサービスに対応して、この項ではメッセージの外観、つまりHTTPリクエストに埋め込まれSOAPエンベロープ化された入力メッセージとHTTPレスポンスに埋め込まれSOAPエンベロープ化された出力メッセージを示します。次の例は、W3C Web Services Description Language(WSDL)1.1仕様からの抜粋です。
次にリクエストを示します。
POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "SOAP_URI" <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <m:GetLastTradePrice xmlns:m="xmlns_URI"> <m:tickerSymbol>DIS</m:tickerSymbol> </m:GetLastTradePrice> </soapenv:Body> </soapenv:Envelope>
この例のxmlns_URI
は、GetLastTradePrice
操作とそのメッセージが定義されている名前空間を識別するために使用されるURI値です(定義例については、前述の「例: WSDL定義」にあるWSDL文書を参照してください)。また、tickerSymbol
も定義されています。リクエストは、Walt Disney社の株価です。SOAP_URI
は、SOAPのHTTPバインドに対するSOAPアクションのHTTPヘッダーを示すURIです。
次にレスポンスを示します。
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: nnnn <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <m:GetLastTradePriceResponse xmlns:m="Some_URI"> <m:price>34.5</m:price> </m:GetLastTradePriceResponse> </soapenv:Body> </soapenv:Envelope>
操作Xxxx
に対するレスポンスは、慣例的にXxxx
Response
と呼ばれます。Some_URI
は、GetLastTradePriceResponse
操作が定義されている名前空間を識別するために使用されるURI値です。
次の各項では、Webサービス・タグ・ライブラリの概要と詳細、およびタグ・ライブラリ実装のベースであるOracleAS Web Servicesの概要について説明します。
OC4Jが提供するWebサービス・タグ・ライブラリを使用すると、開発者は、Webサービスのクライアント・アプリケーション用JSPページを簡単に作成できます。実装には、SOAPベースの機能を使用します。クライアント・アプリケーションでは、WSDL文書にアクセスした後、WSDL情報を使用してWebサービスの操作にアクセスします。
また、このタグ・ライブラリでは、Oracleによる動的起動APIの実装を使用します。この実装の説明は、『Oracle Application Server Web Services開発者ガイド』に記載されています。クライアント・アプリケーションで実行時にWSDL文書を取得する場合は、動的起動APIを使用して、WSDL文書に記述されているSOAP操作を起動します。タグ・ハンドラでは、Webサービスを起動するSOAPリクエストの送信時とSOAPレスポンスの処理時にAPIを使用します。
Oracleの動的起動APIは、oracle.j2ee.ws.client
およびoracle.j2ee.ws.client.wsdl
パッケージのクラスとインタフェースで構成されています。
oracle.j2ee.ws.client
パッケージには、次の内容が含まれています。
WebServiceProxyFactory
: WSDL文書を(文書が含まれているJava入力ストリームまたは文書のURLを使用して)指定することで、WebServiceProxyFactory
インスタンスは、WSDL文書に指定されているサービス名とそのポート名の1つを使用して、WebServiceProxy
インスタンス(WebServiceProxy
インタフェースを実装するクラスのインスタンス)を作成できます。
WebServiceProxy
: このインタフェースを使用して、WSDL文書に定義されているサービスを表します。各WebServiceProxy
インスタンスは、WSDL文書の位置に基づいています。また、必要に応じて、使用するサービスとポートを識別する追加の修飾子に基づきます。WebServiceProxy
クラスは、WSDL文書で公開された全操作の構文とシグネチャも含め、WSDLポート・タイプを決定するメソッドと定義済の操作を起動するメソッドを公開します。
WebServiceMethod
: このインタフェースを使用して、Webサービスのメソッド、つまり操作を起動します。
oracle.j2ee.ws.client.wsdl
パッケージには、次の内容が含まれています。
Operation
: WSDL操作を表します。
Message
: 操作の入力または出力に使用するメッセージを表します。
Part
: メッセージ・パートを表します。
Input
: 入力メッセージを表します。
Output
: 出力メッセージを表します。この項では、OC4J Webサービス・タグ・ライブラリとその機能の概要について説明します。このタグ・ライブラリは、次の機能をサポートします。
また、タグ・ライブラリは、次の名前空間を持つバージョンのW3C XML Schemaを使用したWSDL文書で定義された起動操作をサポートしています。
http://www.w3.org/2001/XMLSchema
Webサービス・タグ・ライブラリには、webservice
タグ(必要に応じてmap
タグとproperty
タグをネストできます)およびinvoke
タグ(必要に応じてpart
タグをネストできます)が含まれています。これらのタグは、次のように使用します。
webservice
: Webサービス・プロキシを作成します。このタグには、WSDL文書のURLが必要です。したがって、次の組合せのいずれかを使用します。
map
: このタグが指定されている場合、Webサービス・プロキシは、このタグを使用してSOAPマッピング・レジストリにエントリを追加します。このレジストリは、ローカルのSOAP/XML型をJava型にマップするレジストリです。任意の数のmap
タグを1つのwebservice
タグ内にネストできます。つまり、任意の型マッピングごとに1つのタグをネストできます。
property
: 必要に応じて、このタグを使用して、Webサービスのクライアント・アプリケーションで使用できるいくつかのカスタム・プロパティのいずれかを定義します。property
タグはすべて、webservice
タグ内にネストする必要があります。プロパティには、親のWebサービスと同じスコープが設定されます。
invoke
: このタグを使用してWebサービスの操作を起動します。invoke
タグがWebサービス・プロキシにアクセスするには、webservice
タグ内にネストされているか、あるいはスクリプト変数を使用する必要があります。
part
: 操作に入力メッセージ・パートが含まれている場合は、invoke
タグ内でpart
タグをネストして使用し、メッセージ・パートを定義します。パートごとに1つのpart
タグを使用します。 次の各項では、JavaServer Pagesタグ・ライブラリの標準準拠の実装であるOC4J Webサービス・タグの詳細および構文表記について説明します。
Webサービス・タグ・ライブラリを使用する場合は、次の要件に注意してください。
ojsputil.jar
ファイルに含まれています。このファイルは、OC4Jに同梱されていて、予約済のタグ・ライブラリ・ディレクトリにあります。このファイルがインストール済で、クラスパスに存在していることを確認してください。
wstaglib.tld
が、アプリケーションで使用可能である必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle Application Serverのインストール時、TLDはojsputil.jar
に配置されます。wstaglib.tld
のuri
値は次のとおりです。
http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/wstaglib.tld
taglib
ディレクティブ、予約済のタグ・ライブラリ・ディレクトリ、TLDファイルおよびuri
値の内容の詳細は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
この項で説明するタグの使用例は、「Webサービス・タグの例」を参照してください。
注意
|
このタグを使用して、Webサービス・プロキシ、つまりoracle.j2ee.ws.client.WebServiceProxy
インタフェースを実装するクラスのインスタンスを作成します。このタグには、WSDL文書のURLが必要です。次のように、バインディングとSOAP位置、またはサービス名とポートのいずれかを使用します。
UDDIレジストリを介してWSDL文書にアクセスするWebサービスの場合は、バインディングとSOAP位置を使用すると非常に便利です。その場合は、UDDI問合せを使用してバインディングと位置を決定し、リクエスト時の式を使用してタグに設定できます。
作成されたWebサービス・プロキシは、ネストされた任意のmap
タグを使用して、エントリをSOAPマッピング・レジストリに追加します。次項の「Webサービスのmapタグ」を参照してください。
<ws:webservice wsdlUrl = "WSDL_URL_of_Web_service" [ id = "variable_name_for_Web_service_proxy" ] [ scope = "page" | "request" | "session" | "application" ] [ binding = "SOAP_binding_information" ] [ soapLocation = "SOAP_endpoint_URL" ] [ service = "service_name_in_WSDL" ] [ port = "port_name_for_service" ] > ...body / nested tags... </ws:webservice>
wsdlUrl
(必須): 該当するWebサービスのWSDLにアクセスできるURLを指定します。
id
: webservice
タグ内にネストされていないinvoke
タグでアクセスするWebサービスの場合は、id
属性を使用して、WebServiceProxy
スクリプト変数の名前を指定します。その結果、invoke
タグでこの変数を参照できます。指定する名前は、有効なJava識別子である必要があります。id
属性を使用する場合、指定した変数は、スコープAT_END
(webservice
終了タグからJSPページの終わりまで使用可能)で自動的に宣言されます。
scope
: 必要に応じて、webservice
タグのスコープを指定します。デフォルト設定は「page
」です。
binding
: 前述の使用例1の場合は、binding
属性を使用して、SOAP位置(エンド・ポイントのURL)のSOAPバインド情報を指定し、SOAP位置はsoapLocation
属性で指定します。これらの属性は一緒に使用する必要があります。WSDL文書で定義済のバインド情報によって、特定のポート・タイプによって定義された操作とメッセージに対する具体的なプロトコルとデータ・フォーマットの仕様が指定されます。
soapLocation
: 前述の使用例1の場合は、soapLocation
を使用して、WSDL文書で定義済のSOAP位置(エンド・ポイントのURL)を指定します。この場合、binding
属性で指定したバインド情報が適用されます。これらの属性は一緒に使用する必要があります。
service
: 前述の使用例2の場合は、service
属性を使用してWSDL文書で定義済のサービスの名前を指定します。この属性は、port
属性とともに使用する必要があります。ただし、binding
とsoapLocation
を使用すると、いずれも無視されます。
port
: 前述の使用例2の場合は、port
属性を使用してサービスのポートを指定します。サービスは、service
属性によって指定されます。これらの属性は一緒に使用する必要があります。Webサービス・プロキシは指定されたポートを使用します。ポート・アドレスは、WSDL文書内の対応する<service>
要素で指定されます。binding
属性とsoapLocation
属性を使用する場合、service
属性とport
属性は無視されます。
相互運用性を維持するには、WSDL定義のSOAP/XMLデータ型をJavaクライアント・アプリケーションのJSPページで使用されるJava型にマップするマッピング機能が必要です。これは、OracleAS Web ServicesのSOAPマッピング・レジストリによって可能になります。
任意の数のmap
タグをwebservice
タグ内にネストすると、Webサービス・プロキシはエントリをレジストリに追加できます。該当する型マッピングごとに1つのmap
タグを使用します。
レジストリは、org.apache.soap.util.xml
パッケージのXMLJavaMappingRegistry
クラスのインスタンスです。WebServiceProxy
インスタンスには、レジストリにアクセスするgetXMLMappingRegistry()
メソッドがあります。
map
タグには、型マッピングに役立つエンコーディング・スタイル、シリアライザ、デシリアライザおよび名前空間URIなどを指定する属性が含まれています。Webサービス・タグ・ライブラリは、カスタムのシリアライザおよびデシリアライザをサポートしており、ユーザーが独自のシリアライザやデシリアライザを作成することができます。
<ws:map localName = "local_name_of_SOAPXML_type" namespaceUri = "URI_of_namespace_for_SOAPXML_type" javaType = "Java_type_to_map" encodingStyle = "URL_of_SOAP_encoding_style" java2xmlClassName = "Java_to_XML_serializer" xml2javaClassName = "XML_to_Java_deserializer" />
localName
(必須): SOAP/XMLデータ型のローカル名(SOAPStruct
など)を指定します。
namespaceUri
(必須): SOAP/XMLデータ型の名前空間に対して有効なURIを指定します。次に例を示します。
http://soapinterop.org/xsd
javaType
(必須): SOAP/XML型にマップするJava型を指定します。指定する型は、正式にマップ可能な型である必要があります。
encodingStyle
(必須): SOAPのエンコード・スタイルに対して有効なURIを指定します。次に例を示します。
http://schemas.xmlsoap.org/soap/encoding
java2xmlClassName
(必須): JavaからXMLに変換するデータをシリアライズする機能を備えたクラス名を指定します。カスタムのクラスでも構いません。次に例を示します。
org.apache.soap.encoding.soapenc.BeanSerializer
xml2javaClassName
(必須): XMLからJavaに変換するデータをデシリアライズする機能を備えたクラス名を指定します。カスタムのクラスでも構いません。次に例を示します。
org.apache.soap.encoding.soapenc.BeanSerializer
必要に応じて、このタグを使用して名前/値ペアを指定し、Webサービスのクライアント・アプリケーションで使用できる複数のカスタム・プロパティを定義します。たとえば、ネットワーク・ファイアウォールを経由してアクセスするためにプロキシが必要な場合は、property
タグを使用して、HTTPプロキシのホストとポートを指定できます。次のプロパティがサポートされます。
http.proxyHost
: HTTPプロキシ・サーバーのホスト名を指定します。
http.proxyPort
: HTTPプロキシ・サーバーのポート番号を指定します。
javax.net.ssl.KeyStore
: OracleセキュリティWalletファイルのフルパスを指定します。 <ws:property name="http.proxyHost" | "http.proxyPort" | "javax.net.ssl.KeyStore" value = "property_value" />
property
(必須): 設定するプロパティを指定します。タグ構文のリストにある、サポート対象プロパティの1つを指定する必要があります。
value
(必須): プロパティの値(ホスト名、ポート番号またはOracle Walletファイルのフルパス)を指定します。
このタグを使用してWebサービスの操作を起動します。タグ・ハンドラは、リモートのWebサービス操作をコールし、SOAPリクエストに入力メッセージを渡して、SOAPレスポンスを待機します。操作を指定するだけでなく、戻されるレスポンスを格納するオブジェクトのオブジェクトIDを指定する必要があります。タグ・ハンドラでは、操作名を使用して、WSDL文書内でその操作を検索します。
invoke
タグは、次のいずれかの方法でWebサービス・プロキシにアクセスできます。
invoke
タグを、プロキシを設定するwebservice
タグ内にネストします。
invoke
タグにwebservice
属性を指定し、webservice
タグのid
属性を使用して作成されたWebProxyService
スクリプト変数にアクセスします。
オーバーロードされた操作(異なるI/Oメッセージを使用した同名の2つの操作)がある場合、invoke
タグには、それぞれの操作に対する入力および出力メッセージ名を指定する属性がいくつか含まれます。この場合、RPCスタイルのバインディングでは、指定した入力メッセージ名と出力メッセージ名を使用して、操作のRPCシグネチャが構成されます。それ以外の場合、RPCシグネチャは、WSDL文書に従ったデフォルトとなります。
出力メッセージに複数のパートが含まれている場合、戻される結果は、メッセージ・パート(すべて単一のSOAPレスポンス内のパート)の配列になります。
OC4J 9.0.4以降の実装では、invoke
タグはXMLプロデューサとして動作でき、toXMLObjName
属性を使用してXML出力オブジェクトの明示的な受渡しをサポートします。これは、Web Object CacheタグやXML transform
タグなど、他の種類のタグにinvoke
タグをネストする場合に便利です。また、XML出力オブジェクトをJSPページのJspWriter
オブジェクトに書き込んで、ユーザーのブラウザに直接出力できます。この機能は、xmlToWriter
属性を使用して有効化します。
<ws:invoke id = "variable_name_for_output_result" operation = "operation_to_invoke" [ webservice = "variable_name_of_Web_service_proxy" ] [ inputMsgName = "name_of_input_message" ] [ outputMsgName = "name_of_output_message" ] [ xmlToWriter = "true" | "false" ] [ toXMLObjName = "objectname" ] > ...body / nested tags... </ws:invoke>
id
(必須): 出力結果オブジェクトのスクリプト変数名を指定します。指定する名前は、有効なJava識別子である必要があります。id
オブジェクトのスコープについては、前述のタグ構文の前の「注意」を参照してください。
operation
(必須): 実行する操作(WSDL文書の操作)を指定します。
webservice
: 起動するサービスに対応しているWebServiceProxy
スクリプト変数の名前を指定する場合は、この属性を使用します。invoke
タグが、任意のサービスにアクセスするwebservice
タグ内にネストされている場合、この属性は不要です。
inputMsgName
: 必要に応じて、操作に対する入力メッセージ名(WSDL文書のwsdl:input
タグの名前)を指定します。これが必要なのは、オーバーロードされた操作(異なるメッセージ名を使用した複数の同名の操作)がある場合のみです。
outputMsgName
: 必要に応じて、操作に対する出力メッセージ名(WSDL文書のwsdl:output
タグの名前)を指定します。これが必要なのは、オーバーロードされた操作(異なるメッセージ名を使用した複数の同名の操作)がある場合のみです。
xmlToWriter
: ドキュメント・スタイルWebサービスの場合に、出力がXMLオブジェクトで、XMLをJSPページのJspWriter
出力オブジェクトに出力するには、この属性を「true
」に設定します。デフォルト設定は「false
」です。
toXMLObjName
: ドキュメント・スタイルWebサービスの場合に、出力をXMLオブジェクトで明示的に渡すには、この属性を使用してオブジェクト名を指定します。
操作の実行に入力メッセージ・パートの値が必要な場合は、入力パートごとに1つのpart
タグをinvoke
タグ内でネストさせて使用します。
パートの値の指定方法は、RPCスタイルとドキュメント・スタイルのうち、どちらのWebサービスを使用しているかに応じて異なります。RPCスタイルの場合は、value
属性を使用する必要があります。ドキュメント・スタイルの場合は、タグ・ボディにXMLリクエスト要素を使用して値を渡す方法があります。
<ws:part name = "part_name" [ value = "part_value" ] > ...optional body, with request element, for document-style... </ws:part>
name
(必須): 入力パートの名前(有効なJava識別子)を指定します。
value
: 入力パートの値を指定します。これは、RPCスタイルのWebサービスには必須です。ドキュメント・スタイルのWebサービスの場合は、このかわりにタグ・ボディを使用できます。
この項では、Webサービス・タグ・ライブラリで使用するテンプレート、RPCスタイルWebサービスを起動するサンプルJSPページ、およびドキュメント・スタイルWebサービスを起動するサンプル・ページを示します。
<HTML> <HEAD> <TITLE>Title</TITLE> </HEAD> <BODY> <H2>This is sample HTML text.</H2> <%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/wstaglibrary.tld" prefix="ws" %> <ws:webservice id="myws" wsdlUrl="wsdlurl" { binding="" soapLocation="" | service="" port="" } { scope="page | request | session | application" } > <ws:property name="property" value="string"/> <ws:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" localname="SOAPStruct" namespaceUri="http://soapinterop.org/xsd" javaType="MySoapStructBean" java2xmlClassName="org.apache.soap.encoding.soapenc.BeanSerializer" xml2javaClassName="org.apache.soap.encoding.soapenc.BeanSerializer" /> </ws:webservice> <ws:invoke id="result" webservice="myws" operation="add" inputMsgName="" outputMsgName=""> <ws:part name="part_name" value="{string | <%= expression %>}"/> </ws:invoke> <% =result %> </BODY> </HTML>
<%@ page contentType="text/html"%> <%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/wstaglib.tld" prefix="ws" %> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; "> </HEAD> <BODY> <% String itemID = request.getParameter("itemID"); %> <ws:webservice id="ebay" wsdlUrl="http://www.xmethods.net/sd/2001/EBayWatcherService.wsdl" binding="eBayWatcherBinding" soapLocation="http://services.xmethods.net:80/soap/servlet/rpcrouter" scope="page"> <ws:property name="http.proxyHost" value="www-proxy.us.oracle.com"/> <ws:property name="http.proxyPort" value="80"/> </ws:webservice> <ws:invoke id="price" webservice="ebay" operation="getCurrentPrice"> <ws:part name="auction_id" value="<%=itemID%>"/> </ws:invoke> <B> Action price for eBay Item # <%=itemID%> is : </B> <P> $<%= price%> @ <%= new java.util.Date()%> </P> </BODY> </HTML>
<%@ page contentType="text/xml;"%> <%@ page import= oracle.xml.parser.v2.XMLElement;"%> <%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/wstaglib.tld" prefix="ws" %> <%@ taglib uri="http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/xml.tld" prefix="xml" %> <ws:webservice id="bookService" wsdlUrl="http://hosting.msugs.ch/cheeso9/books/books.asmx?WSDL" binding="LookyBookServiceSoap" soapLocation ="http://hosting.msugs.ch/cheeso9/books/books.asmx" scope="session"> </ws:webservice> <ws:invoke id="bookResult" operation="GetInfo" webservice="bookService"> <ws:part name="parameters"> <GetInfo xmlns="http://dinoch.dyndns.org/webservices/"> <ISBN>SomeISBNNumber</ISBN> </GetInfo> </ws:part> </ws:invoke> <% XMLNode resultNode = (XMLNode) bookResult; resultNode.Error! Bookmark not defined.(new java.io.PrintWriter(out)); %> </BODY> </HTML>
|
![]() Copyright © 2002, 2006 Oracle Corporation. All Rights Reserved. |
|