MIME メッセージは、特定のトランスポートによって受け取る必要はありません。 例えば、メッセージを HTTPInput ノードを使用して HTTP によって受け取ることも、 または MQInput ノードを使用して WebSphere® MQ によって受け取ることもできます。 MIME パーサーは、入力ノード・プロパティーでメッセージ・ドメインが MIME に設定されているか、WebSphere MQ を使用していて、MQRFH2 ヘッダーに MIME のメッセージ・ドメインがある場合に、メッセージを処理するために使用されます。
このトピックは、MIME ドメインに属し、MIME パーサーによって構文解析されるメッセージの処理方法を説明しています。 これらの情報は、メッセージ本体の内容の操作内の情報とあわせて参照してください。
メッセージがメッセージ・フロー内の他のノードに渡される前に、論理ツリーを ESQL を使用して取り扱うことができます。 メッセージ・フローは、ESQL を使用して MIME ドメイン・ツリーを作成することもできます。 MIME ドメイン・メッセージが出力ノードに到達すると、 論理ツリーからビット・ストリームを再作成するために MIME パーサーが呼び出されます。
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
CREATE LASTCHILD OF M TYPE Name NAME 'Data';
DECLARE partData BLOB ASBITSTREAM(InputRoot.XMLNS);
CREATE LASTCHILD OF M.Data DOMAIN('BLOB') PARSE(partData);
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 パーサーで必要とされるツリー構造の明示的な知識がフロー内に組み込まれないので、より優れていると言えます。
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);
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;
CREATE LASTCHILD OF OutputRoot.XMLNSC.emailData DOMAIN('XMLNSC')
PARSE(InputRoot.MIME.Data.BLOB.BLOB,InputProperties.Encoding,
InputProperties.CodedCharSetId);
SET OutputRoot.Properties.ContentType = 'text/plain';
Content-Type 値を MIME ツリーまたは HTTP ツリーに直接設定しないでください。値が無視されるか、整合性を欠いて使用されることになるためです。starts-with($Root/MIME/Content-Type,"multipart")