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


Reply via email to