ヘッダーをスキップ

Oracle Application Server Web Services開発者ガイド
10g(10.1.3.1.0)

B31868-01
目次
目次
索引
索引

戻る 次へ

5 OracleAS Web Servicesメッセージ

Oracle Application Server Web Servicesは、SOAP 1.1および1.2メッセージをサポートしています。メッセージ書式には、style="document"またはstyle="rpc"、およびuse="literal"またはuse="encoded"があります。

この章の項目は、次のとおりです。

OracleAS Web Servicesのメッセージ書式

この項では、OracleAS Web Servicesの現行リリースでサポートされているメッセージ書式について説明します。内容は、次のとおりです。

OracleAS Web Servicesでサポートされているメッセージ書式を理解するには、Web Service Description Language(WSDL)1.1とワイヤ書式の関係を理解すると役に立ちます。ワイヤ書式とは、Simple Object Access Protocol(SOAP)メッセージまたはペイロードが伝送中に実際に取る表現のことです。メッセージ書式は、WSDLに定義されているバインディングのuseおよびstyle属性によって決まります。メッセージ部分を定義するXMLスキーマのタイプにより、メッセージ書式が拡張されます。この場合、WSDLは規約だとみなすことができます。WSDLの様々な属性を定義することにより、メッセージのワイヤ書式を変更します。

通常、相互運用性に関して発生する問題は、実行時にワイヤ書式で通知されます。多くの場合、これらの問題は、WSDLを調整し、Webサービスのアーチファクトを再生成することによって解決できます。

メッセージ書式とワイヤ書式の関係は、1対1ではありません。たとえば、ランタイムSOAPメッセージを、rpc-literalスタイルのWebサービスであるサービスBによって生成されるメッセージと同じ種類に見えるようにするXMLスキーマを使用して、document-literalスタイルのWebサービスとしてサービスAを定義できます。この場合、サービスAのstyleおよびuse(すなわち、メッセージ書式)をrpcおよびliteralに変更しても、サービスAはサービスBと同じにはなりません。変更しても、ランタイムSOAPメッセージは、変更内容とはまったく異なるものになってしまいます。サービスAで使用されているスキーマも変更する必要があるのです。

メッセージ書式の概要

次の各項では、OracleAS Web Servicesでサポートされているメッセージ書式について簡単に説明します。

関連項目

WSDLのバインディング属性useおよびstyleの使用の詳細は、「SOAP関連ドキュメント」および「WSDL関連ドキュメント」にリストされているSOAPおよびWSDLの仕様を参照してください。 

style="rpc"およびstyle="document"

SOAPペイロードには、rpcスタイルとdocumentスタイルがあります。通常、rpcスタイルのペイロードは、リモート・プロシージャ・コールまたはメソッド・コールを起動する必要があるときに使用します。rpcスタイルの場合、リクエストのSOAPボディにある最上位のXML要素の名前は、常にWSDL操作の名前になります。これらの名前は、任意のバインディングにおいて一意であるため、曖昧さはありません。通常、SOAPのXMLメッセージはメソッド名とパラメータで構成されており、これらはすべてXMLで表現されます。

WSDL操作をオーバーロードする場合、対応する操作バインディングには一意のSOAPActionを指定する必要があります。rpcスタイルのSOAPボディ要素(<body>)の構造については、SOAP 1.1仕様のSection 7を参照してください。

documentスタイルのペイロードのSOAPボディには、SOAP 1.1仕様のSection 7に準拠する必要がないXMLが含まれますが、このXMLは、メッセージのペイロードを定義するためにXMLスキーマのグローバル要素を使用します。このスキーマは、WSDLのtypeセクション内に定義するか、そのセクションにインポートします。

use="literal"およびuse="encoded"

SOAPクライアントおよびサーバーは、WSDLのbindingの項にある、use属性で指定されたルールに従って、SOAPペイロードの<body>要素のXMLコンテンツを解釈します。このクライアントおよびサーバーは、互いに正しくデータを解釈できるように同じエンコード・ルールに従う必要があります。

use="literal"の場合、入出力メッセージのSOAPボディをエンコードおよび解釈するルールは、スキーマに完全に基づいて記述されたものになります。

