ObjectMessage 페이로드를 처리하려면 추가 처리가 필요합니다. JMS ObjectMessage 페이로드가 직렬화 Java 오브젝트이기 때문입니다.
JMSInput
노드는 메시지에 대해 getObject( )를 호출하여 페이로드를
확보합니다. getObject( )는 직렬화되지 않은 원래 클래스 오브젝트를
리턴합니다. 이 클래스 정의는 JMSInput 노드에 사용 가능해야 하며 브로커의
Java 클래스 경로를 통해 액세스 가능한지 확인해야 합니다. (클래스 경로는
브로커의 실행 가능 디렉토리에 있는 mqsiprofile 배치 파일에서 정의됩니다.
예를 들어 Windows에서는
install_dir/bin 디렉토리에 있는 mqsiprofile.cmd입니다.)
JMSInput 노드는
BLOB 구문 분석기를 호출하여 오브젝트로부터 작성되는
비트스트림을 통해 메시지 본문을 작성합니다.
Java 오브젝트는 후속적으로 JavaCompute 노드 또는 사용자 정의 확장에서 다시 직렬화할 수 있고 해당 메소드 호출을 사용하여 갱신됩니다.
MapMessage 및 StreamMessage에 대한 페이로드는 개별 요소로만 추출될 수 있으므로, 메시지 본문을 작성하는 데 사용하려면 먼저 JMSInput 노드에서 재형식화해야 합니다.
JMSMap 도메인은 XML 데이터 스트림인 브로커 XML 구문 분석기와 동의어입니다. 그러나 MapMessage 페이로드 데이터는 메시지 오브젝트에서 이름-값 쌍 세트로 추출됩니다. JMS API를 사용하여 이름-값 쌍을 확보합니다.
JMSInput 노드는 각각의 이름-값 쌍을 XML 요소 및 값으로 비트스트림에 추가하고 dt= 속성을 사용하여 값 유형을 보존합니다.
<map> <Item_8_of_10_Char dt='char'>A</Item_8_of_10_Char> <Item_5_of_10_Double dt='r8'>999999.0</Item_5_of_10_Double> <Item_10_of_10_String>Last Map Item</Item_10_of_10_String> <Item_9_of_10_Boolean dt='boolean'>0</Item_9_of_10_Boolean> <Item_2_of_10_Integrer dt='i4'>999</Item_2_of_10_Integrer> <Item_3_of_10_Short dt='i2'>9999</Item_3_of_10_Short> <Item_7_of_10_Byte dt='i1'>9</Item_7_of_10_Byte> <Item_6_of_10_Float dt='r4'>2.24</Item_6_of_10_Float> <Item_1_of_10_String>P2P Map Msg Number:1</Item_1_of_10_String> <Item_4_of_10_Long dt='i8'>99999</Item_4_of_10_Long> </map>이 예에서 메시지에는 10개의 필드가 있습니다. 필드 이름은 JMS 클라이언트 응용프로그램이 생성했으며 형식은 item_n_of_x_t입니다.
StreamMessage 페이로드 데이터는 필드의 순서로, 각 필드에는 특정 유형이 있습니다. 필드는 연관된 이름을 가지고 있지 않으므로, 디폴트 요소 이름 elt를 사용하여 XML 요소를 생성합니다. MapMessage와 마찬가지로, JMS API는 개별적으로 검색할 필드에만 허용됩니다. JMSInput 노드는 JMS 메시지에서 필드를 추출하여 각 필드를 XML 형식으로 비트스트림에 추가합니다.
<stream> <elt>P2P Stream Message Number :7</elt> <elt dt='i4'>999</elt> <elt dt='i2'>9999</elt> <elt dt='i8'>99999</elt> <elt dt='r8'>999999.0</elt> <elt dt='r4'>2.24</elt> <elt dt='i1'>9</elt> <elt dt='char'>A</elt> <elt dt='boolean'>0</elt> <elt>Last Stream Item</elt> </stream>이 예에서, 10개의 입력 값이 JMS 클라이언트 응용프로그램에 의해 StreamMessage에 추가됩니다.