IBM 독점 SOAP over JMS 프로토콜(사용되지 않음)
SOAP over JMS(Java™ Message Service) 전송을 클라이언트와 서버 사이에서 SOAP 메시지 통신을 위한 HTTP의 대안으로 사용할 수 있습니다. 웹 서비스 엔진은 산업 표준 구현뿐 아니라 IBM® 독점 구현의 사용을 지원합니다.

클라이언트 또는 서버 컴포넌트를 위한 구현을 제공해야 하는 경우 SOAP over JMS 전송을 사용할 수 있으며, 해당 구현이 애플리케이션 서버의 웹 서비스 엔진이 제공하는 클라이언트 및 서버 컴포넌트와 상호 운영 가능한지 확인해야 합니다. IBM 독점 SOAP over JMS 프로토콜은 클라이언트 및 서버 컴포넌트를 위한 특정 메시지 교환 요구사항을 설명하므로 애플리케이션 서버가 지원하는 JMS API를 사용하여 SOAP 요청 및 응답 메시지를 교환할 수 있습니다.
클라이언트 컴포넌트는 다음 프로토콜 제한조건을 따르는 동안 SOAP 요청 메시지를 전송하고 SOAP 응답 메시지를 수신할 책임이 있습니다.
- 클라이언트는 JMS TextMessage 오브젝트(예: javax.jms.TextMessage) 또는 BytesMessage 오브젝트(예: javax.jms.BytesMessage)를 사용하여 서버로 SOAP 요청 메시지를 전송해야 합니다. 요청 메시지가 첨부 파일을 포함하는 경우 BytesMessage 오브젝트를 사용해야 합니다. 요청 메시지가 첨부 파일을 포함하지 않는 경우 클라이언트는 TextMessage 또는 BytesMessage 오브젝트를 사용할 수 있습니다. 애플리케이션 서버 클라이언트 구현은 첨부 파일을 전송할 잠재적 필요성으로 인해 요청 메시지에 대해 BytesMessage 오브젝트만 사용합니다.
- 클라이언트는 메시지를 대상 큐 또는 주제로 전송하기 전에 JMS 요청 메시지에서 다음 특성을 설정해야 합니다.
- contentType: 이 특성은 HTTP 메시지에 있는 Content-Type
헤더와 비슷하며 메시지의 컨텐츠 유형을 설명하는 데
사용됩니다. 텍스트 전용 SOAP 메시지(예를 들어 첨부 파일이 없는
메시지)는 다음과 같이 작성됩니다.
첨부 파일을 포함하는 SOAP 요청 메시지의 contentType 특성은 다음과 같이 설정되어야 합니다.text/xml; charset="UTF-8"
이 예는 첫 번째 파트가 SOAP 메시지를 포함하는 text/xml 유형인 다중 파트 메시지를 나타냅니다. 다중 파트 메시지의 다른 파트는 다양한 첨부 파일을 포함합니다. HTTP 1.1 스펙은 컨텐츠 유형 헤더에 대한 추가 정보를 포함합니다.multipart/related; type="text/xml"; start="<...content-id of first part...>"
- enableTransaction: 서버 컴포넌트가 대상 큐나 토픽으로부터
메시지를 수신하는 데 사용된 동일한 트랜잭션의 웹 서비스
요청을 처리해야 하는 경우 발신 SOAP over JMS 요청 메시지에서
이 선택적 특성을 true로
설정하십시오. 클라이언트 컴포넌트는 양방향 웹 서비스 요청에서 발생할 수 있는 동기화 문제점을 피하기 위해 단방향 요청의 경우에만 이 특성을
true로 설정해야 합니다. 이 특성이 설정되지
않거나 기본값 false로 설정된 경우,
요청을 처리하기 위해 웹 서비스 엔진을 호출하기 전에
서버가 대상 큐 또는 토픽에서 요청 메시지를 수신하는 데 사용한
트랜잭션을 일시중단합니다.
문제점 방지: 클라이언트 컴포넌트는 단방향 요청에 대해서만 이 특성을 true로 설정해야 합니다. 양방향 웹 서버 요청에 대해 이 특성을 true로 설정하는 것은 동기화 문제점 때문에 지원되지 않습니다. gotcha
- endpointURL: 이 특성은 요청과 연관된 JMS 엔드포인트 URL로 설정되어야 합니다.
- soapAction: 이 선택적 특성은 발신 SOAP over JMS 요청 메시지에서 웹 서비스 요청과 연관된 soapAction 값을 표시하기 위해 설정됩니다. 이 특성은 HTTP 전송을 통해 웹 서비스 요청을 전송할 때 사용된 SOAPAction HTTP 헤더와 유사합니다. soapAction 특성의 값은 SOAP 요청의 인텐트를 식별하는 URI입니다. soapAction 특성이 지정되는 경우 서버 컴포넌트가 요청의 대상을 판별하기 위해 사용합니다. SOAP 스펙은 URI의 형식이나 특이성 또는 분석 가능성에 대한 제한을 두지 않습니다. 일반적으로, 이 특성은 WSDL 문서로부터 soapAction 값으로 설정됩니다.
- targetService: 이 특성은 요청에 대한 JMS 스타일 엔드포인트 위치 URL에서 발견되는 targetService 특성 값으로 설정되어야 합니다. 이 값은 요청을 디스패치할 때 서버 컴포넌트가 대상에서 포트 컴포넌트를 판별하는 데 사용됩니다.
- transportVersion: 이 특성은 클라이언트 및 서버에서 사용하는 프로토콜의 버전 번호를 표시합니다. 값을 1(일)로 설정하십시오.
- contentType: 이 특성은 HTTP 메시지에 있는 Content-Type
헤더와 비슷하며 메시지의 컨텐츠 유형을 설명하는 데
사용됩니다. 텍스트 전용 SOAP 메시지(예를 들어 첨부 파일이 없는
메시지)는 다음과 같이 작성됩니다.
- SOAP 요청 메시지가 양방향 요청인 경우, 클라이언트 컴포넌트는 응답 메시지에서 사용하는 큐를 지정하려면 JMS 메시지의 replyTo 특성을 설정해야 합니다. JMS 메시지 setJMSReplyTo 메소드가 이를 위해 사용됩니다. 웹 서비스 요청이 있을 때마다 클라이언트가 JMS 메시지의 replyTo 특성을 설정할 필요가 없도록 하기 위해 클라이언트에서 영구적인 replyTo 큐를 구성하는 것이 바람직할 수 있습니다.
- SOAP 요청 메시지가 단방향 요청인 경우, 클라이언트 컴포넌트는 JMS 메시지의 replyTo 특성을 설정하지 말아야 합니다.
- SOAP 요청을 전송하는 데 사용되는 JMS 메시지의 유형과 상관없이, 클라이언트 컴포넌트가 BytesMessage 또는 TextMessage 오브젝트인 응답 메시지를 처리하도록 준비되어야 합니다. 응답이 첨부 파일을 포함하고 BytesMessage 오브젝트가 사용되어야 하는 경우가 아니라면, 애플리케이션 서버 컴포넌트는 클라이언트로부터 수신되는 JMS 메시지의 동일한 유형으로 응답합니다.
- 클라이언트 컴포넌트는 응답 메시지 상관 ID가 원래 요청 메시지 ID와 일치한다고 가정할 수 있습니다.
서버 컴포넌트는 다음 프로토콜 제한조건을 준수하며
SOAP 요청 메시지를 수신하고 SOAP 응답 메시지를
전송해야 합니다.
- TextMessage 또는 BytesMessage를 수신하도록 서버를 준비해야 합니다. 요청에 첨부 파일이 있는 경우 ByteMessage를 사용해야 합니다. 서버 컴포넌트의 WebSphere 제품 구현에서는 응답에 첨부가 있고 BytesMessage를 사용하는 경우를 제외하고 클라이언트로 다시 응답 메시지를 전송할 때 같은 방식으로 응답합니다.
- 서버 컴포넌트는 적절한 SOAP 응답 메시지를 생성하기 위해 적절하게 SOAP 요청을 처리해야 합니다.
- 서버 컴포넌트는 JMS 요청 메시지의 replyTo 특성이 설정된 경우에만 응답 메시지를 클라이언트에 다시 전송해야 합니다.
- 서버 컴포넌트는 replyTo 대기열에 메시지를 전송하기 전에 먼저
JMS 응답 메시지에서 다음 특성을 설정해야 합니다.
- contentType: 클라이언트 책임 섹션에서 이 특성에 대한 설명을 참조하십시오.
- JMS 응답 메시지의 상관 ID를 원래 JMS 요청 메시지의 메시지 ID로 설정하십시오. 이것은 JMS 메시지 setJMSCorrelationID 메소드를 호출하여 수행됩니다.
- transportVersion: 이 특성은 클라이언트 및 서버에서 사용하는 프로토콜의 버전 번호를 표시합니다. 값을 1(일)로 설정하십시오.
다음 예제는 첨부 파일 없이 요청 메시지를 위한 JMS 메시지 toString 메소드를 호출하는 것으로부터 결과를 표시합니다.
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:d438eebf04cb124aa25c5821110a134f0000000000000001
JMSTimestamp: 1092110476167
JMSCorrelationID: null
JMSDestination: topic://NewsGroupTopic?topicSpace=FvtTopicSpace
JMSReplyTo: null
JMSRedelivered: false
JMS_IBM_System_MessageID: 6B6765B36943A18C_11000001
transportVersion: 1
JMSXUserID:
targetService: NGConsumerJMS
JMSXAppID: Service Integration Bus
endpointURL: jms:/topic?destination=jms/NewsGroupTopic&connectionFactory;=jms/NewsGroupTCF&targetService;=NGConsumerJMS
contentType: text/xml; charset=utf-8
3c736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f
736368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e
...
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:d438eebf04cb124aa25c5821110a134f0000000000000001
JMSTimestamp: 1092110476167
JMSCorrelationID: null
JMSDestination: topic://NewsGroupTopic?topicSpace=FvtTopicSpace
JMSReplyTo: null
JMSRedelivered: false
JMS_IBM_System_MessageID: 6B6765B36943A18C_11000001
transportVersion: 1
JMSXUserID:
targetService: NGConsumerJMS
JMSXAppID: Service Integration Bus
endpointURL: jms:/topic?destination=jms/NewsGroupTopic&connectionFactory;
=jms/NewsGroupTCF&targetService;=NGConsumerJMS
contentType: text/xml; charset=utf-8
3c736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f
736368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e
...
다음 SOAP 버전 1.1 예제는 이전 메시지 예제의 페이로드를
표시합니다.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<postMessage><ngName xsi:type="xsd:string">news.current.events</ngName>
<msg xsi:type="xsd:string">This is a sample news item.</msg>
</postMessage>
</soapenv:Body>
</soapenv:Envelope>
SOAP 버전 1.2의 경우, encodingStyle 매개변수가 지원되지 않으므로
예제는 다음과 유사합니다.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<postMessage><ngName xsi:type="xsd:string">news.current.events</ngName>
<msg xsi:type="xsd:string">This is a sample news item.</msg>
</postMessage>
</soapenv:Body>
</soapenv:Envelope>
다음 예제는 첨부 파일을 가지고 요청 메시지를 위한 JMS 메시지 toString 메소드를 호출하는 것으로부터
결과를 표시합니다.
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 1
JMSExpiration: 1092086312310
JMSPriority: 4
JMSMessageID: ID:4bb64ed64e7d813d59ba5fec110a134f0000000000000001
JMSTimestamp: 1092086012310
JMSCorrelationID: null
JMSDestination: queue://Logger_Q
JMSReplyTo: queue://_Q_6B6765B36943A18C_00000385
JMSRedelivered: false
JMS_IBM_System_MessageID: 6B6765B36943A18C_10000001
transportVersion: 1
JMSXUserID:
targetService: WSLoggerJMS
JMSXAppID: Service Integration Bus
endpointURL: jms:/queue?
destination=jms/Logger_Q&connectionFactory=jms/Logger_CF&targetService=WSLoggerJMS
contentType: multipart/related; type="text/xml";
start="<945414389.1092086011970.IBM.WEBSERVICES@myhost1>";
boundary="----=_Part_0_247953397.1092086011970"
0d0a2d2d2d2d2d2d3d5f506172745f305f3234373935333339372e31303932303836303131393730
0d0a436f6e74656e742d547970653a20746578742f786d6c3b20636861727365743d5554462d380d
...
다음은 이전 메시지 예제의 페이로드를 표시합니다.
Content-Type: multipart/related; type="text/xml";
start="<945414389.1092086011970.IBM.WEBSERVICES@myhost1>";
boundary="----=_Part_0_247953397.1092086011970"
------=_Part_0_247953397.1092086011970
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <945414389.1092086011970.IBM.WEBSERVICES@myhost1>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<p499:InternationalizationContext soapenv:mustUnderstand="0"
xmlns:p499="http://www.ibm.com/webservices/InternationalizationContext">
<Locales>
<Locale>
<LanguageCode>en</LanguageCode>
<CountryCode>US</CountryCode>
</Locale>
</Locales>
<TimeZoneId>America/Chicago</TimeZoneId>
</p499:InternationalizationContext>
</soapenv:Header>
<soapenv:Body>
<sendJpegImage/>
</soapenv:Body>
<soapenv:Envelope>
------=_Part_0_247953397.1092086011970
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
Content-ID: <jpegImageRequest=81380956150.1092086011880.IBM.WEBSERVICES@myhost1>
<...contents of jpeg image file...>
다음 예제는 SOAP 응답 메시지를 위한 JMS 메시지 toString 메소드를 호출하는 것으로부터
결과를 표시합니다.
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: 0
JMSCorrelationID: ID:cdddb857f078a266eb9a972f110a134f0000000000000001
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: false
contentType:
multipart/related;
type="text/xml";
start="<961368106530.1092112854745.IBM.WEBSERVICES@yackerjr>";
boundary="----=_Part_0_1655006754.1092112854745"
0d0a2d2d2d2d2d2d3d5f506172745f305f313635353030363735342e313039323131323835343734
350d0a436f6e74656e742d547970653a20746578742f786d6c3b20636861727365743d5554462d38
...