use="encoded"の場合、SOAPボディのencodingStyle属性は、SOAP仕様に基づいてメッセージをエンコードおよび解釈するルールを判別します。

また、SOAPエンコーディング・スキーマの拡張機能に定義されている型を使用することもできます。

サポートされているメッセージ書式

次の各項では、OracleAS Web Servicesでサポートされているメッセージ書式について説明します。

document-literalメッセージ書式

document-literalは、OracleAS Web Servicesのデフォルトのメッセージ書式です。document-literal操作には、wrappedとbareという2つの一般的なスタイルがあります。

document-literalは、WS-I Basic Profile 1.0および1.1に準拠しています。

各document-literal操作は、入力メッセージの最上位要素のQNameを使用して一意に識別されます。.NET Webサービスとの相互運用性が最もよいのはwrappedスタイルのdocument-literalであるため、OracleAS Web Servicesのデフォルトのメッセージ書式としてはこの方式を使用することをお薦めします。

関連資料

相互運用性とメッセージ書式の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「相互運用可能なWebサービスの実現」を参照してください。 

利点:
短所:
document-literalメッセージ書式によるサンプル・リクエスト・メッセージ

例5-1は、document-literalメッセージ書式のリクエスト・メッセージを示しています。SOAPボディ(env:Body)の下のXML要素部分(payloadDocument)は、WSDLのスキーマに定義されているグローバル要素のドキュメント・インスタンスである必要があることに注意してください。

この例は、SOAP 1.1メッセージに準拠しています。SOAP 1.2メッセージに準拠するようにこの例を変更するには、xmlns:envの値をhttp://www.w3.org/2003/05/soap-envelopeに変更します。

例5-1    document-literalメッセージ書式によるリクエスト・メッセージ

<env:Envelope
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ns0="http://ws.oracle.com/doc-lit">
        <env:Body>
                <ns0:payloadDocument>
                        <ns0:name>Scott</ns0:name>
                        <ns0:data>Hello</ns0:data>
                </ns0:payloadDocument>
        </env:Body>
</env:Envelope>

rpc-encodedメッセージ書式

rpc-encodedメッセージ書式では、SOAP仕様に定義されているエンコード・ルールを使用します。

利点:
短所:
rpc-encodedメッセージ書式のサンプル・メッセージ

例5-2は、rpc-encodedメッセージ書式を使用するリクエスト・メッセージを示します。SOAPボディ(env:Body)の下にある送信対象のXML要素部分(echoString)のタグ名は、対応するWSDL操作の名前と同じである必要があることに注意してください。env:encodingStyle属性は、使用されているSOAPエンコード・スタイルを示します。操作要素の下の各XML要素部分(stringParam)は、パラメータに対応します。これは、simpleTypeのインスタンスまたはグローバル型定義である必要があります。グローバル型定義である場合、WSDLのスキーマ内にあるか、SOAPエンコード拡張型の1つである必要があります。

OracleAS Web Servicesに対するrpc-encodedリクエスト・メッセージ(またはOracleAS Web Servicesによって生成されたスタブに対するrpc-encodedレスポンス・メッセージ)は、xsi:type属性がなくても使用できます。

例5-2および例5-3は、SOAP 1.1のメッセージに準拠しています。これらの例をSOAP 1.2のメッセージに準拠するようにするには、次のようにします。

例5-3は、rpc-encodedメッセージ書式を使用するレスポンス・メッセージを示しています。OracleAS Web Servicesからのrpc-encodedレスポンス・メッセージ(またはOracleAS Web Servicesによって生成されたスタブ内のrpc-encodedリクエスト・メッセージ)には、常にxsi:type属性が含まれます。

例5-3    rpc-encodedレスポンス・メッセージ

<env:Envelope
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ns0="http://ws.oracle.com/rpc-enc">
        <env:Body>
                <ns0:echoStringResponse
                        env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
                        <stringParam xsi:type="xsd:string">Hello</stringParam>
                </ns0:echoStringResponse>
        </env:Body>
</env:Envelope>
rpc-encodedメッセージ書式のxsi:type属性

