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';
메시지 플로우는 또한 Content-Type 관리에 설명된 대로 MIME Content-Type이 올바르게 설정되어 있는지 확인해야 합니다. 그런 다음 메시지 데이터를 MIME 트리에 추가해야 합니다. 다음 ESQL은 이를 수행할 수 있는 방법의 예를 제공합니다. 각각의 경우 도메인 BLOB에 Data가 작성된다는 점에 유의하십시오.
  • 트리의 다른 부분에서 생성되는 비트스트림이 사용됩니다. 다음 예는 메시지 플로우가 수신한 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은 ContentType 등록 정보를 통한 최상위 레벨 Content-Type 설정을 포함하여 트리를 빌드하는 방법의 예입니다.
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 헤더가 올바르게 설정되어 있는지 확인하십시오. 브로커 Properties 서브트리에서 ContentType 값을 설정하여 확인하십시오. 다음 예는 간단한 컨텐츠가 있는 MIME 파트에 대해 설정하는 ContentType 값을 보여줍니다.
SET OutputRoot.Properties.ContentType = 'text/plain';
MIME 트리나 HTTP 트리에 직접 Content-Type 값을 설정하지 마십시오. 이로써, 값이 무시되거나 일관되지 않게 사용될 수 있습니다.
관련 개념
MIME 구문 분석기 및 도메인
메시지 플로우 개요
ESQL 개요
메시지 모델링
관련 태스크
메시지 본문 컨텐츠 가공
메시지 플로우 설계
메시지 플로우 컨텐츠 정의
ESQL 파일 관리
관련 참조
MIME 표준 헤더 필드
Compute 노드
Database 노드
Filter 노드
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac30000_