Hi Aki,
We definitely don't want that Sequence header on the CloseSequence
message. That code has been in place since I split the interceptors, so
it's probably just a mistake from when I was doing the split. I'll take
out the added clause on the if.
Thanks for catching this, Aki!
- Dennis
On 05/14/2014 08:24 AM, Aki Yoshida wrote:
Hi Dennis,
I noticed CloseSequence is sent out when the RM 1.1 endpoint is
shutdown for 3.0.0-SNAPSHOT.
But it seems that this CloseSequence message is incorrectly generated,
including the Sequence header.
The message looks like when the endpoint is shutdown after sending two
messages (see the Sequence header).
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<Action
xmlns="http://www.w3.org/2005/08/addressing">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence</Action>
<MessageID
xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:93e26fdb-cbe2-4204-ac8e-39ca3ad385a6</MessageID>
<To
xmlns="http://www.w3.org/2005/08/addressing">http://localhost:9000/SoapContext/GreeterPort</To>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
<wsrm:Sequence soap:mustUnderstand="1"
xmlns:ns2="http://www.w3.org/2005/08/addressing"
xmlns:wsrm="http://docs.oasis-open.org/ws-rx/wsrm/200702">
<wsrm:Identifier>urn:uuid:9cbc8993-cdb7-4718-bec7-63d70889c142</wsrm:Identifier>
<wsrm:MessageNumber>3</wsrm:MessageNumber>
</wsrm:Sequence>
</soap:Header>
<soap:Body>
<CloseSequence
xmlns="http://docs.oasis-open.org/ws-rx/wsrm/200702"
xmlns:ns2="http://www.w3.org/2005/08/addressing">
<Identifier>urn:uuid:9cbc8993-cdb7-4718-bec7-63d70889c142</Identifier>
<LastMsgNumber>2</LastMsgNumber>
</CloseSequence>
</soap:Body>
</soap:Envelope>
It looks like RMCaptureOutInterceptor is doing this special handling
for the CloseSequence action to include the sequence in its current RM
context properties.
114 boolean isApplicationMessage =
!RMContextUtils.isRMProtocolMessage(action);
115 boolean isPartialResponse = MessageUtils.isPartialResponse(msg);
116 RMConstants constants = protocol.getConstants();
117 boolean isLastMessage =
constants.getCloseSequenceAction().equals(action);
118
...
145 if ((isApplicationMessage || (isLastMessage &&
invocationContext != null)) && !isPartialResponse) {
146 if (LOG.isLoggable(Level.FINE)) {
147 LOG.fine("inbound sequence: " + (null == inSeqId
? "null" : inSeqId.getValue()));
148 }
…
178 }
I am not sure why this special handling is needed. Not handling the
CloseSequence message this way (e.g., attach the sequence to the
context only for the app messages), I can see the following
CloseSequence message is instead sent out.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<Action
xmlns="http://www.w3.org/2005/08/addressing">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence</Action>
<MessageID
xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:8c0f3805-934d-4f8a-862d-e8475d67d11b</MessageID>
<To
xmlns="http://www.w3.org/2005/08/addressing">http://localhost:9000/SoapContext/GreeterPort</To>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
</soap:Header>
<soap:Body>
<CloseSequence
xmlns="http://docs.oasis-open.org/ws-rx/wsrm/200702"
xmlns:ns2="http://www.w3.org/2005/08/addressing">
<Identifier>urn:uuid:ce1619a6-a0b9-4d9b-901e-594c54e4a220</Identifier>
<LastMsgNumber>2</LastMsgNumber>
</CloseSequence>
</soap:Body>
</soap:Envelope>
and this looks to be correct. Maybe there was a reason for the above
code and you could comment on this?
thanks.
regards, aki