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

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

MIME メッセージは、特定のトランスポートによって受け取る必要はありません。 例えば、メッセージを HTTPInput ノードを使用して HTTP によって受け取ることも、 または MQInput ノードを使用して WebSphere MQ によって受け取ることもできます。 以下の条件のいずれかが当てはまる場合、メッセージの処理に MIME パーサーが使用されます。

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

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

新規 MIME ツリーの作成

メッセージ・フローは、しばしば MIME メッセージを受け取り、変更し、そして戻します。 この場合、入力メッセージが構文解析される際に作成された有効な MIME ツリーを使用して作業できます。 メッセージ・フローが XML などの他のドメインから入力を受け取り、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.XML);
     CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
  • ビット・ストリームを構文解析する代わりに、新規の構造を作成してそれにデータを添付します。 以下の ESQL は、これを行う方法を示しています。
    DECLARE partData BLOB ASBITSTREAM(InputRoot.XML);
    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 を ContentType プロパティーを介して設定することも含まれます。
DECLARE part1Data BLOB ASBITSTREAM(InputRoot.XML.part1);
DECLARE part2Data BLOB ASBITSTREAM(InputRoot.XML.part2);

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;

Content-Type の管理

MIME メッセージ・ツリーを作成するとき、 または MIME 境界ストリングの値を変更するとき、MIME Content-Type ヘッダーが正しく設定されていることを確認してください。 これは、ContentType 値をブローカー・プロパティー・サブツリーに設定して行います。 以下の例は、ContentType 値を簡単な内容の MIME パートに設定しています。
SET OutputRoot.Properties.ContentType = 'text/plain';
Content-Type 値を MIME ツリーまたは HTTP ツリーに直接設定しないでください。値が無視されたり、または整合性を欠いて使用される結果をもたらすことがあります。
関連概念
MIME パーサーおよびドメイン
メッセージ・フローの概要
ESQL の概要
メッセージのモデル化
関連タスク
メッセージ本体の内容の操作
メッセージ・フローの設計
メッセージ・フローの内容の定義
ESQL ファイルの管理
関連資料
MIME 標準ヘッダー・フィールド
Compute ノード
Database ノード
Filter ノード
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac30000_