Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-6519

WS-RM - Invalid response for CloseSequence

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.7.17
    • Fix Version/s: 2.7.18
    • Component/s: WS-* Components
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      When endpoint is running with WS-RM 1.1/1.2 enabled, after CloseSequence control message (org.apache.cxf.ws.rm.RM11Constants.CLOSE_SEQUENCE_ACTION) is received, invalid empty response (202 Accepted with no content) is returned instead of CloseSequenceResponse.

      This in turn means that source RM endpoint won't proceed to terminate the sequence which results in sequence metadata not being being removed (as part of sequence termination handling) from RMTxStore if it's used on either side.

      I suspect one particular line to be causing the issue - see line 172 where I believe RM11Constants.CLOSE_SEQUENCE_ACTION should be used instead of RM11Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION:

      org.apache.cxf.ws.rm.RMInInterceptor
       85     protected void handle(Message message) throws SequenceFault, RMException {
                      ...
       166         } else {
       167             rme.receivedControlMessage();
       168             if (RM10Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION.equals(action)
       169                 || RM11Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION.equals(action)) {
       170                 processAcknowledgments(rme, rmps, protocol);
       171             } else if (RM10Constants.CLOSE_SEQUENCE_ACTION.equals(action)
       172                 || RM11Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION.equals(action)) {
       173                 processSequence(destination, message);
       174             } else if ((RM10Constants.CREATE_SEQUENCE_ACTION.equals(action)
       175                 || RM11Constants.CREATE_SEQUENCE_ACTION.equals(action)) && !isServer) {
       176                 LOG.fine("Processing inbound CreateSequence on client side.");
       177                 Servant servant = rme.getServant();
       178                 Object csr = servant.createSequence(message);
       179                 Proxy proxy = rme.getProxy();
       180                 proxy.createSequenceResponse(csr, protocol);
       181                 return;
       182             }
       183         }
       184         
       185         assertReliability(message);
       186     }
      

      I found the issue on v2.7.14, but I think the issue is present on all versions (since I see suspected code present in all versions)

        Attachments

          Activity

            People

            • Assignee:
              ay Akitoshi Yoshida
              Reporter:
              jtomek Jozef Tomek
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: