JMS 프로토콜을 통한 SOAP
웹 서비스 엔진은 클라이언트와 서버 사이의 SOAP 메시지를 통신하기 위해 HTTP에 대한 대체로서 JMS(Java™ Message Service) 준수 메시징 전송을 통해 새로운 산업 표준 SOAP를 지원합니다.

IBM® 및 기타 공급업체는 2005년 이래 JMS 스펙을 통해 제안된 SOAP에 대해 작업합니다. 스펙은 W3C로 제출되고 작업 그룹이 설정됩니다. 이 초안 스펙의 현재 멤버 제출은 공동으로 2007년 10월에 발간되었습니다. 이 산업 표준에 대한 세부사항은 JMS 스펙을 통한 SOAP를 참조하십시오.
클라이언트 또는 서버 컴포넌트에 구현을 제공해야 하는 경우 JMS 전송 프로토콜을 통한 새로운 산업 표준 SOAP를 사용하십시오. 또한, 구현이 WebSphere® Application Server에서 웹 서비스 엔진에 의해 제공되는 클라이언트 및 서버 컴포넌트와 상호 운용될 수 있다는 것을 확인해야 합니다.
클라이언트 컴포넌트는 다음 프로토콜 제한조건을 따르는 동안 SOAP 요청 메시지를 전송하고 SOAP 응답 메시지를 수신할 책임이 있습니다.
- 클라이언트는 javax.jms.BytesMessage 오브젝트 또는 javax.jms.TextMessage 오브젝트를 사용하여 서버에 SOAP 요청 메시지를 전송해야 합니다.
- 클라이언트는 메시지를 대상 큐 또는 주제로 전송하기 전에 JMS 요청 메시지에서 다음 특성을 설정해야 합니다.
- SOAPJMS_contentType: 이 특성은 HTTP 메시지에서 발견된 컨텐츠 유형 헤더와 유사하고 메시지의 컨텐츠 유형을 설명하기 위해 사용됩니다. 예를 들어, 텍스트 전용 SOAP 메시지(첨부 파일이 없는
메시지)에 이 JMS 메시지 특성을 위한 다음 값 설정이
있습니다.
text/xml; charset="UTF-8"
첨부 파일을 포함하는 SOAP 메시지의 경우, 다음 코드를 사용하여 JMS 메시지에서 SOAPJMS_contentType 특성을 설정하십시오.
이 예제는 여러 부분으로 나누어진 메시지를 나타냅니다. 여기서 첫 번째 파트는 유형 text/xml이고 SOAP 엔벨로프를 포함합니다. 여러 부분으로 나누어진 메시지의 다른 파트는 다양한 첨부 파일을 포함합니다. HTTP 1.1 스펙은 컨텐츠 유형 헤더에 대한 추가 정보를 포함합니다.multipart/related; type="text/xml"; start="<...content-id_of_first_ part...>"
- enableTransaction: 서버 컴포넌트가 대상 큐 또는 주제에서 메시지를 수신하기 위해 사용된 동일한 트랜잭션에서 웹 서비스 요청을 처리하도록 하려는 경우 아웃바운드 JMS 요청 메시지에서 이 선택적 특성을 true로 설정하십시오. 이 특성은 JMS 스펙을 통한 SOAP에 대한 IBM 확장자입니다.
우수 사례: 클라이언트 컴포넌트의 경우, 양방향 동기화 웹 서비스 요청으로 발생할 수 있는 동기화 문제점을 피하도록 단방향 또는 양방향 비동기 요청을 위해 이 특성만 true로 설정하십시오. 이 특성이 설정되지 않고 false의 기본값으로 설정되면 서버는 요청을 처리하기 위해 웹 서비스 엔진을 호출하기 전에 대상 큐 또는 주제에서 요청 메시지를 수신하기 위해 사용된 트랜잭션을 일시중단합니다.bprac
- SOAPJMS_requestURI: 요청과 연관된 JMS 엔드포인트 URL에 이 특성을 설정해야 합니다.
- SOAPJMS_soapAction: 이 선택적 특성이 웹 서비스 요청과 연관된 soapAction 값을 표시하도록 아웃바운드 JMS 요청 메시지에 설정됩니다. 이 특성은 HTTP 전송을 통해 웹 서비스 요청을 전송할 때 사용된 SOAPAction HTTP 헤더와 유사합니다. soapAction 특성의 값은 SOAP 요청의 인텐트를 식별하는 URI입니다. SOAPJMS_soapAction 특성이 지정되면, 요청의 대상을 판별하기 위해 서버 컴포넌트에 의해 사용됩니다. SOAP 스펙은 제한사항을 URI의 형식 또는 특이성에 두지 않고 URI가 해결할 수 있는 스펙도 요구하지 않습니다. 일반적으로, 이 특성은 WSDL 문서로부터 soapAction 값으로 설정됩니다.
- SOAPJMS_targetService: 이 특성을 아웃바운드 JMS 요청 메시지에 설정해야 하고 값은 요청에 대해 JMS 엔드포인트 URL에서 발견되는 targetService 특성 값과 일치해야 합니다. 이 값은 요청이 디스패치되는 포트 컴포넌트를 판별하기 위해 서버 컴포넌트에 의해 사용됩니다.
- SOAPJMS_bindingVersion: 이 특성은 클라이언트와 서버에서 사용된 프로토콜의 버전 번호를 표시합니다. 값을 1.0으로 설정하십시오.
- SOAPJMS_contentType: 이 특성은 HTTP 메시지에서 발견된 컨텐츠 유형 헤더와 유사하고 메시지의 컨텐츠 유형을 설명하기 위해 사용됩니다. 예를 들어, 텍스트 전용 SOAP 메시지(첨부 파일이 없는
메시지)에 이 JMS 메시지 특성을 위한 다음 값 설정이
있습니다.
- 요청 메시지가 양방향 요청을 나타내고 이는 응답이 예상된다는 것을 의미하는 경우, 클라이언트 컴포넌트는 응답 메시지에 사용되는 큐를 지정하기 위해 JMS 메시지 JMSReplyTo 특성을 설정해야 합니다. JMS 메시지 setJMSReplyTo 메소드는 큐를 지정하는 데 사용됩니다. 웹 서비스 요청이 작성될 때마다 클라이언트가 임시 큐를 작성해야 하는 것을 방지하기 위해 클라이언트에서 영구적인 응답 큐를 구성하는 것으로부터 이익을 얻을 수 있습니다. 이 특별한 큐 작성에 대해 더 학습하려면 JMS를 통해 SOAP를 사용하여 웹 서비스를 위해 영구적 응답 큐를 구성하는 것에 대해 읽으십시오.
- SOAP 요청 메시지가 단방향 요청을 나타내고 이는 응답이 예상되지 않는다는 것을 의미하는 경우, 클라이언트 컴포넌트는 JMS 메시지 JMSReplyTo 특성을 설정하지 않아야 합니다.
- 클라이언트 컴포넌트는 응답 메시지가 JMS BytesMessage 오브젝트라고 가정할 수 있습니다.
- 클라이언트 컴포넌트는 응답 메시지 상관 ID가 원래 요청 메시지의 메시지 ID와 일치한다고 가정할 수 있습니다.
서버 컴포넌트는 다음 프로토콜 제한조건을 따르는 동안 SOAP 요청 메시지를 수신하고 SOAP 응답 메시지를 전송할 책임이 있습니다.
- 서버 컴포넌트는 JMS BytesMessage를 수신할 것으로 기대할 수 있습니다. BytesMessage 이외의 어떤 것이 서버 컴포넌트에 의해 수신되면, 응답이 예상되는 경우 서브코드(unsupportedJMSMessageFormat)를 가진 결함은 클라이언트로 리턴됩니다.
- 서버 컴포넌트는 javax.jms.BytesMessage 오브젝트 또는 javax.jms.TextMessage 오브젝트를 수신할 것으로 예상할 수 있습니다. BytesMessage 또는 TextMessage 이외의 어떤 것이 서버 컴포넌트에 의해 수신되면, 응답이 예상되는 경우 서브코드(unsupportedJMSMessageFormat)를 가진 결함은 클라이언트로 리턴됩니다.
- 서버 컴포넌트는 적절한 SOAP 응답 메시지를 생성하기 위해 적절하게 SOAP 요청을 처리해야 합니다.
- JMS 요청 메시지의 JMSReplyTo 특성이 설정되는 경우에만 서버 컴포넌트는 클라이언트로 응답 메시지를 반송해야 합니다. JMS 메시지 getJMSReplyTo 메소드는 JMSReplyTo 특성 값을 JMS 메시지에서 검색하는 데 사용됩니다. 이 특성 값은 응답 대상을 표시합니다.
- 응답 메시지를 보낼 때, 서버 컴포넌트는 요청과 동일한 메시지 유형을 사용해야 합니다. 요청이 BytesMessage로 수신되면 응답은 BytesMessage로 전송되어야 합니다. 유사하게, 요청이 TextMessage로 수신되면 응답은 TextMessage로 전송되어야 합니다.
- 서버 컴포넌트는 메시지를 응답 큐에 보내기 전에 JMS 응답 메시지에서 다음 특성을 설정해야 합니다.
- SOAPJMS_contentType: 이 특성은 메시지의 컨텐츠 유형을 설명하기 위해 사용됩니다. 이 주제의 클라이언트 책임 섹션에서 이 특성에 대한 설명을 참조하십시오.
- correlation ID: JMS 응답 메시지의 상관 ID 특성을 원래 JMS 요청 메시지의 메시지 ID로 설정하십시오. 이 상관은 JMS 메시지 setJMSCorrelationID 메소드를 호출하여 수행됩니다.
- SOAPJMS_bindingVersion: 이 특성은 클라이언트와 서버에서 사용된 프로토콜의 버전 번호를 표시합니다. 값을 1.0으로 설정하십시오.
다음 예제는 첨부 파일 없이 요청 메시지를 위한 JMS 메시지 toString 메소드를 호출하는 것으로부터 결과를 표시합니다.
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: -1
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: queue://_Q_7D6C2035383215AB00000000000F4241?busName=WsFvtBus
JMSRedelivered: false
JMS_IBM_MsgType: 1
SOAPJMS_contentType: text/xml; charset=UTF-8
SOAPJMS_targetService: MaelstromWsEndpoint
SOAPJMS_requestIRI: jms:jndi:jms/MyRequestQueue?jndiConnectionFactoryName=jms/MyConnFactory&targetService=MyPort1
SOAPJMS_soapAction: "getQuote"
SOAPJMS_bindingVersion: 1.0
3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e3c73
6f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f7363
68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e733a
7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222078
...
다음 예제는 첨부 파일을 가지고 요청 메시지를 위한 JMS 메시지 toString 메소드를 호출하는 것으로부터
결과를 표시합니다.
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: -1
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: queue://_Q_F0940794C5CC2F84000000000044AA21?busName=WsFvtBus
JMSRedelivered: false
JMS_IBM_MsgType: 1
SOAPJMS_contentType: multipart/related;
boundary=MIMEBoundaryurn_uuid_B6BAFEADB1886ADC241205525550237;
type="text/xml"; start="<0.urn:uuid:B6BAFEADB1886ADC241205525550238@apache.org>"
SOAPJMS_targetService: MaelstromWsEndpoint
SOAPJMS_requestIRI: jms:jndi:jms/WebSvcsJMSQ?jndiConnectionFactoryName=
jms/WebSvcsJMS_CF&targetService=MaelstromWsEndpoint
SOAPJMS_soapAction: attachment
SOAPJMS_bindingVersion: 1.0
2d2d4d494d45426f756e6461727975726e5f757569645f4236424146454144423138383641444332
34313230353532353535303233370d0a436f6e74656e742d547970653a20746578742f786d6c3b20
636861727365743d5554462d380d0a436f6e74656e742d5472616e736665722d456e636f64696e67
3a20386269740d0a436f6e74656e742d49443a203c302e75726e3a757569643a4236424146454144
4231383836414443323431323035353235353530323338406170616368652e6f72673e0d0a0d0a3c
736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f73
6368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e73
3a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220
786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368
656d612d696e7374616e63652220786d6c6e733a736f6170656e633d22687474703a2f2f73636865
...
다음 예제는 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
...