SOAP実装では多くの場合、rpc-encodedメッセージ書式を使用するメッセージでは通常、メッセージ・ペイロードの要素ごとにxsi:type属性が使用されます。この属性は、オブジェクトのシリアライズおよびデシリアライズに役立ちます。多くの場合、xsi:type属性はオプションです。xsi:type属性が必須なのは、要素がスキーマに定義されている要素タイプの派生タイプのインスタンスである場合のみです。インバウンドSOAPメッセージの場合、OracleAS Web Servicesは、xsi:type属性の有無に関係なくメッセージを受け入れます。rpc-encoded書式のアウトバウンドSOAPメッセージの場合、OracleAS Web Servicesは常にxsi:type属性を発行します。

例5-4および例5-5は、SOAP 1.1のメッセージに準拠しています。これらの例をSOAP 1.2のメッセージに準拠するようにするには、次のようにします。

例5-4は、rpc-encodedメッセージ書式を使用した、echo操作のリクエスト・メッセージを示しています。なお、このコード・サンプルにはxsi:type="xsd:string"属性は含まれていません。

例5-4    xsi:type属性がないrpc-encodedリクエスト・メッセージ

<env:Envelope 
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ns0="http://ws.oracle.com/rpc-enc">
   <env:Body>
      <ns0:echo env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <param>some string</param>
      </ns0:echo>
   </env:Body>
</env:Envelope>

例5-5は、同じrpc-encoded書式のリクエスト・メッセージで、xsi:type属性があるものを示しています。

例5-5    xsi:type属性があるrpc-encodedリクエスト・メッセージ

<env:Envelope 
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ns0="http://ws.oracle.com/rpc-enc">
   <env:Body>
      <ns0:echo env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <param xsi:type="xsd:string">some string</param>
      </ns0:echo>
   </env:Body>
</env:Envelope>
Oracle固有の型のサポート

サポートされている型の完全なリストについては、JAX-RPC 1.1仕様の4〜5章を参照してください。JAX-RPC 1.1仕様については、次のURLを参照してください。

http://java.sun.com/webservices/jaxrpc/index.jsp

OracleAS Web Servicesのrpc-encodedメッセージ書式でサポートされているJava型およびOracle固有型の完全なリストについては、表5-1を参照してください。Oracle固有型に対するJava型のマッピングのサポートは、次に示すOracleAS Web Services固有の名前空間で指定されます。

http://www.oracle.com/webservices/internal

この名前空間は、JAX-RPC 1.1によってサポートされていないCollectionなどの標準Java型のための、非標準のXMLスキーマ定義に対応しています。


注意

java.util.Collectionファミリおよびjava.util.Mapファミリも、use="literal"(すなわち、document-literalおよびrpc-literal)でサポートされています。これらのJava型のスキーマ型は別の名前空間で定義されています。これらのJava型のサポート方法の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java型のXMLおよびWSDL型へのマッピング」を参照してください。  


表5-1    rpc-encoded固有のメッセージ書式でサポートされているJava型 
Java型  Javaクラス  マッピング詳細 

Javaプリミティブ型 

boolean、byte、double、float、int、long、short 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のOracleAS Web ServicesによるJavaプリミティブ型のXML型へのマッピングに関する項を参照してください。  

java.langオブジェクト型 

Boolean、Byte、Double、Float、Integer、Long、Short、String 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のOracleAS Web ServicesによるJava型のXML型へのマッピングに関する項を参照してください。  

Java基本型 

java.math.BigDecimal

java.math.BigInteger

java.xml.QName

java.util.Calendar

java.util.Date

java.net.URI 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のOracleAS Web ServicesによるJava型のXML型へのマッピングに関する項を参照してください。 

Java配列型 

サポートされている型の要素からなる1次元配列 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のOracleAS Web ServicesによるJava型のXML型へのマッピングに関する項およびJavaコレクション・クラスのXML型へのマッピングに関する項を参照してください。 

Javaの値のタイプ 

サポートされている型のプロパティがあるJavaBeans 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のJava値タイプについてのOracleAS Web Servicesのサポートに関する項を参照してください。 

添付ファイル

注意: 添付ファイルは相互運用不可能です。 

java.awt.Image

javax.mail.internet.MimeMultipart

javax.xml.transform.Source

