메시지 사용 시의 문제점 해결

여기에 제공된 권고를 사용하여 메시지를 사용할 때 발생할 수 있는 공통 문제점을 해결하는 데 도움을 받으십시오.

태스크 정보

프로시저

큐에 삽입 기능을 사용할 때 통신 오류가 발행됨

프로시저

  • 시나리오: 큐에 메시지를 넣기 위해 인큐 또는 큐 해제 도구를 사용하지만 큐 관리자 이름에서 통신 오류가 발생했음을 나타내는 오류 메시지가 발행됩니다.
  • 설명: WebSphere® MQ 큐 관리자가 시작되지 않았습니다.
  • 솔루션: WebSphere MQ 큐 관리자를 재시작하십시오.

큐에 삽입 기능이 메시지의 변경사항을 반영하지 않음

프로시저

  • 시나리오: 메시지를 WebSphere MQ 큐에 삽입하기 위해 IBM® 통합 툴킷 메시지 엔큐 (enqueue) 기능을 사용 중입니다. 메시지를 업데이트했으며 메시지를 큐에 넣으려 하지만 변경사항이 적용된 것 같지 않습니다.
  • 솔루션:
    1. 큐에 삽입 파일을 닫은 후에 다시 여십시오.
    2. 큐에 넣을 메시지를 선택하십시오.
    3. 큐에 삽입 파일을 저장하고 닫으십시오.
    4. 큐에 메시지 넣기 아이콘 옆에 있는 메뉴를 선택하십시오.
    5. Put 메시지을 누르십시오.
    6. 메뉴에서 큐에 삽입 파일을 클릭하십시오.
    7. 완료를 클릭하십시오.

    이 조치는 업데이트된 메시지를 큐에 넣습니다.

큐에 삽입에 영향을 미치는 헤더 요소를 알 수 없음

프로시저

  • 시나리오: 인큐 편집기를 사용하는 경우, 메시지 헤더의 계정 토큰, 상관 ID, 그룹 ID및 메시지 ID가 동작에 영향을 주지 않습니다.
  • 설명: 이러한 필드는 올바르게 직렬화되지 않으므로 동작에 영향을 주지 않습니다.

큐에 삽입 메시지 파일이 삭제된 후에 여전히 나열됨

프로시저

  • 시나리오: 인큐 메시지 파일이 삭제된 후에도 여전히 메뉴에 나열됩니다.
  • 설명: 삭제된 큐 파일은 메뉴에서 제거되지 않습니다. 이 파일을 선택하는 경우 아무 것도 발생하지 않습니다.

XML 메시지의 ESQL 변환으로 예상치 못한 결과가 발생함

