cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aki Yoshida <elak...@gmail.com>
Subject RM CloseSequence message with the wrong Sequence header
Date Tue, 13 May 2014 20:24:07 GMT
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

Mime
View raw message