javax.activation.DataHandler 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「メッセージ添付ファイルの処理」を参照してください。 

java.util.Collection 

java.util.Collection

java.util.List

java.util.Set

java.util.Vector

java.util.Stack

java.util.LinkedList

java.util.ArrayList

java.util.HashSet

java.util.TreeSet 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のOracleAS Web ServicesによるJavaコレクション・クラスのXML型へのマッピングに関する項およびOracle固有のXML型の追加情報に関する項を参照してください。 

java.util.Map 

java.util.Map

java.util.HashMap

java.util.TreeMap

java.util.Hashtable

java.util.Properties 

『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のOracleAS Web ServicesによるJavaコレクション・クラスのXML型へのマッピングに関する項およびOracle固有のXML型の追加情報に関する項を参照してください。 

MapまたはCollectionの項目として組み込まれていない値タイプ(ユーザー定義のMyBean型など)を使用する場合、valueTypeClassName引数の値を使用して、WSDLの生成時にこれらの型をWebServicesAssemblerツールに対して宣言する必要があります。

java -jar wsa.jar -genWsdl 
                  -valueTypeClassName hello.MyBean 
                  -valueTypeClassName hello.MyFoo...

このコマンドの説明:

これにより、生成されたWSDLがこれらの値タイプのスキーマ定義を含めることが可能になります。これによって、ランタイムが、対応するシリアライズ値を正しく生成できるようになります。Webサービスを(Javaクラス、EJB、データベース・リソースなどから)ボトムアップ方式でアセンブルするすべてのWebServicesAssemblerコマンドおよびAntタスクでは、valueTypeClassName引数がサポートされています。

関連資料

JAX-RPC値タイプの要件に準拠していない値タイプ・クラスや、デフォルトのJAX-RPCシリアライズ・メカニズムでは処理できない値タイプ・クラスの詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「Java値タイプのカスタム・シリアライズ」を参照してください。 

rpc-encoded書式に対する制限

OracleAS Web Servicesは、rpc-encodedメッセージ書式とdatabinding=falseの組合せはサポートしていません。

rpc-literalメッセージ書式

rpc-literalメッセージ書式は、WS-I Basic Profile 1.0および1.1に準拠しています。この書式は、rpcスタイルのメッセージ・ペイロード構造を使用しますが、プロシージャによって渡される型をliteral方式で記述する方法もサポートしています。この場合、literalとは、すべてのパラメータ型に対するスキーマはあるが、メッセージ・ボディ自体のペイロードに対するスキーマがないことを意味しています。

関連項目

相互運用性とメッセージ書式の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』の「相互運用可能なWebサービスの実現」を参照してください。  

利点:
短所:
rpc-literalメッセージ書式によるサンプル・リクエスト・メッセージ

例5-6は、rpc-literalメッセージ書式でコード化されたリクエスト・メッセージを示しています。SOAPボディ(env:Body)の下にあるXML要素部分(echoString)のタグ名は、対応するWSDL操作の名前と同じである必要があることに注意してください。操作要素の下の各XML要素部分(stringParam)は、パラメータに対応しており、simpleTypeのインスタンスまたはグローバル型定義である必要があります。グローバル型定義である場合は、WSDLのスキーマ内にある必要があります。

この例は、SOAP 1.1メッセージに準拠しています。SOAP 1.2メッセージに準拠させる場合は、xmlns:envの値をhttp://www.w3.org/2003/05/soap-envelopeに変更します。

例5-6    rpc-literalリクエスト・メッセージ

<env:Envelope
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ns0="http://ws.oracle.com/rpc-lit">
        <env:Body>
                <ns0:echoString>
                        <stringParam>Hello</stringParam>
                </ns0:echoString>
        </env:Body>
</env:Envelope>

Webサービスに対するメッセージ書式の選択方法

WebServicesAssemblerツールには、Webサービスで使用されるメッセージ書式を制御するための各引数が用意されています。これらの引数を使用すると、メッセージ書式としてrpcまたはdocument("wrapped"または"bare")、encodedまたはliteralを指定できます。

