- From: Phil Adams <phil_adams@us.ibm.com>
- Date: Thu, 18 Sep 2008 13:25:44 -0500
- To: public-soap-jms@w3.org
- Message-ID: <OFED2C71E7.4106C4B0-ON862574C7.005F662B-862574C8.00653B3B@us.ibm.com>
Hi everyone,
During our 9/16 call, I took an action item to write up a specific
proposal regarding TextMessages that we can hopefully make a decision on
fairly soon.
Background:
Customer feedback that I've received has indicated that the use of a
TextMessage as an alternative to a BytesMessage would be useful in
situations where:
The user's application needs to interface with a legacy system or another
Web services toolkit which might only support TextMessage.
The user needs to perform audit logging of SOAP request and response
messages. A TextMessage would make this easier.
Using a TextMessage would make it easier for an intermediary to process a
message for routing or other purposes, where the processing needs to look
at the message content.
These are the main justifications that I've heard from customers. There
might be other reasons that some of you know about.
Proposal:
My proposal for introducing TextMessage support to the SOAP/JMS spec would
include the following:
1. The JMS URI spec (located at:
http://www.ietf.org/internet-drafts/draft-merrick-jms-uri-03.txt) would be
updated as follows:
Introduce support for a new "shared parameter" called "messageType".
Section 4.1.5 would be added to document this as follows:
4.1.5 messageType
This property specifies the JMS message type that should be used for the
request message. The valid values for this property are "TEXT" and
"BYTES". If this property is specified as "TEXT", then a JMS TextMessage
MUST be used. If a value of "BYTES" is specified, then a JMS
BytesMessage MUST be used. If this parameter is not specified, then a
value of "BYTES" SHOULD be used.
"messageType" should be added to the list of parameters in section 8.2.1.
The "messageType" parameter should also be removed from the request URI
that is set on the request message.
Here's an example of the messageType parameter within a JMS URI:
jms:jndi:jms/MyQueue&jndiConnectionFactoryName=jms/MyCF&timeToLive=300&deliveryMode=PERSISTENT&messageType=TEXT
2. The SOAP/JMS spec (located at:
http://www.w3.org/TR/2008/WD-soapjms-20080723/) would be updated as
follows:
In section 2.2.2 (JMS Message Header properties) we would add a section
which describes the "messageType" property:
[Definition: soapjms:messageType] (xsd:string)
- indicates the JMS message type for the request. The valid values are
"TEXT" and "BYTES". The default value is "BYTES".
- optional in URI, optional in WSDL, optional in environment
- if specified as "TEXT", then the message sending node MUST use a JMS
TextMessage for the request if there
are no attachments. If there are attachments, then a fault is
generated. [Definition: use fault subcode invalidMessageType]
- if specified as "BYTES" or not specified at all, then the message
sending node MUST use a JMS BytesMessage for the request.
Issue: It's possible to argue that "messageType" is not exactly in the
same category as the other "JMS Message Header properties" as it dictates
the type of the JMS message, rather than the value of a JMS Message
Header, so perhaps this property doesn't belong in section 2.2.2 but
belongs in a new section of its own. I think it's ok in section 2.2.2
but I certainly can understand if others don't agree with that.
In section 2.2.4 (Binding of Properties to URI), the following row should
be added to the table:
"messageType", "as messageType query parameter", "Should exclude"
In section 2.4 (The JMS Message Body), we should reword the first sentence
to indicate that the message should be a TextMessage if messageType=TEXT
is specified, and a BytesMessage otherwise. Also, at the end of
section 2.4, we should perhaps add an explanation that if the user
requests a TextMessage and attachments exist, then the message sending
node MUST generate a fault with subcode invalidMessageType. This would
be redundant with section 2.2.2 (above), so perhaps we can omit it here?
In section 2.6.1.1 (Init), we should change the second sentence so that it
specifies that a TextMessage MUST be used if messageType=TEXT is
specified, and a BytesMessage MUST be used if messageType=BYTES is
specified. In addition, a row should be added to the table to account
for the fact that the messageType property specifies the JMS message type.
In section 2.6.2.3 (Receiving + Sending), we should re-word the third
sentence as follows:
If the request message is a JMS TextMessage and no attachments exist in
the response, then the response MUST be created as a JMS TextMessage,
otherwise the response MUST be created as a JMS BytesMessage.
Issue: There might be some debate over the handling of this situation. My
opinion is that the message receiving node should try to respond in kind
if at all possible, but should use a BytesMessage if attachments exist.
My thought is that we should not generate a fault in this case, but should
do our best to get the response back to the requester, although I can see
both sides of this issue.
In section 2.6.2.3 (Receiving + Sending), we should add a row to the table
to account for the JMS message type and explain that it is derived from
the request message type.
In section 2.7.1 (Behaviour of Sending SOAP Node), the first sentence of
the second paragraph should be re-worded to account for TextMessage as
well as BytesMessage, similar to section 2.6.1.1 above. In addition,
we should add a row to the table to account for the JMS message type.
In section 2.8 (Faults), we should add "invalidMessageType" to the list of
fault subcodes.
In section 3.4.1 (Example), we might consider adding an example of the
"messageType" property to the existing WSDL 1.1 example, perhaps like
this:
24 <wsdl11:operation name="GetLastTradePrice">
25 <wsdl11soap11:operation soapAction="
http://example.com/GetLastTradePrice"/>
26 <wsdl11:input>
27 <wsdl11soap11:body use="literal"/>
28 </wsdl11:input>
29 <wsdl11:output>
30 <wsdl11soap11:body use="literal"/>
31 </wsdl11:output>
>>>>>> <soapjms:messageType>TEXT</soapjms:messageType>
32 </wsdl11:operation>
This would indicate that a TextMessage should be used when the client
invokes the "GetLastTracePrice" operation.
In section 3.6 (Properties), we should add a row to the table:
"messageType", "service, port/endpoint, binding"
I identified a couple of issues above, but there's one more that was
discussed on our calls and I'm not sure there was a resolution to it. It
has to do with the encoding of the JMS message vs the encoding of the SOAP
envelope within the JMS message. We will need to discuss and resolve
this...
Regards,
Phil Adams
WebSphere Development - Web Services
IBM Austin, TX
email: phil_adams@us.ibm.com
office: (512) 838-6702 (tie-line 678-6702)
mobile: (512) 750-6599
Received on Thursday, 18 September 2008 18:27:13 UTC