IBM proprietäres SOAP-over-JMS-Protokoll (veraltet)
Für die Übertragung von SOAP-Nachricht zwischen Clients und Servern können Sie als Alternative zu HTTP das SOAP-over-JMS-Transportprotokoll (Java™ Message Service) verwenden. Die Web-Service-Engine unterstützt die Verwendung einer IBM® proprietären Implementierung sowie der Implementierung nach Branchenstandard.

Sie können ein SOAP-over-JMS-Transportprotokoll verwenden, wenn Sie Implementierungen für die Client- oder Serverkomponenten bereitstellen und sicherstellen müssen, dass die Implementierungen mit den Client- und Serverkomponenten interagieren können, die von der Web-Service-Engine im Anwendungsserver bereitgestellt werden. Das IBM proprietäre SOAP-over-JMS-Protokoll beschreibt bestimmte Anforderungen für den Nachrichtenaustausch für Client- und Serverkomponenten, die sicherstellen, dass SOAP-Anforderungs- und -Antwortnachrichten über die vom Anwendungsserver unterstützten JMS-APIs ausgetauscht werden können.
- Der Client muss ein JMS-TextMessage-Objekt, z. B. javax.jms.TextMessage, oder ein BytesMessage-Objekt, z. B. javax.jms.BytesMessage, verwenden, um die SOAP-Anforderungsnachricht an den Server zu übertragen. Wenn die Anforderungsnachricht Anhänge enthält, muss ein BytesMessage-Objekt verwendet werden. Enthält die Anforderungsnachricht keine Anhänge, kann der Client ein TextMessage- oder ein BytesMessage-Objekt verwenden. Die Clientimplementierung des Anwendungsservers verwendet wegen der potenziellen Notwendigkeit, Anhänge zu übertragen, nur ein BytesMessage-Objekt für die Anforderungsnachricht.
- Der Client muss die folgenden Eigenschaften in der JMS-Anforderungsnachricht setzen, bevor er die Nachricht
an die Zielwarteschlange bzw. das Zieltopic sendet:
- contentType: Diese Eigenschaft gleicht dem Header "Content-Type" in einer
HTTP-Nachricht und wird verwendet, um den Inhaltstyp der Nachricht zu beschreiben.
Eine reine SOAP-Textnachricht, z. B. eine Nachricht ohne Anhänge, wird wie folgt geschrieben:
Die Eigenschaft contentType in einer SOAP-Anforderungsnachricht, die Anhänge enthält, muss wie folgt gesetzt sein:text/xml; charset="UTF-8"
Dieses Beispiel bezieht sich auf eine mehrteilige Nachricht, in der der erste Teil den Typ text/xml hat und die SOAP-Nachricht enthält. Die anderen Teile der mehrteiligen Nachricht enthalten verschiedene Anhänge. Die Spezifikation HTTP 1.1 enthält weitere Informationen zum Header Content-Type.multipart/related; type="text/xml"; start="<...Inhalts-ID des ersten Teils...>"
- enableTransaction: Setzen Sie diese optionale Eigenschaft für abgehende
SOAP-over-JMS-Anforderungsnachrichten auf true, wenn die Serverkomponente
die Web-Service-Anforderung unter derselben Transaktion ausführen soll, die für den Empfang
der Nachricht aus der Zielwarteschlange oder dem Zieltopic verwendet wurde. Die Clientkomponente sollte diese Eigenschaft nur bei einer unidirektionalen Anforderung
auf true setzen, um Synchronisationsprobleme zu vermeiden, die bei einer bidirektionalen Web-Service-Anforderung auftreten können. Wenn diese Eigenschaft
auf den Standardwert false gesetzt ist, setzt der Server die Transaktion, die für den Empfang
der Nachricht aus der Zielwarteschlange oder dem Topic verwendet wurde, aus, bevor er die Web-Service-Engine zur Verarbeitung der Anforderung aufruft.
Fehler vermeiden: Die Clientkomponente sollte diese Eigenschaft nur bei einer unidirektionalen Anforderung auf true setzen, um Synchronisationsprobleme zu vermeiden, die auftreten können, wenn diese Eigenschaft bei einer bidirektionalen Web-Service-Anforderung auf true gesetzt wird. gotcha
- endpointURL: Diese Eigenschaft muss auf den JMS-Endpunkt-URL gesetzt werden, der der Anforderung zugeordnet ist.
- soapAction: Diese optionale Eigenschaft wird für eine abgehende SOAP-over-JMS-Anforderungsnachricht gesetzt und zeigt den soapAction-Wert, der der Web-Service-Anforderung zugeordnet ist, an. Diese Eigenschaft ähnelt dem SOAPAction-HTTP-Header, der beim Transport von Web-Service-Anforderungen über einen HTTP-Transport verwendet wird. Der Wert der Eigenschaft soapAction ist ein URI, der den Zweck der SOAP-Anforderung angibt. Wenn die Eigenschaft soapAction angegeben ist, wird es von der Serverkomponente verwendet, um das Ziel der Anforderung zu bestimmen. Die SOAP-Spezifikation schränkt das Format, die Genauigkeit oder die Auflösbarkeit des URI nicht ein. Normalerweise wird diese Eigenschaft auf den soapAction-Wert des WSDL-Dokuments gesetzt.
- targetService: Diese Eigenschaft muss auf den Wert der Eigenschaft targetService im JMS-Endpunkt-URL der Anforderung gesetzt werden. Dieser Wert wird von der Serverkomponente verwendet, um beim Versenden der Anforderung die Portkomponente im Ziel zu bestimmen.
- transportVersion: Diese Eigenschaft gibt die Versionsnummer des vom Client und vom Server verwendeten Protokolls an. Setzen Sie den Wert auf 1 (eins).
- contentType: Diese Eigenschaft gleicht dem Header "Content-Type" in einer
HTTP-Nachricht und wird verwendet, um den Inhaltstyp der Nachricht zu beschreiben.
Eine reine SOAP-Textnachricht, z. B. eine Nachricht ohne Anhänge, wird wie folgt geschrieben:
- Wenn die SOAP-Anforderungsnachricht eine bidirektionale Anforderung ist, muss die Clientkomponente mit der Eigenschaft "replyTo" der JMS-Nachricht die Warteschlange angeben, die für die Antwortnachricht verwendet wird. Hierfür wird die Methode setJMSReplyTo der JMS-Nachricht verwendet. Es kann von Vorteil sein, eine permanente replyTo-Warteschlange auf dem Client zu konfigurieren, damit der Client die Eigenschaft "replyTo" der JMS-Nachricht nicht jedes Mal, wenn eine Web-Service-Anforderung abgesetzt wird, setzen muss.
- Wenn die SOAP-Anforderungsnachricht eine unidirektionale Anforderung ist, darf die Clientkomponente die Eigenschaft "replyTo" der JMS-Nachricht nicht setzen.
- Die Clientkomponente muss, unabhängig vom Typ der für die Übertragung der SOAP-Anforderung verwendeten JMS-Nachricht, auf die Bearbeitung von Antwortnachrichten des Objekttyps BytesMessage oder TextMessage vorbereitet sein. Die Anwendungsserverkomponente antwortet mit demselben JMS-Nachrichtentyp, den sie vom Client empfangen hat, sofern die Antwort keine Anhänge enthält und kein BytesMessage-Objekt verwendet werden muss.
- Die Clientkomponente kann davon ausgehen, dass die Korrelations-ID der Antwortnachricht mit der Nachrichten-ID der ursprünglichen Anforderung übereinstimmt.
- Der Server muss auf den Empfang einer TextMessage oder BytesMessage vorbereitet sein. Wenn die Anforderung Anhänge enthält, muss eine ByteMessage verwendet werden. Die Implementierung der Serverkomponente des WebSphere-Produkts antwortet mit demselben Typ, wenn sie die Antwortnachricht an den Client zurücksendet, sofern die Antwort keine Anhänge enthält und keine BytesMessage verwendet wird.
- Die Serverkomponente muss die SOAP-Anforderung entsprechend verarbeiten, um die richtige SOAP-Antwortnachricht zu erzeugen.
- Die Serverkomponente muss nur dann eine Antwortnachricht an den Client zurücksenden, wenn die Eigenschaft "replyTo" der JMS-Anforderungsnachricht gesetzt ist.
- Die Serverkomponente muss die folgenden Eigenschaften in der JMS-Antwortnachricht setzen, bevor sie
die Nachricht an die replyTo-Warteschlange sendet:
- contentType: Eine Beschreibung dieser Eigenschaft finden Sie im Abschnitt über die Verantwortlichkeiten des Clients.
- Die Korrelations-ID der JMS-Antwortnachricht muss auf die Nachrichten-ID der ursprünglichen JMS-Anforderungsnachricht gesetzt werden. Hierfür wird die Methode setJMSCorrelationID der JMS-Nachricht aufgerufen.
- transportVersion: Diese Eigenschaft gibt die Versionsnummer des vom Client und vom Server verwendeten Protokolls an. Setzen Sie den Wert auf 1 (eins).
Das folgende Beispiel zeigt die Ergebnisse des Aufrufs der Methode toString der JMS-Nachricht für eine Anforderungsnachricht ohne Anhänge:
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
...
<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>
<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>
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...>
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
...