次のWebServicesAssemblerコマンドを使用すると、useおよびstyle引数を使用してWebサービスのメッセージ書式を指定できます。これらのコマンドの詳細は、第18章「WebServicesAssemblerの使用方法」を参照してください。

次の例では、assembleコマンドを使用して、Webサービスのサーバー・コンポーネントをアセンブルしています。styleおよびuse引数を使用して、メッセージ書式としてrpc-literalを使用するよう指定しています。

java -jar wsa.jar -assemble  
                  -appName $(app.name) 
                  -serviceName HelloServiceWSIF 
                  -uri $(app.name) 
                  -interfaceName oracle.demo.hello.HelloInterface 
                  -className oracle.demo.helllo.HelloImpl 
                  -input $(service.classes.dir) 
                  -output build 
                  -ear dist/$(app.name).ear 
                  -style rpc 
                  -use literal

このコマンドの説明:

サービス実装のメッセージ書式の変更

Javaサービス・エンドポイント実装は、rpc-encoded、rpc-literalまたはdocument-literal書式で公開できます。ただし、表5-1にリストされているattachmentデータ型をサービス・エンドポイント実装で使用する場合は、使用できるのはrpc-encodedのみです。attachment型のいずれも使用しない場合は、rpc-literalまたはdocument-literal書式を使用して相互運用性を向上させることができます。これらのいずれの書式を使用しても、JavaオブジェクトとXML間のマーシャリングでは同じパフォーマンスが実現されます。

メッセージ書式に関する推奨事項

この項では、Webサービスの設計時にメッセージ書式を選択する際の一般的なガイドラインのいくつかについて説明します。メッセージ書式の選択時には、サポートするクライアントの機能要件を考慮してください。想定されるクライアントの機能要件や推奨されるメッセージ書式については、表5-2を参照してください。

表5-2    クライアントの機能に応じた推奨メッセージ書式 
クライアントの機能  推奨メッセージ書式 

Axis 1.2クライアント 

rpc-encodedまたはdocument-literalメッセージ書式を使用します。 

BPELプロセス 

literalを使用したdocumentスタイルを使用します。 

Oracleリリース10.1データベースからのコールアウト 

JAX-RPCはすべての書式をサポートします。NULL値を表す必要がある場合は、rpc-literalデータベース・コールアウトを避けてもかまいません。 

Oracleリリース9.2データベースからのコールアウト 

コールアウトはsoap.jarに基づいています。rpc-encodedを使用します。 

グラフの公開とオブジェクト識別性の保持 

rpc-encodedを使用します。rpc-encodedが最も簡単な方式ですが、モデル(スキーマ)が適切に設計されている場合、document-literalでも実現できます。 

OmniPortlet 

rpc-encodedまたはdocument-literalを使用します。Omniportlet API(ウィザード)はrpc-literalをサポートしていません。 

Oracle XML Query Service(XQS)統合 

literalを使用したrpcまたはdocumentスタイルを使用します。Oracle XML Query ServiceはSOAPエンコードをサポートしていません。  

WS-Iへの準拠 

literalを使用したrpcまたはdocumentスタイルを使用します。 

XMLスキーマ統合 

WSDL操作のSOAPメッセージ部分を記述するために、XMLスキーマ定義を再利用することです。この統合は、literalを使用したrpcまたはdocumentスタイルを使用して実現できます。 

SOAPメッセージの操作

OracleAS Web Servicesは、プログラム的な方法とWebServicesAssemblerツールを使用してWebサービスをボトムアップおよびトップダウン方式でアセンブルする方法の両方でSOAP 1.1および1.2メッセージをサポートしています。

SOAP with Attachments API for Java(SAAJ)バージョン1.2は、SOAPメッセージをプログラム内から表現および操作するモデルとなるものです。標準のSAAJのAPIは、SOAP 1.1をサポートしています。SAAJの詳細は、次のWebアドレスを参照してください。

http://java.sun.com/webservices/saaj/index.jsp

OracleのSAAJ 1.2 API拡張機能(OraSAAJ)を使用すると、WebサービスがSOAP 1.2メッセージを操作できるようになります。

OraSAAJ APIの概要

OracleAS Web Servicesは、Javaオブジェクトとして添付ファイル付きSOAPメッセージを作成するための仕様であるSAAJ 1.2をサポートしています。ただし、SAAJ 1.2の標準APIがサポートしているのはSOAP 1.1メッセージのみです。このため、SOAP 1.2メッセージに対するプログラムにおけるサポートを提供できるように、OracleAS Web Servicesにはoracle.webservices.soapパッケージが含まれています。このパッケージに含まれるインタフェースを使用すると、SOAP 1.2メッセージ・オブジェクトを操作することや、SOAP 1.2メッセージ・オブジェクトに情報を追加することが可能になります。

このパッケージのクラスVersionedMessageFactoryおよびVersionedSOAPFactoryは、標準SAAJのクラスMessageFactoryおよびSOAPFactoryの拡張機能です。VersionedMessageFactoryおよびVersionedSOAPFactoryクラスのメソッドには、標準のSAAJのAPIの使用時にSOAPメッセージのバージョンを指定するための追加パラメータが含まれています。

表5-3    OraSAAJ APIのインタフェースおよびクラス 
インタフェース/クラス名  説明 

Body12インタフェース 

SOAP 1.2メッセージのBodyオブジェクトを表します。 

Fault12インタフェース 

SOAP 1.2のFaultCodeおよびFaultReason要素をSOAP 1.2のFault要素に追加するためのメソッドを提供します。  

FaultCode12インタフェース 

SOAP 1.2のFaultValueおよびFaultSubcode要素をSOAP 1.2のFaultCode要素に追加するためのメソッドを提供します。 

FaultReason12インタフェース 

SOAP 1.2のFaultText要素をSOAP 1.2のFaultReason要素に追加するためのメソッドを提供します。 

FaultSubcode12インタフェース 

このインタフェースは、FaultCode12インタフェースの拡張機能です。これは、コンパイラによって強制される強い型指定を行うためのマーカー・インタフェースです。 

FaultText12インタフェース 

テキスト・ノードのコンテンツおよびロケール情報をFaultText要素に追加するためのメソッドを提供します。 

FaultValue12インタフェース 

FaultValue12要素にフォルト・コードを設定するためのメソッドを提供します。 

OracleSOAPElementインタフェース 

java.xml.soap.SOAPElementインタフェースの拡張です。添付ファイル付きメッセージ用のデータ・ハンドラを使用するためのメソッドを提供します。 

SOAPVersionインタフェース 

プラットフォームで使用可能なSOAPのバージョンを表す各定数を表示します。 

VersionedMessageFactoryクラス 

SOAPメッセージを作成するためのメソッドを提供します。これらのメソッドは、標準のSAAJのクラスMessageFactoryの模倣ですが、これらのメソッドにはSOAPメッセージのバージョンを指定するための追加パラメータが含まれる点が異なります。あるメソッドは、標準のMIMEヘッダーを使用して空のメッセージを作成します。別のメソッドは、入力ストリームおよび指定されたMIMEヘッダーを基にメッセージを作成します。 

VersionedSOAPFactoryクラス 

SOAP要素を作成するためのメソッドを提供します。これらのメソッドは、標準のSAAJのクラスSOAPFactoryの模倣ですが、これらのメソッドにはSOAPメッセージのバージョンを指定するための追加パラメータが含まれる点が異なります。  

関連資料

oracle.webservices.soapパッケージのクラスとメソッドの詳細は、『Oracle Application Server Web Services Java API Reference』を参照してください。 

OraSAAJ APIを使用してSOAPメッセージを処理する方法

OraSAAJの拡張機能は、javax.xml.rpc.handler.Handlerから使用できます。SOAP 1.2 SAAJメッセージを操作するには、多くの場合、標準のjavax.xml.soap.*クラスが使用されます。ただし、SOAP 1.2に用意されている機能を使用する場合は、OraSAAJ APIを使用する必要があります。

例5-7は、標準のjavax.xml.soap.*クラスとOraSAAJクラスを一緒に使用する方法を示しています。このコード例では、SOAP 1.2メッセージを新規に作成しています。VersionedMessageFactoryメソッドは、javax.xml.soap.SoapMessageオブジェクトを戻します。これにより、メッセージに対してgetBodygetEnvelopeなどの標準のjavax.xml.soap.*メソッドを使用できるようになります。

addFaultメソッドは、SOAP 1.2フォルトをメッセージに追加します。SOAP 1.2フォルトを送信するには、OraSAAJ Fault12FaultCode12FaultValue12およびFaultReason12 APIを使用する必要があります。これは、SOAP 1.2フォルトにはSOAP 1.1フォルトより多くの情報が含まれているためです。

例5-7    SAAJおよびOraSAAJ APIの操作

public boolean handleResponse(MessageContext context) {
    ...
    // create a SOAP 1.2 message from scratch.
    // Note the use of VersionedMessageFactory to get a SOAPMessage
    // for a specific version of soap
    SOAPMessage message = 
((VersionedMessageFactory)MessageFactory.newInstance()).createVersionedMessage(oracle.w
ebservices.soap.SOAPVersion.SOAP_1_2);
    // Now standard APIs can be used.
    SOAPBody body = message.getSOAPPart().getEnvelope().getBody();
    // However, if you need to send a fault, you must
    // use Oracle specific APIs, because SOAP 1.2
    // faults contain more information than SOAP 1.1 faults.
    // Note the use of Fault12, FaultCode12, and FaultReason12
    SOAPFault fault = body.addFault();
      Fault12 soapFault = (Fault12) fault;
      FaultCode12 faultCode = soapFault.addCode();
      FaultValue12 faultValue = faultCode.addFaultValue();
      QNameAdapter faultCodeQName = new QNameAdapter("http://my.foo.com/",
                                                       "myFaultCode",
                                                       "foo");
      faultValue.setFaultCode(faultCodeQName);
      FaultReason12 faultReason = soapFault.addReason();
      faultReason.addFaultText().setValue("An unknown error occurred");
    ...
}

バイナリ・データを含む添付ファイル付きのメッセージの処理方法

oracle.webservicesパッケージで提供されるOracleSOAPElementインタフェースに含まれるメソッドを使用すると、添付ファイル付きのメッセージを処理できます。

関連項目

OracleSOAPElementインタフェースおよびそのメソッドを使用してバイナリ・データの添付ファイルを取得および設定する方法の詳細は、『Oracle Application Server Web Servicesアドバンスト開発者ガイド』のバイナリ・データを含む添付ファイルの処理に関する項を参照してください。 

SOAP要素へのXML要素の変換方法

oracle.webservicesパッケージには、XML要素(org.w3c.dom.Element)をSOAP要素(javax.xml.soap.SOAPElement)に変換するためにSOAPUtilクラスのtoSOAPElementメソッドが用意されています。SOAPElementdom.Elementを実装しているのであり、その逆ではないことに注意してください。

例5-8は、XML文書を作成し、SOAP要素に変換し、標準出力に出力するコード・サンプルを示しています。

例5-8    SOAP要素へのXML要素の変換

...
try {
   DOMParser parser = new DOMParser();
   parser.parse(new StringReader(
      "<Flds:CustomerGroup xmlns:Flds=\"http://foo.com/foo.xsd\">
      "<Flds:Customer>xyz</Flds:Customer>
      "</Flds:CustomerGroup>"));

   SOAPElement se = SOAPUtil.toSOAPElement(
      parser.getDocument().getDocumentElement());
   ((XMLElement)se).print(System.out);
} catch (Exception ex) {
   ex.printStackTrace();
}
...

Webサービスをボトムアップ方式でアセンブルするためのSOAP 1.2書式メッセージの使用方法

ボトムアップ方式でのWebサービスの生成においてSOAPバージョン1.2のメッセージをサポートするため、WebServicesAssemblerには、soapVersion引数が用意されています。使用可能な値は、1.11.2または1.1,1.2です。デフォルト値は1.1です。

1.1,1.2は、WebServicesAssemblerが2つのバインディングとともに2つのポートを作成することを意味します。1つのポートとバインディングがバージョン1.1をサポートし、もう1つのポートとバインディングがバージョン1.2をサポートします。各ポートは異なるURLにバインドする必要があります。つまり、同じURLアドレスを使用して両方のバージョンを同時にサポートすることはできません。

関連項目

