WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

MIME ドメインでのメッセージの操作

MIME メッセージは、特定のトランスポートによって受け取る必要はありません。 例えば、メッセージを HTTPInput ノードを使用して HTTP によって受け取ることも、 または MQInput ノードを使用して WebSphere® MQ によって受け取ることもできます。 MIME パーサーは、入力ノード・プロパティーでメッセージ・ドメインが MIME に設定されているか、WebSphere MQ を使用していて、MQRFH2 ヘッダーに MIME のメッセージ・ドメインがある場合に、メッセージを処理するために使用されます。

このトピックは、MIME ドメインに属し、MIME パーサーによって構文解析されるメッセージの処理方法を説明しています。 これらの情報は、メッセージ本体の内容の操作内の情報とあわせて参照してください。

メッセージがメッセージ・フロー内の他のノードに渡される前に、論理ツリーを ESQL を使用して取り扱うことができます。 メッセージ・フローは、ESQL を使用して MIME ドメイン・ツリーを作成することもできます。 MIME ドメイン・メッセージが出力ノードに到達すると、 論理ツリーからビット・ストリームを再作成するために MIME パーサーが呼び出されます。

以下の例は、MIME メッセージの操作方法を示しています。

新規 MIME ツリーの作成

メッセージ・フローは、しばしば MIME メッセージを受け取り、変更し、そして戻します。 この場合、入力メッセージが構文解析される際に作成された有効な MIME ツリーを使用して作業できます。 メッセージ・フローが XMLNS などの他のドメインから入力を受け取り、MIME メッセージを戻す場合、 有効な MIME ツリーを作成する必要があります。 以下の ESQL 例を Compute ノードで使用して、単一パートの MIME ツリー用にトップレベルの構造を作成できます。
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
メッセージ・フローでは、MIME Content-Type がContent-Type の管理で説明されているように適切に設定されたことを確認する必要もあります。 次にフローは、メッセージ・データを MIME ツリーに追加しなければなりません。 以下の ESQL 例は、これを行う方法を示しています。 それぞれの場合に、データ・エレメントがドメイン BLOB と共に作成されます。
  • ツリーの他の部分からのビット・ストリームが使用されます。 この例は、メッセージ・フローによって受け取られる XML メッセージから、 ビット・ストリームを作成する方法を示しています。 その後、フローは BLOB パーサーを起動して、データを Data エレメントの下に保管します。
     DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
     CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
  • この ESQL 例にあるように、ビット・ストリームを構文解析する代わりに、新規の構造を作成してそれにデータを添付します。
    DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
    CREATE LASTCHILD OF M.Data DOMAIN('BLOB') NAME 'BLOB';
    CREATE LASTCHILD OF M.Data.BLOB NAME 'BLOB' VALUE partData;

これらのアプローチはどちらも、同じツリー構造を作成します。 最初のアプローチは、BLOB パーサーで必要とされるツリー構造の明示的な知識がフロー内に組み込まれないので、より優れていると言えます。

より一般的に、Compute ノードは複数パーツ MIME 文書用にツリーを作成する必要があります。 以下の ESQL 例は、これを行う方法を示しています。 これには、トップレベルの Content-Type プロパティーを設定することも含まれます。
DECLARE part1Data BLOB ASBITSTREAM(InputRoot.XMLNS, InputProperties.Encoding, InputProperties.CodedCharSetId);

SET OutputRoot.Properties.ContentType = 'multipart/related; boundary=myBoundary';

CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Parts';
CREATE LASTCHILD OF M.Parts TYPE Name NAME 'Part'; 
DECLARE P1 REFERENCE TO M.Parts.Part[1];  
CREATE FIELD P1."Content-Type" TYPE NameValue VALUE 'text/plain';
CREATE FIELD P1."Content-Id"   TYPE NameValue VALUE 'part one'; 
CREATE LASTCHILD OF P1 TYPE Name NAME 'Data'; 
CREATE LASTCHILD OF P1.Data DOMAIN('BLOB') PARSE(part1Data);

CREATE LASTCHILD OF M.Parts TYPE Name NAME 'Part'; 
DECLARE P2 REFERENCE TO M.Parts.Part[2];  
CREATE FIELD P2."Content-Type" TYPE NameValue VALUE 'text/plain';
CREATE FIELD P2."Content-Id"   TYPE NameValue VALUE 'part two'; 
CREATE LASTCHILD OF P2 TYPE Name NAME 'Data'; 
CREATE LASTCHILD OF P2.Data DOMAIN('BLOB') PARSE(part2Data);

既存の MIME ツリーの変更

この ESQL の例は、新規の MIME パーツを既存の複数パーツ MIME メッセージに追加します。 メッセージが複数パーツではない場合、それは変更されません。
SET OutputRoot = InputRoot;

-- Check to see if the MIME message is multipart or not.
IF LOWER(InputProperties.ContentType) LIKE 'multipart/%'
THEN
  CREATE LASTCHILD OF OutputRoot.MIME.Parts NAME 'Part';

  DECLARE P REFERENCE TO OutputRoot.MIME.Parts.[<];
  CREATE FIELD P."Content-Type" TYPE NameValue VALUE 'text/xml';
  CREATE FIELD P."Content-ID"   TYPE NameValue VALUE 'new part';
  CREATE LASTCHILD OF P TYPE Name NAME 'Data';

  -- This is an artificial way of creating some BLOB data. 
  DECLARE newBlob BLOB '4f6e652074776f2074687265650d0a';
  CREATE LASTCHILD OF P.Data DOMAIN('BLOB') PARSE(newBlob);
END IF;
例えば、EmailInput ノードを介して MIME メッセージを受け取った場合に、メッセージの形式が分っているときは、そのメッセージを再解析したい場合があります。 以下に例を示します。
CREATE LASTCHILD OF OutputRoot.XMLNSC.emailData  DOMAIN('XMLNSC') 
PARSE(InputRoot.MIME.Data.BLOB.BLOB,InputProperties.Encoding,
InputProperties.CodedCharSetId);

Content-Type の管理

新規 MIME メッセージ・ツリーを作成するとき、または MIME 境界ストリングの値を変更するとき、ブローカー・プロパティー・サブツリーの ContentType 値を設定して、MIME Content-Type ヘッダーが正しく設定されていることを確認してください。 以下の例は、ContentType 値を簡単な内容の MIME パートに設定する方法を示しています。
SET OutputRoot.Properties.ContentType = 'text/plain';
Content-Type 値を MIME ツリーまたは HTTP ツリーに直接設定しないでください。値が無視されるか、整合性を欠いて使用されることになるためです。
MIME メッセージを受け取るときに、content-Type に基づいてメッセージの内容をフィルターしたり、ルーティングしたりすることができます。 以下の例は、メッセージに添付ファイルが含まれているかどうかに基づいて内容をフィルターするために、Route ノードで使用できる XPath 照会を示しています。
starts-with($Root/MIME/Content-Type,"multipart")
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:45:47


概念トピック概念トピック | バージョン 8.0.0.5 | ac30000_