例: WSIF を使用した添付ファイル付き SOAP メッセージの引き渡し

Web Services Invocation Framework (WSIF) SOAP プロバイダーを使用して、標準 SOAP メッセージ用の SOAP 処理規則を変更せずに MIME multipart/related メッセージ内の添付ファイルを渡すための情報およびサンプル・コードです。これには、SOAP 添付ファイル用の Web サービス記述言語 (WSDL) 拡張の書き込み方法、および型と型マッピングの処理方法が含まれます。

「W3C SOAP Messages with Attachments」の資料には、トランスポート用の multipart MIME 構造を使用して、SOAP メッセージとネイティブ・フォーマット (GIF または JPEG など) の 1 つ以上の添付ファイルを関連付けるための標準的な方法が記載されています。また、この資料には 「Multipart/Related」MIME メディア・タイプの具体的な使用方法、および MIME パッケージにバンドルされたエンティティーを参照するための URI 参 照の使用規則が定義されています。この中では、標準 SOAP メッセージ用の SOAP 処理 規則を変更せずに、SOAP 1.1 メッセージを MIME multipart/related メッセージに 含めて送信するための技法を概説しています。

WSIF では、SOAP over HTTP サービスに WSIF サービスをリンクするための、SOAP プロバイダーを使用した MIME メッセージ内の添付ファイルの引き渡しがサポートされます。添付ファイルは、 javax.activation.DataHandler オブジェクトです。WSDL の添付ファイルの記述 には、mime:multipartRelated、mime:part および mime:content の各タグが使用されます。

例: SOAP 添付ファイルの WSDL 拡張を作成する

以下の WSDL 例で、attch という 1 つの添付ファイルを使用した簡単な操作を示します。

<binding name="MyBinding" type="tns:abc" >
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  <operation name="MyOperation">
    <soap:operation soapAction=""/>
    <input>
      <mime:multipartRelated>
        <mime:part>
          <soap:body use="encoded" namespace="http://mynamespace"
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding"/>
        </mime:part>
        <mime:part>
          <mime:content part="attch" type="text/html"/>
        </mime:part>
      </mime:multipartRelated>
    </input>
  </operation>
</binding>
このタイプの WSDL 拡張については、以下のとおりです。
  • 操作 (この例では MyOperation) の入力メッセージには、 part 属性 (この例では attch) が必要です。MyOperation には、 添付ファイル以外の入力部分を含めることもできます。
  • バインディング入力には、 <soap:body> タグまたは <mime:multipartRelated> タグのいずれかがなくてはなりません (両方は必要ありません)。
  • MIME メッセージの場合、 <soap:body> タグは <mime:part> タグ内にあります。 バインディング入力には、<soap:body> タグを 含む <mime:part> タグが 1 つだけ必要で、このタグ には <mime:content> タグが含まれていてはなりません。これは、<soap:body> タグでは コンテンツ・タイプ text/xml が前提となっているためです。
  • MIME メッセージには複数の添付ファイルを含めることができ、 各添付ファイルは <mime:part> タグで記述されます。
  • <soap:body> タグを含まない <mime:part> タグは、 それぞれ、添付ファイル自体を記述する <mime:content> タグを 含みます。<mime:content> タグ内の type 属性は、 Web Services Invocation Framework (WSIF) によって検査または使用されることはありません。 この属性は、WSIF を使用するアプリケーションに対し添付ファイルの内容 を示すために提供されています。単一の <mime:part> タグ内に 複数の <mime:content> タグがある場合、バックエンド・サービスは、 その <mime:part> タグ内の <mime:content> タグのいずれかで指定された型の 単一添付ファイルがあると予想します。
  • <soap:body> タグ内の parts="..." 属性 (オプション) には、 メッセージ内のすべての SOAP パートと すべての MIME パートの名前が含まれていることが想定されます。

例: WSIF を使用した SOAP 添付ファイルの受け渡し

以下のコード・フラグメントを使用して、例: SOAP 添付ファイルの WSDL 拡張を作成するのサンプル WSDL で記述されているサービスを呼び出すことができます。

import javax.activation.DataHandler;
. . .
DataHandler dh = new DataHandler(new FileDataSource("myimage.jpg"));
WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
WSIFService service = factory.getService("my.wsdl",null,null,"http://mynamespace","abc");
WSIFOperation op = service.getPort().createOperation("MyOperation");
WSIFMessage in = op.createInputMessage();
in.setObjectPart("attch",dh);
op.executeInputOnlyOperation(in);

DeploymentDescriptor.xml ファイル内で関連付けられる型マッピングは、 ご使用の SOAP サーバーによって異なります。例えば、SOAP 2.3 で Tomcat を使用している場合、DeploymentDescriptor.xml ファイルには、 以下のような型マッピングが含まれます。

<isd:mappings>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:x="http://mynamespace"
 qname="x:datahandler"
 javaType="javax.activation.DataHandler"
 java2XMLClassName="org.apache.soap.encoding.soapenc.MimePartSerializer"
 xml2JavaClassName="org.apache.soap.encoding.soapenc.MimePartSerializer" />
</isd:mappings> 

この場合、バックエンド・サービスは、以下のシグニチャーに よって呼び出されます。

public void MyOperation(DataHandler dh);

スタブを使用して、添付ファイルを Web Services Invocation Framework (WSIF) に渡すこともできます。

DataHandler dh = new DataHandler(new FileDataSource("myimage.jpg"));
WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
WSIFService service = factory.getService("my.wsdl",null,null,"http://mynamespace","abc");
MyInterface stub = (MyInterface)service.getStub(MyInterface.class);
stub.MyOperation(dh);

オペレーションから添付ファイルを戻すこともできますが、戻りパラメーターとして戻すことができるのは 1 つの添付ファイルのみです。

SOAP 添付ファイル - 型および型マッピングの使用

デフォルトでは、添付ファイルは WSIF に DataHandler オブジェクトとして渡されます。メッセージの 一部である DataHandler オブジェクトを WSDL の <mime:part> タグにマップする場合、WSIF は自動的に WSDL 型の完全修飾名を DataHandler クラスにマップして、 その型マッピングを SOAP プロバイダーにセットアップします。

ユーザーによっては、WSDL で既に添付ファイル用のスキーマを定義済み (binary[] 型など) である場合があります。 明示的に mapType() メソッドを 実行する場合を除き、WSIF はこのマッピングを暗黙的に無視し、添付ファイルを DataHandler オブジェクトとして処理します。 WSIF により、SOAP プロバイダーは、 WSDL の <mime:content> タグに指定された type 属性ではなく、 DataHandler オブジェクトの型に基づいて MIME コンテンツ・タイプを設定することができます。

SOAP 添付ファイル - サポートされていないシナリオ

次のシナリオはサポートされていません。
  • DIME の使用。
  • javax.xml.transform.Source および javax.mail.internet.MimeMultipart への引き渡し。
  • mime:mimeXml WSDL タグの使用。
  • mime:multipartRelated タグの mime:part タグへのネスティング。
  • DataHandlerImage などを拡張する型の使用。
  • DataHandlerImage などを含む型の使用。
  • DataHandlersImages などの配列またはベクトルの使用。
  • 複数の入出力または出力の添付ファイル。
着信メッセージの MIME ヘッダーは、参照先添付ファイル用には 保存されません。発信メッセージには、WSIF によって作成される Content-Type、Content-Id、および Content-Transfer-Encoding 用の新規 MIME ヘッダーが含まれています。

トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwsf_attach
ファイル名:rwsf_attach.html