WebServicesAssemblerのsoapVersion引数の詳細は、「soapVersion」を参照してください。 

Webサービスをトップダウン方式でアセンブルするためのSOAP 1.2書式メッセージの使用方法

トップダウン方式のWebサービス開発でSOAP 1.2メッセージをサポートするには、SOAP 1.2バインディングがあるWSDLを提供する必要があります。SOAP 1.2バインディングがあるWSDLには、SOAP 1.2に固有のURIセットが含まれます。これらのURIのリストについては、表5-4を参照してください。

表5-4    SOAP 1.2メッセージのURI 
URI  説明 

http://schemas.xmlsoap.org/wsdl/soap12 

WSDLのbinding要素になるSOAP 1.2バインディング要素の名前空間。 

http://www.w3.org/2003/05/soap-encoding 

SOAP 1.2メッセージ用に、含む側の要素のコンテンツのエンコード・ルールを示す。

詳細は、http://www.w3.org/TR/2003/REC-soap12-part2-20030624/に記載されているSOAP Version 1.2 Part 2 Recommendationを参照してください。 

http://www.w3.org/2003/05/soap/bindings/HTTP

および

http://schemas.xmlsoap.org/soap/http 

SOAP 1.2用のHTTPトランスポートが説明されている。これらのURIは両方ともOracleAS Web Servicesスタックによって受け入れられますが、schemas.xmlsoap.org URIの方がwww.w3.org URIよりも相互運用性があります。このため、Webサービスのボトムアップ方式でのアセンブリ用としてWSDLが生成される場合はschemas.xmlsoap.org URIが使用されます。  

例5-9は、SOAP 1.2メッセージをサポートするWSDLを示しています。SOAP 1.2をサポートするために必要なURIおよび要素は、太字フォントで示されています。

例5-9    SOAP 1.2バインディングがあるWSDLのサンプル

<?xml version="1.0" encoding="UTF-8"?>
<definitions
     name="Rpclitbottomup"
     targetNamespace="http://www.oracle.ws/rpcliteral"
     xmlns="http://schemas.xmlsoap.org/wsdl/"
     xmlns:tns="http://www.oracle.ws/rpcliteral"
     xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
     xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
     xmlns:tns0="http://www.oracle.ws/rpcliteral/schema"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    >
    <types>
        <schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.oracle.ws/rpcliteral/schema"
             elementFormDefault="qualified" 
xmlns:tns="http://www.oracle.ws/rpcliteral/schema"
             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <complexType name="HelloMessage">
                <sequence>
                    <element name="longValue" type="long"/>
                    <element name="age" type="int"/>
                    <element name="greeting" type="string" nillable="true"/>
                    <element name="name" type="string" nillable="true"/>
                    <element name="id" type="decimal" nillable="true"/>
                </sequence>
            </complexType>
        </schema>
    </types>
    <message name="HelloInterface_hello">
        <part name="msg" type="tns0:HelloMessage"/>
    </message>
    <message name="HelloInterface_helloResponse">
        <part name="result" type="tns0:HelloMessage"/>
    </message>
    <portType name="HelloInterface">
        <operation name="hello" parameterOrder="msg">
            <input message="tns:HelloInterface_hello"/>
            <output message="tns:HelloInterface_helloResponse"/>
        </operation>
    </portType>
    <binding name="HelloInterfacePortBinding" type="tns:HelloInterface">
        <soap12:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="hello">
            <soap12:operation soapAction="http://www.oracle.ws/rpcliteral/hello" 
soapActionRequired="false"/>
            <input>
                <soap12:body use="literal" namespace="http://www.oracle.ws/rpcliteral" 
parts="msg"/>
            </input>
            <output>
                <soap12:body use="literal" namespace="http://www.oracle.ws/rpcliteral" 
parts="result"/>
            </output>
        </operation>
    </binding>
    <service name="Rpclitbottomup">
        <port name="HelloInterfacePort" binding="tns:HelloInterfacePortBinding">
            <soap:address location="REPLACE_WITH_ACTUAL_URL"/>
        </port>
    </service>
</definitions>

制限事項

「OracleAS Web Servicesのメッセージ」を参照してください。

追加情報

詳細は、次を参照してください。


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引