Author: ay Date: Tue Mar 6 08:01:34 2012 New Revision: 1297373 URL: http://svn.apache.org/viewvc?rev=1297373&view=rev Log: Merged revisions 1297370 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.5.x-fixes
................ r1297370 | ay | 2012-03-06 08:51:02 +0100 (Tue, 06 Mar 2012) | 9 lines Merged revisions 1297296 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r1297296 | ay | 2012-03-06 00:57:14 +0100 (Tue, 06 Mar 2012) | 1 line [CXF-4164] Robust-InOnly processing with WS-RM must delay updating the sequence until message delivery ........ ................ Added: cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckBase.java - copied unchanged from r1297370, cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckBase.java cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckPersistenceTest.java - copied unchanged from r1297370, cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckPersistenceTest.java cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/sync-ack-persistent-server.xml - copied unchanged from r1297370, cxf/branches/2.5.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/sync-ack-persistent-server.xml Modified: cxf/branches/2.4.x-fixes/ (props changed) cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMDeliveryInterceptor.java cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckTest.java Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ --- svn:mergeinfo (added) +++ svn:mergeinfo Tue Mar 6 08:01:34 2012 @@ -0,0 +1,2 @@ +/cxf/branches/2.5.x-fixes:1297370 +/cxf/trunk:1297296 Propchange: cxf/branches/2.4.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMDeliveryInterceptor.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMDeliveryInterceptor.java?rev=1297373&r1=1297372&r2=1297373&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMDeliveryInterceptor.java (original) +++ cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMDeliveryInterceptor.java Tue Mar 6 08:01:34 2012 @@ -23,6 +23,7 @@ import java.util.logging.Logger; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageUtils; import org.apache.cxf.phase.Phase; /** @@ -42,6 +43,12 @@ public class RMDeliveryInterceptor exten public void handle(Message message) throws SequenceFault, RMException { LOG.entering(getClass().getName(), "handleMessage"); - getManager().getDestination(message).processingComplete(message); + Destination dest = getManager().getDestination(message); + final boolean robust = + MessageUtils.isTrue(message.getContextualProperty(Message.ROBUST_ONEWAY)); + if (robust) { + dest.acknowledge(message); + } + dest.processingComplete(message); } } Modified: cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java?rev=1297373&r1=1297372&r2=1297373&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java (original) +++ cxf/branches/2.4.x-fixes/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java Tue Mar 6 08:01:34 2012 @@ -25,6 +25,7 @@ import java.util.logging.Logger; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageUtils; import org.apache.cxf.ws.addressing.AddressingPropertiesImpl; import org.apache.cxf.ws.addressing.ContextUtils; import org.apache.cxf.ws.addressing.MAPAggregator; @@ -142,7 +143,11 @@ public class RMInInterceptor extends Abs void processSequence(Destination destination, Message message) throws SequenceFault, RMException { - destination.acknowledge(message); + final boolean robust = + MessageUtils.isTrue(message.getContextualProperty(Message.ROBUST_ONEWAY)); + if (!robust) { + destination.acknowledge(message); + } } void processDeliveryAssurance(RMProperties rmps) { Modified: cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckTest.java URL: http://svn.apache.org/viewvc/cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckTest.java?rev=1297373&r1=1297372&r2=1297373&view=diff ============================================================================== --- cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckTest.java (original) +++ cxf/branches/2.4.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/rm/ServiceInvocationAckTest.java Tue Mar 6 08:01:34 2012 @@ -18,186 +18,12 @@ */ package org.apache.cxf.systest.ws.rm; -import java.net.MalformedURLException; -import java.util.logging.Logger; - -import javax.xml.ws.Endpoint; - -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.apache.cxf.bus.spring.SpringBusFactory; -import org.apache.cxf.common.logging.LogUtils; -import org.apache.cxf.greeter_control.Control; -import org.apache.cxf.greeter_control.ControlService; -import org.apache.cxf.greeter_control.Greeter; -import org.apache.cxf.greeter_control.GreeterService; -import org.apache.cxf.greeter_control.types.FaultLocation; -import org.apache.cxf.interceptor.ServiceInvokerInterceptor; -import org.apache.cxf.phase.Phase; -import org.apache.cxf.test.TestUtilities; -import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; -import org.apache.cxf.testutil.common.AbstractBusTestServerBase; -import org.apache.cxf.ws.rm.RMManager; - -import org.junit.After; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - /** * Tests the acknowledgement delivery back to the non-decoupled port when there is some * error at the provider side and how its behavior is affected by the robust in-only mode setting. */ -public class ServiceInvocationAckTest extends AbstractBusClientServerTestBase { - public static final String PORT = allocatePort(Server.class); - - private static final Logger LOG = LogUtils.getLogger(ServiceInvocationAckTest.class); - - private static final String CONTROL_PORT_ADDRESS = - "http://localhost:" + PORT + "/SoapContext/ControlPort"; - - public static class Server extends AbstractBusTestServerBase { - - protected void run() { - SpringBusFactory factory = new SpringBusFactory(); - Bus bus = factory.createBus(); - BusFactory.setDefaultBus(bus); - setBus(bus); - - ControlImpl implementor = new ControlImpl(); - implementor.setAddress("http://localhost:" + PORT + "/SoapContext/GreeterPort"); - GreeterImpl greeterImplementor = new GreeterImpl(); - implementor.setImplementor(greeterImplementor); - Endpoint.publish(CONTROL_PORT_ADDRESS, implementor); - LOG.fine("Published control endpoint."); - } - - public static void main(String[] args) { - try { - Server s = new Server(); - s.start(); - } catch (Exception ex) { - ex.printStackTrace(); - System.exit(-1); - } finally { - System.out.println("done!"); - } - } - } - - private Bus controlBus; - private Control control; - private Bus greeterBus; - private Greeter greeter; - - - @BeforeClass - public static void startServers() throws Exception { - TestUtilities.setKeepAliveSystemProperty(false); - assertTrue("server did not launch correctly", launchServer(Server.class, true)); - } - - @AfterClass - public static void cleanup() { - TestUtilities.recoverKeepAliveSystemProperty(); - } - - @After - public void tearDown() { - if (null != greeter) { - assertTrue("Failed to stop greeter.", control.stopGreeter(null)); - greeterBus.shutdown(true); - greeterBus = null; - } - if (null != control) { - assertTrue("Failed to stop greeter", control.stopGreeter(null)); - controlBus.shutdown(true); - } - } - - @Test - public void testDefaultInvocationHandling() throws Exception { +public class ServiceInvocationAckTest extends ServiceInvocationAckBase { + protected void setupGreeter() throws Exception { setupGreeter("org/apache/cxf/systest/ws/rm/sync-ack-server.xml"); - - control.setRobustInOnlyMode(false); - - FaultLocation location = new org.apache.cxf.greeter_control.types.ObjectFactory() - .createFaultLocation(); - location.setPhase(Phase.INVOKE); - location.setBefore(ServiceInvokerInterceptor.class.getName()); - - RMManager manager = greeterBus.getExtension(RMManager.class); - - // the message is acked and the invocation takes place - greeter.greetMeOneWay("one"); - Thread.sleep(6000L); - assertTrue("RetransmissionQueue must be empty", manager.getRetransmissionQueue().isEmpty()); - - control.setFaultLocation(location); - - // the invocation fails but the message is acked because the delivery succeeds - greeter.greetMeOneWay("two"); - Thread.sleep(6000L); - assertTrue("RetransmissionQueue must be empty", manager.getRetransmissionQueue().isEmpty()); - } - - @Test - public void testRobustInvocationHandling() throws Exception { - setupGreeter("org/apache/cxf/systest/ws/rm/sync-ack-server.xml"); - - control.setRobustInOnlyMode(true); - - FaultLocation location = new org.apache.cxf.greeter_control.types.ObjectFactory() - .createFaultLocation(); - location.setPhase(Phase.INVOKE); - location.setBefore(ServiceInvokerInterceptor.class.getName()); - - RMManager manager = greeterBus.getExtension(RMManager.class); - - - // the message is acked and the invocation takes place - greeter.greetMeOneWay("one"); - Thread.sleep(6000L); - assertTrue("RetransmissionQueue must be empty", manager.getRetransmissionQueue().isEmpty()); - - control.setFaultLocation(location); - - // the invocation fails but the message is acked because the delivery succeeds - greeter.greetMeOneWay("two"); - Thread.sleep(6000L); - assertFalse("RetransmissionQueue must not be empty", manager.getRetransmissionQueue().isEmpty()); - - location.setPhase(null); - control.setFaultLocation(location); - - // the retransmission succeeds and the invocation succeeds, the message is acked - Thread.sleep(6000L); - assertTrue("RetransmissionQueue must be empty", manager.getRetransmissionQueue().isEmpty()); - - } - - private void setupGreeter(String cfgResource) throws NumberFormatException, MalformedURLException { - - SpringBusFactory bf = new SpringBusFactory(); - - controlBus = bf.createBus(); - BusFactory.setDefaultBus(controlBus); - - ControlService cs = new ControlService(); - control = cs.getControlPort(); - updateAddressPort(control, PORT); - - assertTrue("Failed to start greeter", control.startGreeter(cfgResource)); - - greeterBus = bf.createBus(cfgResource); - BusFactory.setDefaultBus(greeterBus); - LOG.fine("Initialised greeter bus with configuration: " + cfgResource); - - GreeterService gs = new GreeterService(); - - greeter = gs.getGreeterPort(); - updateAddressPort(greeter, PORT); - LOG.fine("Created greeter client."); - } }