프로시저

  • 시나리오: 다음 내용과 유사한 XML 메시지를 작성했습니다.
    <?xml version ="1.0" standalone="no"?><!DOCTYPE doc
    [<!ELEMENT doc (#PCDATA)*>]><doc><I1>100</I1></doc>
    ESQL 변환을 적용합니다.
    SET OutputRoot.XMLNS.doc.I1 = 112233;
    이 변환은 XML 메시지를 생성합니다(직렬화 후에).
    <?xml version ="1.0" standalone="no"?><!DOCTYPE doc
    [<!ELEMENT doc (#PCDATA)*>]<I1>112233<I1>><doc><I1>100</I1></doc>
    I1 의 새 값이 내부에 삽입되었습니다.DOCTYPE, 예상한 대로 100의 값을 바꾸지 않았습니다.
  • 설명: 메시지의 XML에는 다음 두 가지가 포함됩니다.doc요소:
    • doctype요소
    • xmlElement메시지의 본문을 나타내는

    구문 분석기가 호출된 요소의 첫 번째 인스턴스를 찾았습니다.doc그리고 값이 112233인 하위 I1 를 작성했습니다.

  • 솔루션: 메시지 본문 요소 내의 요소 I1 에 새 값을 지정하려면 다음을 수행하십시오.doc, 명시적으로 두 번째doc요소는 다음과 같은 방식으로 요소를 구성한다.
    SET OutputRoot.XMLNS.(XML.tag)doc.I1 = 112233;

XML 메시지의 캐리지 리턴 문자가 손실됨

프로시저

  • 시나리오: 캐리지 리턴 또는 줄 바꾸기 문자가 포함된 입력 XML 메시지를 구문 분석하거나 XML 요소에 캐리지 리턴 줄 바꾸기 문자가 포함된 출력 XML 메시지를 작성합니다. 하지만 일부 또는 모든 캐리지 리턴 문자가 출력 메시지에 표시되지 않습니다.
  • 설명: 이 동작은 XML 스펙에서 설명하는 것과 같이 올바르며 XML, XMLNS 또는 XMLNSC 도메인에서 발생합니다.

    XML에서 기본 행 구분 기호 문자는 줄 바꾸기 문자입니다. 캐리지 리턴 문자는 XML 문서에서 승인되지만 XML 구문 분석기는 캐리지 리턴 줄 바꾸기 문자를 단일 행 피드 문자로 표준화합니다. 자세한 정보는 XML (Extensible Markup Language)의 최신 XML 스펙 (특히, 섹션 2.11 라인 처리 종료) 을 참조하십시오.

    CDATA 섹션에 데이터를 임베드해서는 이 문제점을 해결할 수 없습니다. XML 스펙에는 CDATA 섹션이 마크업으로 해석할 수 있는 문자가 포함된 텍스트 블록을 이스케이프하는 용도로만 사용된다고 명시되어 있습니다. 또한 CDATA 섹션은 구문 분석기로부터 보호되지 않습니다.

    다음을 사용할 수 없습니다.xml:space속성은 캐리지 리턴 줄 바꾸기 문자를 보존하기 위한 속성이며, XML 스팩은 다른 처리가 수행되기 전에 캐리지 리턴 및 줄 바꾸기 문자의 정규화를 수행한다고 명시하고 있다.

  • 솔루션: XML 호환 데이터는 XML에서 줄 바꾸기 행 피드 문자의 존재에 의존하지 않아야 합니다. 줄 바꾸기 문자는 라인 피드 문자이고 XML 준수 애플리케이션 또는 데이터는 구문 분석기가 캐리지 리턴 줄 바꾸기 문자를 정규화하는 것을 인식해야 합니다.

통합 노드가 XML 메시지를 구문 분석할 수 없음

프로시저

  • 시나리오: 대용량 XML 파일을 수신하여 .NET 웹 서비스에 전달할 SOAP 엔벨로프로 랩핑합니다. 통합 노드가 XML 메시지를 구문 분석할 수 없습니다.
  • 설명: 수신하는 메시지는 UTF-8 로 정의되지만 UTF-16 문자 (예: 파운드) 를 포함합니다. 이러한 문자가 있으면 구문 분석기에 문제점이 발생합니다. 통합 노드에 유효하지 않은 문자가 포함되어 있기 때문에 통합 노드가 XML 메시지를 구문 분석할 수 없습니다.
  • 솔루션: 기본 437대신 코딩된 문자 세트 ID (CCSID) 를 1208로 강제 실행합니다.

z/OS 에서 XSLTransform 노드를 사용할 때 예기치 않은 문자가 표시됩니다.

프로시저

  • 시나리오: z/OS®에서 XSLTransform 노드를 사용하는 경우 수신 메시지의 XML 파일에 있는 모든 대문자가 밑줄 문자로 변경됩니다.
  • 설명: 변환이 올바르게 작동하려면 XSLTransform 노드 입력 메시지가 ASCII로 와야 합니다. XSLTransform 노드는 EBCDIC 코드의 XML 또는 XSL 데이터에 대해 작동하지 않습니다. Java™ 는 EBCDIC 1047에서 변환을 가정합니다. IBM Integration Bus 는 CCSID가 500으로 설정되어 있기 때문에 EBCDIC 500으로 변환됩니다. EBCDIC 1047 및 EBCDIC 500은 유사합니다. 대문자만O,JZ서로 다르다. (J 및 Z도 올바르지 않게 변환됩니다.) 실제로 문자열이 ASCII로 되어 있기 때문에 변환 시 읽을 수 없는 문자열은 그대로 둡니다. 그러나, 이는 다음과 같이 변환된다.O를 포함하며, 이는 "0" 으로 표시된다.
  • 솔루션: 변환 없이 문자열 지정을 수행하도록 프로그램을 변경하거나 문자열이 ASCII ISO-8859-1 (CCSID 819) 로 지정되도록 지정하십시오.

오류 메시지 BIP5004가 XMLNS 구문 분석기에서 발행됩니다.

프로시저

  • 시나리오: 오류 메시지 BIP5004 이 (가) 발행되었습니다. 이는 XMLNS 구문 분석기가 입력 XML 메시지에 대한 문제점을 발견했음을 나타냅니다.
  • 설명: 이 메시지는 여러 가지 이유로 발행됩니다. 이 메시지가 발행될 때 보다 일반적으로 발생하는 시나리오 중 일부는 다음과 같습니다.
    • 입력 XML 메시지에 올바르지 않은 XML 문자를 지정했습니다.
    • 문자 데이터로 처리될 때 올바르지 않은 2진 데이터를 XML 메시지에 포함했습니다.
    • 메시지가 WebSphere MQ 메시지의 일부로 도착했으며 MQMD.CodedCharSetId가 XML 텍스트 비트 스트림을 올바르게 표시하지 않습니다.
    • 마크업으로 인식되는 문자를 사용했습니다.
  • 솔루션:
    • 송신 애플리케이션이 올바른 데이터만 송신하고 있는지 확인하십시오. 하지만 올바르지 않은 문자가 XML 메시지에 포함되지 않게 할 수 없으면, 이 문자를 BLOB 도메인에 표시하고 ESQL REPLACE 함수를 사용하여 올바르지 않은 문자를 바꾸거나 제거하십시오. 그런 다음 수정한 비트스트림을 필수 XML 구문 분석기에 지정할 수 있습니다.

      XML 스펙에 따라, CDATA 섹션은 마크업으로 해석될 문자를 보호하는 용도로만 사용할 수 있습니다. 올바르지 않은 문자나 2진 데이터를 XML 구문 분석기로부터 보호하는 데에는 사용할 수 없습니다.

    • 입력 XML 메시지에 2진 데이터가 포함된 경우 이 데이터를 기본 인코딩된 2진 인코딩 데이터로 표시하기 위해 송신 애플리케이션이 변경되는지 확인하십시오. 애플리케이션을 변경할 수 없으면 메시지를 BLOB 도메인에 표시하고, 비트스트림이 필수 XML 구문 분석기에 지정되기 전에 2진 데이터를 추출하고 대체하십시오.
    • 수신 XML 메시지가 올바른 MQMD.CodedCharSetId로 표시되는지 확인하십시오.

오류 메시지 BIP5378이 MRM 구문 분석기에서 발행됩니다.

프로시저

  • 시나리오: 오류 메시지 BIP5378 이 (가) 발행되었으며, 이는 MRM 메시지에서 필수 반복 요소가 누락된 문제점을 보고합니다.
  • 설명: 이 메시지는 필수 반복 요소가 메시지에 없음을 표시합니다.
    이전 릴리스에서는 이 조건이 오류 메시지 BIP5374를 통해 보고되었습니다. 현재는 필수 반복 요소가 메시지에 존재하지만 인스턴스 수가 올바르지 않을 때에만 이 오류 메시지가 보고합니다.

    프로그래밍한 자동화된 오류 검사 루틴이 있으면 이 루틴을 검토하고 적절한 경우 변경하십시오.

  • 솔루션:
    메시지 정의를 검토하여 요소가 필수적이고 반복적이어야 하는지 확인하십시오. 오류 메시지는 누락된 요소의 예상 위치 이전 및 이후에 발생하는 요소를 알려줍니다. 정의가 올바르면 송신 애플리케이션이 메시지를 제대로 작성하지 않은 것이므로 이를 수정해야 합니다.

오류 메시지 BIP5005 은 (는) 계산 노드에서 발행됩니다.

프로시저

  • 시나리오: 단순 XML 메시지를 단순 메시지 플로우로 보냅니다. 메시지는 다음과 같습니다.
    <doc><I1>100</I1></doc>
    메시지 플로우의 계산 노드에는 다음 ESQL이 포함됩니다.
    SET OutputRoot.XMLNS.abc = InputBody;
    다음 출력 메시지가 작성될 것으로 예상합니다.
    <abc><doc><I1>100</I1></doc></abc>

    계산 노드는 BIP5005 오류 메시지를 생성하고 ESQL을 구현하지 않습니다.

  • 설명: 한 유형의 요소를 지정합니다 (root) 다른 유형의 요소에 대해xmlElement). 구문 분석기는 사용자를 위해 이 암시적 캐스트를 수행하지 않습니다.
  • 솔루션: 다음 두 캐스트 중 하나를 사용하여 원하는 결과를 얻기 위해 ESQL에서 직접 캐스트를 수행할 수 있습니다.
    SET OutputRoot.XMLNS.(XML.Element)abc = InputBody;
    
    또는:
    SET OutputRoot.XMLNS.(XML.tag)abc = InputBody;

메시지가 시간 제어 노드의 장애 터미널로 전달됩니다.

프로시저

  • 시나리오: 시간 제어 노드가 올바르지 않거나 손상되었거나 누락된 제한시간 정보가 있는 메시지를 수신합니다. 메시지가 시간 제어 노드의 장애 터미널로 전달되고 예외 목록이 생성됩니다.
  • 설명: 다음 오류 조건은 장애 터미널로 전파할 수 있습니다.
    • 제한시간 요청에 조치 또는 ID가 없습니다.
    • SET 요청에는 이 시간 제어 노드에 대한 기존의 저장된 SET 요청과 일치하는 ID (고유 식별자 특성으로 식별됨) 와 원래 요청의 AllowOverwrite가 FALSE로 설정되어 있습니다.
    • CANCEL 요청에 이 시간 제어 노드에 대한 기존의 저장된 SET 요청과 일치하지 않는 ID (고유 ID 특성으로 식별됨) 가 있습니다.
    • SET 요청의 수가 0이거나 -1 미만입니다.
    • StartDate 또는 StartTime이 올바른 형식(또는 알려진 키워드 중 하나)이 아닙니다.
    • 계산된 제한시간이 지났습니다.
    • 간격이 0 미만이거나 수가 -1인 0입니다.
  • 솔루션: 여기에 나열된 오류 조건 중 하나 이상을 확인하여 정정하십시오.

메시지 처리가 TimeoutNotification 노드 내에서 실패함

프로시저

  • 시나리오: 메시지는 TimeoutNotification 노드의 실패 또는 Catch 터미널로 전파됩니다.
  • 설명: 제한시간을 처리하면 TimeoutNotification 노드에서 오류가 생성되고 예외 목록이 생성되고 메시지가 실패 터미널로 전달됩니다. 이 조치는 사용 중인 경우 동일한 트랜잭션 하에서 수행됩니다. failure 터미널이 연결되어 있지 않으면 전파가 발생하지 않습니다.

    성공적인 전파 후에 TimeoutNotification 노드의 다운스트림에 오류가 발생하는 경우 (아웃 또는 실패 터미널로) 메시지가 Catch 터미널 (동일한 트랜잭션 아래에 있음) 로 전달됩니다. 포착 터미널이 연결되어 있지 않거나 포착 플로우에 따른 전파에 실패하는 경우에는 제한시간 처리가 롤백됩니다.

  • 솔루션: TimeoutNotification 노드의 실패 및 캐치 터미널이 올바르게 연결되었는지 확인하십시오.

MRM CWF 메시지가 Failure 터미널로 전파됨

프로시저

  • 시나리오: MRM CWF 메시지가 실패 터미널로 전달되고 오류 메시지 BIP5285, BIP5125BIP5181 또는 메시지 BIP5285, BIP5125BIP5288를 생성합니다.
  • 설명: 이러한 오류는 처리되는 메시지 길이와 메시지 모델에 정의된 메시지의 길이 사이의 불일치를 보고합니다.
  • 솔루션: CWF 계층에 정의된 메시지의 길이가 정확한지 확인하십시오. 정의를 검사하고 수정하십시오.

XML 속성에 대한 문제점

태스크 정보

XML 속성이 예상되는 위치에 XML 태그가 기록되며, 반대의 경우도 마찬가지입니다.

프로시저

  • 설명: MRM 도메인의 XML 도메인 및 XML 와이어 형식에는 고유한 XML 속성 표시가 있습니다.
    • XML 도메인은 구문 분석할 모델이 없기 때문에 메시지 트리의 XML.Attribute 필드 유형 설정에 의존합니다.
    • MRM 도메인의 XML Wire 형식의 경우 메시지 모델은 요소가 속성 또는 태그인지 여부를 표시하므로, 필드가 속성 또는 태그인지 여부를 메시지 트리에 반영할 필요가 없습니다.

    따라서 필드가 XMLNS 또는 MRM 도메인에서 복사되면 필드가 속성이라는 사실이 손실됩니다. 이 손실은 필드가 서로 간에 또는 환경 트리와 같은 또 다른 메시지 트리로 복사되는 경우에 발생합니다.

    이 문제점은 일반적으로 다음 상황에서 나타납니다.

  • 시나리오 1: MRM 도메인에 XML 메시지를 작성하고 있으며 XML 속성 대신 XML 태그가 작성되고 있습니다.
  • 용액 1: 메시지 트리에 메시지 모델과 동일한 구조 및 시퀀스가 있는지 확인하십시오. 메시지 트리가 메시지 모델과 일치하지 않을 경우 필드가 자체 정의로 기록되고, 결과적으로 XML 렌더링 특성이 사용되지 않습니다.
    • 메시지 유효성 검증을 켜십시오. 유효성 검증은 메시지 트리와 메시지 정의가 일치하지 않음을 표시합니다.
    • 또는 메시지 플로우의 사용자 디버그 추적을 이용하십시오. BIP5493W 메시지는 자체 정의로 기록되고 있는 필드를 표시합니다. 이 정보를 사용하여 메시지 트리가 모델에 일치하는지 확인하십시오. 불일치를 수정하면 속성이 제대로 기록됩니다.
  • 시나리오 2: MRM 메시지가 XMLNS 도메인으로 복사되었으며 이제 XML 속성이 태그로 작성됩니다.
  • 용액 2: 다음 조치 중 하나를 수행하십시오.
    • 예를 들어, ESQL ASBITSTREAM 함수를 사용하여 MRM 도메인의 XML 메시지를 직렬화한 후 ESQL CREATE PARSE 절을 사용하여 필수 XML 도메인으로 메시지를 다시 구문 분석하십시오.
    • MRM 도메인과 XMLNS 사이에서 필드를 복사할 때 속성 필드를 개별적으로 복사하고 XML.Attribute을 대상 XML 필드에 분명히 지정하십시오.
  • 시나리오 3: XML 메시지가 환경과 같은 다른 메시지 트리로 복사되었습니다. 메시지가 XML 메시지 트리로 다시 복사되면 XML 속성이 이제 XML 태그로 표시됩니다.
  • 용액 3: 예를 들어 ASBITSTREAM ESQL 함수를 사용하여 XML 메시지를 직렬화한 다음, ESQL CREATE PARSE절을 사용하여 XML 메시지를 필요한 대상 메시지 트리로 재분석합니다. 예제는 CREATE문 를 참조하십시오.
  • 시나리오 4: 비XML 메시지 트리의 일부가 분리되어 XML 트리에 첨부되었으며 XML 태그는 이제 XML 속성으로 작성됩니다.
  • 용액 4: 다른 구문 분석기가 소유하는 메시지 트리 부분을 분리하고 첨부하지 마십시오. 대신에 트리 사본을 사용하십시오.
  • 시나리오 5: XML 태그가 XML 속성에 복사되고 XML 속성이 출력 메시지에 기록되지 않습니다.
  • 용액 5: 소스 XML 태그를 참조하는 경우, ESQL FIELDVALUE 함수를 사용하여 특정 필드 값을 대상 XML 속성 필드에 복사하십시오.

MRM XML 메시지가 예상치 못한 작동을 보임

프로시저

  • 시나리오: 메시지 플로우가 MRM에서 모델링한 메시지를 처리합니다. 메시지 트리가 예상한 대로 작성되지 않았으며 출력 XML 메시지에 예상 컨텐츠가 없거나 메시지 컨텐츠의 유효성이 검증되지 않았습니다. 오류 메시지가 발행되지 않았습니다.
  • 설명: 두 가지 이유로 인해 이 문제점이 발생할 수 있습니다.
    • 설명 1: 메시지 세트의 XML 물리적 형식 설정에 루트 태그 이름이라는 특성이 포함되어 있습니다. 이 특성은 제품의 이전 릴리스와 호환 가능성을 유지하기 위해 기본값이 MRM으로 설정됩니다. 이 필드의 컨텐츠를 삭제하지 않은 경우에는 MRM XMLNS 구문 분석기가 모든 XML 메시지의 루트 태그를 MRM으로 예상합니다.

      해결책 1: 이 필드를 지우거나 모든 XML 메시지에 사용되는 루트 태그로 설정하십시오. 이 필드에 값을 제공하면 모든 메시지 정의에서 루트 태그를 모델화할 필요가 없습니다.

    • 설명 2: 역호환성을 유지하기 위해 통합 노드는 형식 XML을 인식하고 특정 기본값이 있는 XMLNS 구문 분석기를 호출합니다. 이 메시지의 XML 물리적 계층을 XML 이름으로 작성한 경우에는 통합 노드가 사용자의 정의를 사용합니다. 그러나 XML 물리적 계층을 이 이름으로 작성하지 않았지만 XMLNS를 형식으로 지정했으면, 입력 노드 또는 MQRFH2 헤더에서(입력 비트스트림이 메시지 트리에 구문 분석될 때) 통합 노드가 지정된 값을 승인하고 구문 분석기에 기본값을 전달해서 메시지 트리를 작성합니다.

      마찬가지로, 계산 노드의 출력 메시지에 대한 특성 폴더에서 XML을 설정하는 경우 이 값은 메시지 트리에서 메시지 비트 스트림을 작성할 때 (일반적으로 출력 노드에서) 구문 분석기로 전달됩니다.

      구문 분석기에 이 기본값을 사용하면 메시지 트리나 출력 메시지 중 하나의 컨텐츠, 구조 또는 둘 모두가 달라질 수 있습니다. 다음 정보가 기록되어 있을 수 있는 사용자 추적 로그에서 통합 노드가 수행한 조치에 대한 추가 정보를 찾을 수 있습니다.
      XMLWorker::initializeParse file:C:\s000\src\cpi\pwf\xml\xmlworker.cpp 
      line:126 message:5409.BIPmsgs   
      No dictionary present have you specified Wire Format 'XML' in error? , 
      UserTrace   BIP5409E: XML Worker: Wire Format 'XML' specified.                                      
                            Default MRM XML settings are being used because wire format 
                            identifier 'XML' was specified and not found. 
                            This can be due to an incorrect setting of the wire format 
                            identifier in a message. 

      해결책 2: 정의한 형식의 ID를 올바르지 않게 입력한 경우 코드를 수정하고 다시 시도하십시오. 기본 조치가 수행되지 않게 하려면 필요한 결과를 산출하는 물리적 계층을 정의하십시오.

두 속성의 이름이 동일해서 MRM 구문 분석기가 메시지를 구문 분석하는 데 실패함

프로시저

  • 시나리오: 다른 네임스페이스에 있는 두 개의 속성은 동일한 이름을 가집니다. 오류 메시지 BIP5117이 발행됩니다.
  • 설명: MRM 구문 분석기가 메시지를 구문 분석하는 데 실패했습니다.
  • 솔루션: 동일하지 않도록 속성 이름을 수정하십시오. 이 문제점은 구문 분석기에 대한 알려진 제한사항입니다.

메시지에 EBCDIC 줄 바꾸기 문자가 포함되어 있을 때 문제점이 발생함

프로시저

  • 시나리오: 비트 스트림 입력 메시지가 EBCDIC줄 바꾸기 (NL) 문자를 포함하는 경우, 메시지 플로우가 대상 CCSID를 ASCII CCSID로 변경하면 문제점이 발생할 수 있습니다. 예를 들어, CCSID 1047 ( z/OS Open Edition에 사용되는 EBCDIC) 에서 CCSID 437 (US PC ASCII) 으로 변환하는 동안 NL 문자는 16진 '15' 에서 '7F' 16진으로 변환됩니다. 이는 정의되지 않은 문자입니다. ASCII 코드 페이지에 줄 바꾸기 문자에 대한 해당 코드 포인트가 없기 때문에 오류가 발생합니다.
  • 솔루션: 다음 경우에 문제점을 해결할 수 있습니다.
    • 큐 관리자가 ASCII 코드 세트를 사용하는 시스템에서 다음을 수행하여 수신 메시지에 EBCDIC NL 문자가 포함되어 있지 않은지 확인하십시오.
      • WebSphere MQ 이 입력 노드에서 변환을 수행하도록 지정
      • NL을 줄 바꾸기(LF)로 변환하도록 큐 관리자 속성을 설정해서
    • 입력 비트 스트림이 문자 데이터인 경우, 계산 노드에 있는 MRM 태그/디리미트 메시지 세트를 사용하여 NL 문자를 필수 출력으로 대체할 수 있습니다.

메시지를 구문 분석하는 동안 MIME 구문 분석기가 런타임 오류를 생성함

프로시저

  • 시나리오: MIME 메시지는 메시지 플로우에 의해 수신되며 메시지가 구문 분석될 때 런타임 오류를 생성합니다.
  • 설명: 다음 오류로 인해 MIME 구문 분석기가 메시지를 거부할 수 있습니다.
    • MIME 헤더가 제대로 형식화되지 않았습니다.
    • 최상위 레벨 MIME 헤더 블록 또는 중첩된 멀티파트 부분의 MIME 헤더 블록에 올바른 Content-Type 헤더가 없습니다.
    • 최상위 레벨 컨텐츠 유형에는 다음과 같은 매체 유형이 있습니다.message.
    • 최상위 레벨 컨텐츠 유형에는 다음과 같은 매체 유형이 있습니다.multipart및 경계 정의를 갖지 않는다.
    • MIME 헤더 블록이 빈 줄을 통해 제대로 종료되지 않았습니다.
    • 구성 MIME 부분이 경계 행을 통해 제대로 구분되지 않았습니다.
    • MIME 부분의 컨텐츠에 경계 매개변수 값이 발생합니다.
  • 솔루션: 여기에 나열된 하나 이상의 오류 조건에 대한 MIME 메시지를 확인하고 이를 정정하십시오.

논리 메시지 트리에서 MIME 메시지를 쓸 때 런타임 오류가 발행됨

프로시저

  • 시나리오: MIME 논리 메시지 트리를 비트 스트림으로 작성하고 구문 분석기가 런타임 오류를 생성합니다.
  • 설명: 다음 오류로 인해 MIME 구문 분석기가 논리 메시지 트리를 거부할 수 있습니다.
    • 트리의 루트가 MIME이 아닙니다.
    • MIME의 마지막 하위가 Parts 또는 Data가 아닙니다.
    • Parts 요소에는 값 전용 요소가 있으며, 이 요소가 Parts의 첫 번째 또는 마지막 하위가 아닙니다.
    • Parts 요소에 값 전용 요소 또는 Parts 하위가 아닌 하위가 있습니다.
    • Parts 요소에 Part 하위가 없습니다.
    • Data 요소의 마지막 하위가 BLOB가 아닙니다.
  • 솔루션: 여기에 나열된 오류 조건 중 하나 이상에 대해 MIME 논리 메시지 트리를 확인하고 정정하십시오.

출력 메시지에 비어 있는 메시지 본문이 있음

프로시저

  • 시나리오: 예기치 않게 빈 메시지 본문이 발생했거나 ASBITSTREAM 함수가 길이가 0인 BLOB을 생성했습니다.
  • 설명: 이 오류는 다음과 같은 이유로 발생할 수 있습니다.
    • 사용자 정의 노드에 메시지 트리 폴더를 작성했지만 소유한 구문 분석기와 이 폴더를 연관시키지 않았습니다. 다음과 유사하거나 동등한 코드를 사용하여 표준 요소를 작성한 경우에는 소유한 구문 분석기가 메시지 트리와 연관되지 않습니다.
      MbElement createElementAfter(int)
      MbElement createElementAfter(int, String, Object)
      MbElement createElementAsFirstChild(int)
      MbElement createElementAsFirstChild(int, String, Object)
      MbElement createElementAsLastChild(int)
      MbElement createElementAsLastChild(int, String, Object)
      MbElement createElementBefore(int)
      MbElement createElementBefore(int, String, Object)
      
      
    • ESQL을 사용하여 소유하는 구문 분석기를 설정하지 않은 채로, ESQL CREATE를 통해 메시지 트리 폴더를 작성했습니다. 다음과 유사하거나 동등한 코드를 사용했을 수 있습니다.
      CALL CopyMessageHeaders();
         DECLARE outRef REFERENCE TO OutputRoot;
         CREATE LASTCHILD OF outRef AS outRef NAME 'BLOB';
         CREATE LASTCHILD OF outRef NAME 'BLOB' VALUE X'01';
      또는outRef참조 변수가 유사한 CREATE문을 포함하는 ESQL 함수 또는 프로시저에 전달되었다. CREATE문에 DOMAIN 절을 사용하여 소유하는 구문 분석기를 지정하지 않았습니다.
    • MRM 메시지 트리가 구성된 후 서브폴더 또는 필드를 지정해서 구문 분석기 모드 옵션이 RootBitStream으로 설정된 ASBITSTREAM 함수에 트리의 일부분만 전달되었습니다. 이 조합은 올바르지 않으며 결과적으로 BLOB 길이가 0이 됩니다.
    • 메시지 트리 또는 메시지 트리의 부분을 폴더에 복사했으며 소유한 구문 분석기 연관이 유지보수되지 않습니다.
  • 솔루션: 빈 메시지 본문 또는 길이가 0인 BLOB의 이유에 따라 다음을 확인하십시오.
    • 사용자 정의 노드에 메시지 트리 폴더를 작성할 때 소유한 구문 분석기를 폴더와 연관시키십시오. 다음과 유사하거나 동등한 코드를 사용하십시오.
      createElementAfter(String parserName)
         createElementAsFirstChild(String parserName)
         createElementAsLastChild(String parserName)
         createElementBefore(String parserName)
      
    • ESQL CREATE를 사용하여 메시지 트리 폴더를 작성할 때 DOMAIN 절을 사용하여 소유한 구문 분석기를 메시지 트리와 연관시키십시오. 예를 들어, 다음과 같습니다.
      CALL CopyMessageHeaders();
         DECLARE outRef REFERENCE TO OutputRoot;
         CREATE LASTCHILD OF outRef AS outRef DOMAIN 'BLOB' NAME 'BLOB';
         CREATE LASTCHILD OF outRef NAME 'BLOB' VALUE X'01';
      
      이 코드는 BLOB 구문 분석기가 연관되어 있는 BLOB 폴더를 작성합니다.
    • 메시지 트리 또는 메시지 트리의 부분을 복사할 때 메시지를 직렬화한 후 적절한 메시지 트리로 다시 구문 분석해서, 소유한 구문 분석기 연관이 유지보수되도록 하십시오. 예 시나리오는 필드를 작성한 경우입니다.
      SET Environment.Variables.myMsg = InputRoot.XMLNS;
      
      이제 필드를 ASBITSTREAM 함수에 전달해야 합니다. 다음과 유사하거나 동등한 ESQL을 사용하지 않을 경우
      DECLARE xmlMsgBlob BLOB
                ASBITSTREAM(InputRoot.XMLNS, InputRoot.MQMD.Encoding, InputRoot.MQMD.CodedCharSetId);
        CREATE LASTCHILD OF Environment.Variables.myMsg DOMAIN('XMLNS')
               PARSE(xmlMsgBlob,
                     InputRoot.MQMD.Encoding,
                     InputRoot.MQMD.CodedCharSetId);
      결과는 0 길이 비트스트림입니다.

오류 메시지 BIP5005, BIP5016 또는 BIP5017에 표시된 올바르지 않은 메시지 본문이 출력 메시지에 있음

프로시저

  • 시나리오: 다중 루트 메시지 본문 또는 루트가 없는 메시지가 예기치 않게 발생했습니다.
  • 설명: 이 오류는 루트가 여러 개이거나 루트가 없는 XML 메시지 트리 폴더를 작성했을 때 발생할 수 있습니다.
    • 사용자 정의 노드를 사용하여
    • MQGet 노드 사용
    • ESQL을 사용하여
  • 솔루션: 최종 출력 메시지 트리에는 하나의 XML 루트 노드만 있는지 확인하십시오.

오류 메시지 BIP5651WebSphere Application Server 클라이언트에서 첨부 메시지가 있는 SOAP 메시지를 수신할 때 실행됩니다.

프로시저

  • 시나리오: WebSphere Application Server 클라이언트가 JMS를 통해 SOAP with Attachments 메시지를 통합 노드로 전송하는 경우 유효한 Content-Type 헤더가 없음을 알리는 오류 메시지 BIP5651 이 (가) 발행됩니다.
  • 설명: WebSphere Application Server 클라이언트가 SOAP with Attachments 메시지를 JMS를 통해 통합 노드로 전송하면 MIME 메시지 본문이 아닌 MQRFH2 헤더에 MIME Content-Type값이 표시됩니다.
  • 솔루션: 이 문제점을 해결하려면 메시지를 구문 분석하기 전에 MQRFH2 헤더에서 메시지를 MIME 헤더로 시작하기 위해 Content-Type값을 복사해야 합니다. 다음 ESQL은 WebSphere Application Server 메시지의 처음에 Content-Type값을 추가한 후 결과에 대한 MIME 구문 분석기를 호출합니다.
    create procedure parseWAS_JMS(IN InputMessage reference,IN OutputMessage reference)
    /***********************************************************************
    * convert a WAS/JMS message to the correct format for the MIME parser 
    ***********************************************************************/
    begin
      -- get the data as a BLOB
      declare body BLOB InputMessage.BLOB.BLOB;
    
      -- get the Content-Type value from the RFH2 header. Content-Type is the only
      -- header which is critical for the MIME parser, but the same approach can be
      -- used for any MIME headers which have been stored under the RFH2 header.
      declare contentType char InputMessage.MQRFH2.usr.contentType;
      
      -- add the contentType to the bit stream as part of an RFC822 header block
      set body = cast(('Content-Type: '||contentType) as blob ccsid 819)||x'0d0a0d0a'||body;
    
      -- invoke MIME parser on the modified bit stream
      CREATE LASTCHILD OF OutputMessage DOMAIN('MIME') PARSE(body);
    end;
    메시지 플로우 는 BLOB 도메인의 JMS 메시지를 사용하고 여기에 표시된 프로시저를 계산 노드에서 호출할 수 있습니다. 계산 노드에서 다음 ESQL을 사용하여 프로시저를 호출할 수 있습니다.
     CALL CopyMessageHeaders();                 -- standard procedure to copy headers
     CALL parseWAS_JMS(InputRoot, OutputRoot);  -- parse the ‘body' as MIME
    

첨부 파일이 있는 SOAP 메시지를 수신할 때 WebSphere Application Server 가 오류를 생성합니다.

프로시저

  • 시나리오: JMS를 사용하여 SOAP with Attachments 메시지를 WebSphere Application Server 클라이언트로 전송할 때, 비트 스트림에 예기치 않은 문자가 포함되어 있다는 오류가 생성됩니다.
  • 솔루션: 통합 노드가 SOAP with Attachments 메시지를 JMS를 통해 WebSphere Application Server 로 송신하는 경우 MIME Content-Type값은 메시지 본문이 아닌 MQRFH2 헤더에 나타나야 합니다. 다음 프로시저는 메시지 비트스트림 앞에서 MIME 스타일 헤더를 제거하고 Content-Type 값을 MQRFH2 헤더에 추가합니다. 제공된 경계 값으로 멀티파트 MIME 컨텐츠의 시작 부분을 찾을 수 있습니다.
    create procedure writeWAS_JMS(IN OutputTree reference,IN boundary char)
    /***************************************************************************
    * Serialise a MIME tree as normal, but then strip off any initial headers
    * and save the Content-Type value in the RFH2 header as expected by WAS/JMS.
    * Note: boundary - must be supplied with the leading hyphen pair
    ***************************************************************************/
    begin
      -- convert MIME subtree to BLOB
      declare body BLOB asbitstream(OutputTree.MIME);
    
      -- locate first occurrence of boundary and discard any data before this
      declare firstBoundary integer;
      set firstBoundary = position (cast(boundary as blob ccsid 819) in body);
      set body = substring(body from firstBoundary);
    
      -- save the MIME Content-Type value in the RFH2 header. Any other MIME
      -- headers which need to be preserved in the RFH2 header can be handled
      -- in the same way
      set OutputTree.MQRFH2.usr."contentType" = OutputTree.MIME."Content-Type";
    
      -- clear the MIME tree and create a new BLOB child for the modified body
      set OutputTree.MIME = null; 
      CREATE LASTCHILD OF OutputTree DOMAIN('BLOB')PARSE(body);
    end
    이 프로시저를 호출하기 전에 메시지 플로우 는 경계의 값을 얻을 수 있어야 합니다. 이 값은 Content-type 헤더 내에서만 사용할 수 있습니다. 다음 프로시저를 사용하여 경계 값을 추출할 수 있습니다.
    create procedure getBoundary(IN ct reference,OUT boundary char)
    /*****************************************************************
    * return value of the boundary parameter from a Content-Type value
    ******************************************************************/
    begin
      declare boundaryStart  integer;
      declare boundaryEnd    integer;
    
      set boundaryStart  = position('boundary=' in ct) + 9;
      set boundaryEnd    = position(';' in ct from boundaryStart);	
      if (boundaryStart <> 0) then
        if (boundaryEnd <> 0) then
      	  set boundary  = substring(ct from boundaryStart for boundaryEnd-boundaryStart);
        else
          set boundary  = substring(ct from boundaryStart);
        end if;		
      end if;
    end;
    계산 노드는 다음 ESQL을 사용하여 MIME 메시지를 보내는 프로시저를 호출할 수 있습니다.
    SET OutputRoot = InputRoot;
    
    declare boundary char;
    CALL getBoundary(OutputRoot.Properties.ContentType, boundary);
    
    CALL writeWAS_JMS(OutputRoot,boundary);
    

Java 노드를 포함하고 Java 5 를 사용하는 메시지 플로우를 처리할 때 AIX 에서 java_lang_StackOverflowError

프로시저

  • 시나리오: Java 노드를 포함하고 Java 5를 사용하는 메시지 플로우를 처리할 때 AIX® 에서 이상 종료가 발생합니다.
    이상종료 파일에 세그먼트화 결함을 나타내는 이상종료가 있었다고 표시되지만, stderr 파일 검사는 JVM의 스택 오버플로우를 표시합니다.
    Exception in thread "Thread-15" java/lang/StackOverflowError: operating system stack overflow
            at com/ibm/broker/plugin/MbOutputTerminal._propagate   (Native Method)
            at com/ibm/broker/plugin/MbOutputTerminal.propagate    (MbOutputTerminal.java:103)
            at com/ibm/xsl/mqsi/XMLTransformNode.evaluate    (XMLTransformNode.java:1002)
            at com/ibm/broker/plugin/MbNode.evaluate (MbNode.java:1434)
            at com/ibm/broker/plugin/MbOutputTerminal._propagate   (Native Method)
            at com/ibm/broker/plugin/MbOutputTerminal.propagate    (MbOutputTerminal.java:103)
            at com/ibm/xsl/mqsi/XMLTransformNode.evaluate    (XMLTransformNode.java:1002)
            at com/ibm/broker/plugin/MbNode.evaluate (MbNode.java:1434)
            at com/ibm/broker/plugin/MbOutputTerminal._propagate   (Native Method)
            at com/ibm/broker/plugin/MbOutputTerminal.propagate    (MbOutputTerminal.java:103)
            at com/ibm/xsl/mqsi/XMLTransformNode.evaluate    (XMLTransformNode.java:1002)
            at com/ibm/broker/plugin/MbNode.evaluate (MbNode.java:1434)
  • 설명:Java 5 에는 Java 스레드의 스택 크기를 조정하는 매개변수가 있습니다. Java 5 의 기본 운영 체제 스택 크기는 256KB에 불과합니다. 특정 메시지 플로우 (예: Java 사용자 정의 노드 또는 XMLT 노드를 포함하는 플로우) 에서는 이 크기가 충분하지 않을 수 있으므로 인색한 사람 파일에 스택 오버플로우 오류가 표시됩니다. JVM 옵션 사용하기-Xmso를 사용하여 Java용 운영 체제 스택을 조정한다.
    다음 명령을 사용하여 스택에 대한 정보를 표시할 수 있습니다.
    export MQSIJVERBOSE=-verbose:stack,sizes
    이 명령은 시작 시 stderr 파일에 다음 또는 다음과 유사한 컨텐츠를 포함한 입력 항목을 작성합니다.
      -Xmca32K        RAM class segment increment
      -Xmco128K       ROM class segment increment
      -Xmns0K         initial new space size
      -Xmnx0K         maximum new space size
      -Xms125000K     initial memory size
      -Xmos125000K    initial old space size
      -Xmox250000K    maximum old space size
      -Xmx250000K     memory maximum
      -Xmr16K         remembered set size
      -Xlp0K          large page size
                      available large page sizes: 4K 16M
      -Xmso256K       OS thread stack size
      -Xiss2K         java thread stack initial size
      -Xssi16K        java thread stack increment
      -Xss256K        java thread stack maximum size
      -Xscmx16M       shared class cache size
    
    Note: The stack size defaults to 256K.
  • 솔루션:
    1. 다음 명령을 실행하여 운영 체제 스택 크기를 2 MB로 설정하십시오.
      export IBM_JAVA_OPTIONS=-Xmso2m
    2. 통합 노드를 재시작하십시오.

HP-UX에서 코드 페이지 변환 사용 시의 문제점

프로시저

  • 시나리오: HP-UX에서 코드 페이지 변환 문제점이 발생합니다.
  • 솔루션: WebSphere MQ 큐 관리자 속성 CodedCharSetID을 확인하십시오. 이 속성의 기본값은 1051입니다. IBM Integration Bus 구성요소를 호스트하는 큐 관리자의 경우 이 값을 819로 변경하십시오.

원격 WebSphere MQ 큐의 메시지에 액세스할 수 없습니다.

프로시저

  • 시나리오: 오류 메시지 BIP2677 는 MQInput 노드가 리모트 큐의 메시지에 액세스하려고 할 때 발생합니다.
  • 설명: 이 오류는 MQInput 노드가 WebSphere MQ 콜백 메커니즘을 사용하여 큐에서 메시지를 수신할 때 발생할 수 있습니다.
  • 솔루션: 오류의 원인을 판별하려면 WebSphere MQ 제품 문서에서 WebSphere MQ 완료 및 이유 코드를 확인하십시오. 오류가 MQ_ENVIRONMENT_ERROR (2012)인 경우, 연결된 채널의 SHARECNV (shared conversations) 매개변수가 0으로 설정되었을 가능성이 높습니다. 이 문제를 해결하려면 채널의 SHARECNV 매개변수가 기본값인 10으로 설정되어 있는지 확인하십시오.

WebSphere MQ 메시지는 백아웃 처리를 완료하지 않으며 백아웃카운트 씩 연속적으로 증가합니다.

프로시저

  • 시나리오: 실행 중인 메시지 플로우에서 MQInput 노드의 입력 메시지는 연속적으로 백아웃되고 백아웃카운트 는 백아웃 임계값에 도달한 경우에도 무기한으로 증가합니다. BIP2630이 로컬 오류 로그에 표시됩니다.
  • 설명: 이 오류는 메시지가 백아웃되고 통합 노드의 큐 관리자가 백아웃 큐 또는 데드-레터 큐가 정의되지 않았거나 큐에 연결하는 중 MQPUT 오류가 발생한 경우 발생합니다. 메시지를 큐에 넣을 수 없으므로 메시지가 계속해서 백아웃됩니다.
  • 솔루션: 백아웃 큐 또는 데드 레터 큐가 모두 존재하지 않기 때문에 이러한 상황이 발생하는 경우, 큐의 하나 (또는 둘 다) 를 정의하여 문제점을 해결하십시오. 메시지의 처리를 방해하는 조건이 해결되면 BOTHRESH 속성의 값을 일시적으로 늘릴 수 있으며, 그러면 메시지의 정상 처리가 강제 실행됩니다.