Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id F04797BC7 for ; Mon, 12 Sep 2011 10:47:22 +0000 (UTC) Received: (qmail 17495 invoked by uid 500); 12 Sep 2011 10:47:21 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 17334 invoked by uid 500); 12 Sep 2011 10:47:02 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 17322 invoked by uid 99); 12 Sep 2011 10:46:55 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Sep 2011 10:46:55 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 12 Sep 2011 10:46:52 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 9833B23889EC for ; Mon, 12 Sep 2011 10:46:32 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1169682 - in /cxf/trunk: rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Date: Mon, 12 Sep 2011 10:46:32 -0000 To: commits@cxf.apache.org From: ay@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110912104632.9833B23889EC@eris.apache.org> Author: ay Date: Mon Sep 12 10:46:32 2011 New Revision: 1169682 URL: http://svn.apache.org/viewvc?rev=1169682&view=rev Log: [CXF-374] request context property for WS-RM sequence demarcation Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java?rev=1169682&r1=1169681&r2=1169682&view=diff ============================================================================== --- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java (original) +++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java Mon Sep 12 10:46:32 2011 @@ -90,6 +90,18 @@ public class RMManager { */ public static final String WSRM_WSA_VERSION_PROPERTY = "org.apache.cxf.ws.rm.wsa-namespace"; + /** + * Message contextual property giving the last message. + */ + public static final String WSRM_LAST_MESSAGE_PROPERTY = + "org.apache.cxf.ws.rm.last-message"; + + /** + * Message contextual property for setting the replyTo header + */ + public static final String WSRM_REPLY_TO_PROPERTY = + "org.apache.cxf.ws.rm.reply-to"; + private static final Logger LOG = LogUtils.getL7dLogger(RMManager.class); Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java?rev=1169682&r1=1169681&r2=1169682&view=diff ============================================================================== --- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java (original) +++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java Mon Sep 12 10:46:32 2011 @@ -136,6 +136,11 @@ public class RMOutInterceptor extends Ab // context seq.nextMessageNumber(inSeqId, inMessageNumber, isLastMessage); + if (Boolean.TRUE.equals(msg.getContextualProperty(RMManager.WSRM_LAST_MESSAGE_PROPERTY))) { + // mark the message as the last one + seq.setLastMessage(true); + } + rmpsOut.setSequence(seq); // if this was the last message in the sequence, reset the Modified: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java?rev=1169682&r1=1169681&r2=1169682&view=diff ============================================================================== --- cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java (original) +++ cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Mon Sep 12 10:46:32 2011 @@ -331,8 +331,7 @@ public class SequenceTest extends Abstra RM10Constants.TERMINATE_SEQUENCE_ACTION}; mf.verifyActions(expectedActions, true); mf.verifyMessageNumbers(new String[] {null, "1", null, null, "1", null}, true); - // TODO: temporarily commented-out until WS-RM last message support added back in -// mf.verifyLastMessage(new boolean[] {false, true, false, false, true, false}, true); + mf.verifyLastMessage(new boolean[] {false, true, false, false, true, false}, true); // createSequenceResponse message plus partial responses to // greetMeOneWay and terminateSequence ||: 2 @@ -348,6 +347,55 @@ public class SequenceTest extends Abstra mf.verifyLastMessage(new boolean[] {false, false, false, false}, false); mf.verifyAcknowledgements(new boolean[] {false, true, false, true}, false); } + + @Test + public void testOnewayAnonymousAcksClientSequenceDemarcation() throws Exception { + init("org/apache/cxf/systest/ws/rm/rminterceptors.xml"); + greeter.greetMeOneWay("once"); + + ((BindingProvider)greeter).getRequestContext(). + put(RMManager.WSRM_LAST_MESSAGE_PROPERTY, Boolean.TRUE); + greeter.greetMeOneWay("twice"); + + ((BindingProvider)greeter).getRequestContext(). + remove(RMManager.WSRM_LAST_MESSAGE_PROPERTY); + greeter.greetMeOneWay("thrice"); + + // three application messages plus two createSequence plus one + // terminateSequence + + awaitMessages(6, 5); + + MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), + inRecorder.getInboundMessages(), Names200408.WSA_NAMESPACE_NAME, RM10Constants.NAMESPACE_URI); + + mf.verifyMessages(6, true); + String[] expectedActions = new String[] {RM10Constants.CREATE_SEQUENCE_ACTION, + GREETMEONEWAY_ACTION, + GREETMEONEWAY_ACTION, + RM10Constants.TERMINATE_SEQUENCE_ACTION, + RM10Constants.CREATE_SEQUENCE_ACTION, + GREETMEONEWAY_ACTION}; + + mf.verifyActions(expectedActions, true); + mf.verifyMessageNumbers(new String[] {null, "1", "2", null, null, "1"}, true); + mf.verifyLastMessage(new boolean[] {false, false, true, false, false, false}, true); + + // createSequenceResponse message plus partial responses to + // greetMeOneWay and terminateSequence ||: 2 + + mf.verifyMessages(5, false); + + expectedActions = new String[] {RM10Constants.CREATE_SEQUENCE_RESPONSE_ACTION, + RM10Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION, + RM10Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION, + RM10Constants.CREATE_SEQUENCE_RESPONSE_ACTION, + RM10Constants.SEQUENCE_ACKNOWLEDGMENT_ACTION}; + mf.verifyActions(expectedActions, false); + mf.verifyMessageNumbers(new String[] {null, null, null, null, null}, false); + mf.verifyLastMessage(new boolean[] {false, false, false, false, false}, false); + mf.verifyAcknowledgements(new boolean[] {false, true, true, false, true}, false); + } @Test public void testOnewayAnonymousAcksSuppressed() throws Exception {