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:
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)