You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by an...@apache.org on 2006/11/16 13:30:25 UTC

svn commit: r475711 - in /incubator/cxf/trunk: rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/ rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ systests/src/test/java/org/apache/cxf/systest/ws/rm/

Author: andreasmyth
Date: Thu Nov 16 04:30:24 2006
New Revision: 475711

URL: http://svn.apache.org/viewvc?view=rev&rev=475711
Log:
[JIRA CXF-138, CXF-140] Support and system test for twoway messages in RM interceptors (acknowledgement for responses).

Added:
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml   (with props)
Modified:
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Source.java
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java Thu Nov 16 04:30:24 2006
@@ -55,7 +55,8 @@
     private static final Logger LOG = LogUtils.getL7dLogger(Proxy.class);
 
     private RMEndpoint reliableEndpoint;
-    
+    // REVISIT assumption there is only a single outstanding offer
+    private Identifier offeredIdentifier;
     
 
     public Proxy(RMEndpoint rme) {
@@ -140,6 +141,7 @@
             }
             offer.setIdentifier(reliableEndpoint.getSource().generateSequenceIdentifier());
             create.setOffer(offer);
+            setOfferedIdentifier(offer);
         }
         
         OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
@@ -149,6 +151,16 @@
     
     void lastMessage(SourceSequence s) throws IOException {
         // TODO
+    }
+    
+    Identifier getOfferedIdentifier() {
+        return offeredIdentifier;    
+    }
+    
+    void setOfferedIdentifier(OfferType offer) { 
+        if (offer != null) {
+            offeredIdentifier = offer.getIdentifier();
+        }
     }
        
     Object invoke(OperationInfo oi, Object[] params, Map<String, Object> context) {

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java Thu Nov 16 04:30:24 2006
@@ -88,7 +88,25 @@
      * @return the RM properties
      */
     public static RMProperties retrieveRMProperties(Message message, boolean outbound) {
-        return (RMProperties)message.get(getRMPropertiesKey(outbound));
+        if (outbound) {
+            return (RMProperties)message.get(getRMPropertiesKey(true));
+        } else {
+            Message m = null;
+            if (isOutbound(message)) {
+                // the in properties are only available on the in message
+                m = message.getExchange().getInMessage();
+                if (null == m) {
+                    m = message.getExchange().getInFaultMessage();
+                }
+            } else {
+                m = message;
+            }
+            if (null != m) {
+                return (RMProperties)m.get(getRMPropertiesKey(false));
+            }
+        }
+        return null;
+        
     }
     
     /**

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java Thu Nov 16 04:30:24 2006
@@ -63,8 +63,6 @@
     private Destination destination;
     private Service service;
     private Endpoint endpoint;
-    // REVISIT assumption there is only a single outstanding offer
-    private Identifier offeredIdentifier;
     private Proxy proxy;
     private Servant servant;
     
@@ -326,16 +324,6 @@
             bi.addOperation(boi);
 
             si.addBinding(bi);
-        }
-    }
-    
-    Identifier getOfferedIdentifier() {
-        return offeredIdentifier;    
-    }
-    
-    void setOfferedIdentifier(OfferType offer) { 
-        if (offer != null) {
-            offeredIdentifier = offer.getIdentifier();
         }
     }
     

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java Thu Nov 16 04:30:24 2006
@@ -188,7 +188,6 @@
             }
 
             seq = source.getCurrent(inSeqId);
-            addSourceSequence(seq);
             seq.setTarget(to);
         }
 

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Servant.java Thu Nov 16 04:30:24 2006
@@ -154,7 +154,7 @@
         // to the local destination sequence list, otherwise we have to wait for
         // and incoming CreateSequence request
         
-        Identifier offeredId = reliableEndpoint.getOfferedIdentifier();
+        Identifier offeredId = reliableEndpoint.getProxy().getOfferedIdentifier();
         if (null != offeredId) {
             AcceptType accept = createResponse.getAccept();
             assert null != accept;

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Source.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Source.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Source.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Source.java Thu Nov 16 04:30:24 2006
@@ -59,6 +59,8 @@
     
     public void addSequence(SourceSequence seq) { 
         addSequence(seq, true);
+        getReliableEndpoint().getManager().addSourceSequence(seq);
+        
     }
     
     public void addSequence(SourceSequence seq, boolean persist) {

Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java Thu Nov 16 04:30:24 2006
@@ -215,15 +215,11 @@
         EasyMock.expectLastCall();
         SourceSequence sseq = control.createMock(SourceSequence.class);
         EasyMock.expect(source.getCurrent(inSid)).andReturn(sseq);
-        Identifier sid = control.createMock(Identifier.class);
-        EasyMock.expect(sseq.getIdentifier()).andReturn(sid);
-        EasyMock.expect(sid.getValue()).andReturn("S1").times(2);
         sseq.setTarget(EasyMock.isA(EndpointReferenceType.class));
         EasyMock.expectLastCall();
         
         control.replay();
         assertSame(sseq, manager.getSequence(inSid, message, maps));
-        assertSame(manager.getSourceSequence(sid), sseq);
         control.verify();
     }
 }

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/JaxwsInterceptorRemover.java Thu Nov 16 04:30:24 2006
@@ -50,7 +50,7 @@
         while (it.hasNext()) {
             PhaseInterceptor pi = (PhaseInterceptor)it.next();
             if (LogicalHandlerInterceptor.class.getName().equals(pi.getId())) {
-                chain.remove(pi);
+                // chain.remove(pi);
                 break;
             }
         }
@@ -66,7 +66,7 @@
         while (it.hasNext()) {
             PhaseInterceptor pi = (PhaseInterceptor)it.next();
             if (StreamHandlerInterceptor.class.getName().equals(pi.getId())) {
-                chain.remove(pi);
+                //chain.remove(pi);
                 break;
             }
         }

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java?view=diff&rev=475711&r1=475710&r2=475711
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Thu Nov 16 04:30:24 2006
@@ -42,15 +42,16 @@
 public class SequenceTest extends ClientServerTestBase {
 
     private static final Logger LOG = Logger.getLogger(SequenceTest.class.getName());
-    // private static final String APP_NAMESPACE =
-    // "http://celtix.objectweb.org/greeter_control";
+    // private static final String APP_NAMESPACE ="http://celtix.objectweb.org/greeter_control";
     // private static final String GREETMEONEWAY_ACTION = APP_NAMESPACE +
-    // "/types/Greeter/greetMeOneWay";
+    //     "/types/Greeter/greetMeOneWay";
     // private static final String GREETME_ACTION = APP_NAMESPACE +
-    // "/types/Greeter/greetMe";
+    //     "/types/Greeter/greetMe";
     // private static final String GREETME_RESPONSE_ACTION = GREETME_ACTION +
-    // "Response";
+    //     "Response";
     private static final String GREETMEONEWAY_ACTION = null;
+    private static final String GREETME_ACTION = null;
+    private static final String GREETME_RESPONSE_ACTION = null;
 
     private Bus controlBus;
     private Control control;
@@ -63,6 +64,7 @@
     private boolean doTestOnewayDeferredAnonymousAcks = true;
     private boolean doTestOnewayDeferredNonAnonymousAcks = true;
     private boolean doTestOnewayAnonymousAcksSequenceLength1 = true;
+    private boolean doTestTwowayNonAnonymous = true;
 
     public static void main(String[] args) {
         junit.textui.TestRunner.run(SequenceTest.class);
@@ -86,25 +88,20 @@
         SpringBusFactory bf = new SpringBusFactory();
         controlBus = bf.createBus();
         bf.setDefaultBus(controlBus);
-        LOG.fine("Initialised control bus.");
         controlBus = new SpringBusFactory().getDefaultBus();
 
         ControlService service = new ControlService();
-        LOG.fine("Created ControlService.");
         control = service.getControlPort();
-        LOG.fine("Created Control.");
     }
     
     public void tearDown() {
         if (null != greeter) {
             assertTrue("Failed to stop greeter.", control.stopGreeter());            
             greeterBus.shutdown(true);
-            LOG.fine("Shutdown greeter bus.");
             greeterBus = null;
         }
         if (null != control) {               
             controlBus.shutdown(true);
-            LOG.fine("Shutdown control bus.");
         }
     }
 
@@ -268,6 +265,48 @@
         mf.verifyLastMessage(new boolean[] {false, false, false, false, false, false}, false);
         mf.verifyAcknowledgements(new boolean[] {false, true, false, false, true, false}, false);
     }
+    
+    public void testTwowayNonAnonymous() throws Exception {
+        if (!doTestTwowayNonAnonymous) {
+            return;
+        }
+        setupGreeter("org/apache/cxf/systest/ws/rm/twoway.xml");
+
+        greeter.greetMe("one");
+        greeter.greetMe("two");
+        greeter.greetMe("three");
+
+        // CreateSequence and three greetMe messages
+        // TODO there should be partial responses to the decoupled responses!
+
+        // awaitMessages(6, 6);
+        
+        MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+        
+        
+        mf.verifyMessages(4, true);
+        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), 
+                                                 GREETME_ACTION,
+                                                 GREETME_ACTION, 
+                                                 GREETME_ACTION};
+        mf.verifyActions(expectedActions, true);
+        mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"}, true);
+        mf.verifyLastMessage(new boolean[] {false, false, false, false}, true);
+        mf.verifyAcknowledgements(new boolean[] {false, false, true, true}, true);
+
+        // createSequenceResponse plus 3 greetMeResponse messages plus
+        // one partial response for each of the four messages
+
+        mf.verifyMessages(8, false);
+        expectedActions = new String[] {null, RMConstants.getCreateSequenceResponseAction(), 
+                                        null, GREETME_RESPONSE_ACTION, 
+                                        null, GREETME_RESPONSE_ACTION, 
+                                        null, GREETME_RESPONSE_ACTION};
+        mf.verifyActions(expectedActions, false);
+        mf.verifyMessageNumbers(new String[] {null, null, null, "1", null, "2", null, "3"}, false);
+        mf.verifyLastMessage(new boolean[8], false);
+        mf.verifyAcknowledgements(new boolean[] {false, false, false, true, false, true, false, true}, false);
+    }
 
 
     // --- test utilities ---
@@ -277,7 +316,7 @@
         SpringBusFactory bf = new SpringBusFactory();
         greeterBus = bf.createBus(cfgResource);
         bf.setDefaultBus(greeterBus);
-        LOG.fine("Initialised greeter bus.");
+        LOG.fine("Initialised greeter bus with configuration: " + cfgResource);
 
         outRecorder = new OutMessageRecorder();
         greeterBus.getOutInterceptors().add(new JaxwsInterceptorRemover());

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml?view=auto&rev=475711
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml Thu Nov 16 04:30:24 2006
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:wsrm-mgmt="http://cxf.apache.org/ws/rm/manager"
+       xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
+       xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
+       xsi:schemaLocation="
+http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+    
+    <bean name="{http://cxf.apache.org/greeter_control}GreeterPort.http-conduit" abstract="true">
+        <property name="client">
+            <value>
+                <http-conf:client DecoupledEndpoint="http://localhost:9998/decoupled_endpoint"/>
+            </value>
+        </property>
+    </bean>
+    
+    <import resource="rminterceptors.xml"/>  
+
+</beans>
\ No newline at end of file

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml