You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by eg...@apache.org on 2009/05/12 18:21:35 UTC

svn commit: r773965 - in /cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ systests/src/test/java/org/apache/cxf/systest/ws/rm/

Author: eglynn
Date: Tue May 12 16:21:34 2009
New Revision: 773965

URL: http://svn.apache.org/viewvc?rev=773965&view=rev
Log:
Fixes to allow the JAX-WS Dispatch client work with WS-RM.

Added:
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqOne.xml
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqThree.xml
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqTwo.xml
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqOne.xml
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqThree.xml
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqTwo.xml
Modified:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/rminterceptors.xml

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java?rev=773965&r1=773964&r2=773965&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java Tue May 12 16:21:34 2009
@@ -88,6 +88,25 @@
     }
     public void handleMessage(SoapMessage message) throws Fault {
         SOAPMessage saaj = message.getContent(SOAPMessage.class);
+
+        try { 
+            if (message.hasHeaders()
+                && saaj != null 
+                && saaj.getSOAPPart().getEnvelope().getHeader() == null) {
+
+                // creating an empty SOAPHeader at this point in the
+                // pre-existing SOAPMessage avoids the <soap:body> and 
+                // <soap:header> appearing in reverse order when the envolope
+                // is written to the wire
+                //
+                saaj.getSOAPPart().getEnvelope().addHeader();
+            }
+        } catch (SOAPException e) {
+            throw new SoapFault(new Message("SOAPEXCEPTION", BUNDLE), 
+                                e,
+                                message.getVersion().getSender());
+        }    
+
         if (saaj == null) {
             SoapVersion version = message.getVersion();
             try {

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java?rev=773965&r1=773964&r2=773965&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java Tue May 12 16:21:34 2009
@@ -89,6 +89,9 @@
 
 public class DispatchImpl<T> implements Dispatch<T>, BindingProvider {
     private static final Logger LOG = LogUtils.getL7dLogger(DispatchImpl.class);
+    private static final String DISPATCH_NS = "http://cxf.apache.org/jaxws/dispatch";
+    private static final String INVOKE_NAME = "Invoke";
+    private static final String INVOKE_ONEWAY_NAME = "InvokeOneWay";
     
     private final Binding binding;
     private final EndpointReferenceBuilder builder;
@@ -142,13 +145,12 @@
     }
     
     private void addInvokeOperation(boolean oneWay) {
-        String name = oneWay ? "InvokeOneWay" : "Invoke";
+        String name = oneWay ? INVOKE_ONEWAY_NAME : INVOKE_NAME;
             
-        String ns = "http://cxf.apache.org/jaxws/dispatch";
         ServiceInfo info = client.getEndpoint().getEndpointInfo().getService();
         OperationInfo opInfo = info.getInterface()
-            .addOperation(new QName(ns, name));
-        MessageInfo mInfo = opInfo.createMessage(new QName(ns, name + "Request"), Type.INPUT);
+            .addOperation(new QName(DISPATCH_NS, name));
+        MessageInfo mInfo = opInfo.createMessage(new QName(DISPATCH_NS, name + "Request"), Type.INPUT);
         opInfo.setInput(name + "Request", mInfo);
         MessagePartInfo mpi = mInfo.addMessagePart("parameters");
         if (context == null) {
@@ -157,7 +159,7 @@
         mpi.setElement(true);
 
         if (!oneWay) {
-            mInfo = opInfo.createMessage(new QName(ns, name + "Response"), Type.OUTPUT);
+            mInfo = opInfo.createMessage(new QName(DISPATCH_NS, name + "Response"), Type.OUTPUT);
             opInfo.setOutput(name + "Response", mInfo);
             mpi = mInfo.addMessagePart("parameters");
             mpi.setElement(true);
@@ -317,8 +319,14 @@
         }
 
         public void handleMessage(SoapMessage message) throws Fault {
+            if (!isDispatch(message.getMessage())) {
+                LOG.info("Dispatch interceptor bailing on unrelated message");
+                return;
+            }
+
             MessageContentsList list = (MessageContentsList)message.getContent(List.class);
             Object o = list.get(0);
+            
             SOAPMessage soapMessage = null;
             
             if (o instanceof SOAPMessage) {
@@ -379,6 +387,11 @@
         }
 
         public void handleMessage(SoapMessage message) throws Fault {
+            if (!isDispatch(message.getMessage())) {
+                LOG.info("Dispatch interceptor bailing on unrelated message");
+                return;
+            }
+
             SOAPMessage m = message.getContent(SOAPMessage.class);
             MessageContentsList list = (MessageContentsList)message.getContent(List.class); 
             if (list == null) {
@@ -410,4 +423,13 @@
             list.set(0, o);
         }
     }
+
+    protected static boolean isDispatch(org.apache.cxf.message.Message message) {   
+        BindingOperationInfo boi = message.getExchange().get(BindingOperationInfo.class);
+        return boi != null 
+               && DISPATCH_NS.equals(boi.getName().getNamespaceURI())
+               && (INVOKE_NAME.equals(boi.getName().getLocalPart()) 
+                   || INVOKE_ONEWAY_NAME.equals(boi.getName().getLocalPart()));
+    }
+
 }

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java?rev=773965&r1=773964&r2=773965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java Tue May 12 16:21:34 2009
@@ -19,6 +19,8 @@
 
 package org.apache.cxf.systest.ws.rm;
 
+import java.io.InputStream;
+import java.io.StringWriter;
 import java.math.BigInteger;
 import java.util.Iterator;
 import java.util.List;
@@ -26,8 +28,22 @@
 import java.util.concurrent.Executors;
 import java.util.logging.Logger;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+
 import javax.xml.ws.WebServiceException;
 
+import org.w3c.dom.Document;
+
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.binding.soap.Soap11;
@@ -41,6 +57,7 @@
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.GreeterService;
 import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.jaxws.DispatchImpl;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.AbstractPhaseInterceptor;
 import org.apache.cxf.phase.Phase;
@@ -60,6 +77,7 @@
 import org.apache.cxf.ws.rm.RMOutInterceptor;
 import org.apache.cxf.ws.rm.RMProperties;
 import org.apache.cxf.ws.rm.soap.RMSoapInterceptor;
+
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -90,6 +108,7 @@
     private Greeter greeter;
     private OutMessageRecorder outRecorder;
     private InMessageRecorder inRecorder;
+    private Dispatch<DOMSource> dispatch;
 
 
     @BeforeClass
@@ -107,7 +126,7 @@
     @After
     public void tearDown() throws Exception {
         try {
-            stopGreeter();
+            stopClient();
             stopControl();
         } catch (Throwable t) {
             //ignore
@@ -169,6 +188,23 @@
         greeter.greetMeOneWay("twice");
         greeter.greetMeOneWay("thrice");
 
+        verifyOnewayAnonymousAcks(GREETMEONEWAY_ACTION);
+    }
+
+    @Test
+    public void testOnewayAnonymousAcksDispatch() throws Exception {
+        init("org/apache/cxf/systest/ws/rm/rminterceptors.xml", false, true);
+
+        dispatch.invokeOneWay(getDOMRequest("One", true));
+        dispatch.invokeOneWay(getDOMRequest("Two", true));
+        dispatch.invokeOneWay(getDOMRequest("Three", true));
+
+        String dispatchStyleAction = 
+            "http://cxf.apache.org/jaxws/dispatch/Greeter/InvokeOneWayRequest";
+        verifyOnewayAnonymousAcks(dispatchStyleAction);
+    }
+
+    private void verifyOnewayAnonymousAcks(String greeterAction) throws Exception {
         // three application messages plus createSequence
 
         awaitMessages(4, 4);
@@ -176,8 +212,10 @@
         MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
 
         mf.verifyMessages(4, true);
-        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), GREETMEONEWAY_ACTION,
-                                                 GREETMEONEWAY_ACTION, GREETMEONEWAY_ACTION};
+        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(),
+                                                 greeterAction,
+                                                 greeterAction,
+                                                 greeterAction};
         mf.verifyActions(expectedActions, true);
         mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"}, true);
 
@@ -346,7 +384,8 @@
         MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
         
         mf.verifyMessages(4, true);
-        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), 
+
+        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(),
                                                  GREETMEONEWAY_ACTION,
                                                  GREETMEONEWAY_ACTION, 
                                                  GREETMEONEWAY_ACTION};
@@ -383,6 +422,24 @@
         assertEquals("TWO", greeter.greetMe("two"));
         assertEquals("THREE", greeter.greetMe("three"));
 
+        verifyTwowayNonAnonymous(GREETME_ACTION);
+    }
+
+    @Test
+    public void testTwowayNonAnonymousDispatch() throws Exception {
+        init("org/apache/cxf/systest/ws/rm/rminterceptors.xml", true, true);
+
+        verifyDOMResponse(dispatch.invoke(getDOMRequest("One")), "ONE");
+        verifyDOMResponse(dispatch.invoke(getDOMRequest("Two")), "TWO");
+        verifyDOMResponse(dispatch.invoke(getDOMRequest("Three")), "THREE");
+
+        String dispatchStyleAction = 
+            "http://cxf.apache.org/jaxws/dispatch/Greeter/InvokeRequest";
+        verifyTwowayNonAnonymous(dispatchStyleAction);
+    }
+
+    private void verifyTwowayNonAnonymous(String greeterAction) throws Exception {
+    
         // CreateSequence and three greetMe messages
         // TODO there should be partial responses to the decoupled responses!
 
@@ -393,9 +450,9 @@
         
         mf.verifyMessages(4, true);
         String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), 
-                                                 GREETME_ACTION,
-                                                 GREETME_ACTION, 
-                                                 GREETME_ACTION};
+                                                 greeterAction,
+                                                 greeterAction, 
+                                                 greeterAction};
         mf.verifyActions(expectedActions, true);
         mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"}, true);
         mf.verifyLastMessage(new boolean[] {false, false, false, false}, true);
@@ -1014,7 +1071,7 @@
             for (int i = 0; i < clients.length; i++) {
                 greeter = clients[i].greeter;
                 greeterBus = clients[i].greeterBus;
-                stopGreeter();                
+                stopClient();                
             }
             greeter = null;
         }        
@@ -1103,7 +1160,7 @@
             for (int i = 0; i < clients.length; i++) {
                 greeter = clients[i].greeter;
                 greeterBus = clients[i].greeterBus;
-                stopGreeter();                
+                stopClient();                
             }
             greeter = null;
         }        
@@ -1208,14 +1265,30 @@
     }
 
     private void init(String cfgResource, boolean useDecoupledEndpoint) {
-        init(cfgResource, useDecoupledEndpoint, null);
+        init(cfgResource, useDecoupledEndpoint, false, null);
     }
-    
+
     private void init(String cfgResource, boolean useDecoupledEndpoint, Executor executor) {
+        init(cfgResource, useDecoupledEndpoint, false, executor);
+    }
+
+    private void init(String cfgResource, boolean useDecoupledEndpoint, boolean useDispatchClient) {
+        init(cfgResource, useDecoupledEndpoint, useDispatchClient, null);
+    }
+    
+    private void init(String cfgResource, 
+                      boolean useDecoupledEndpoint, 
+                      boolean useDispatchClient, 
+                      Executor executor) {
         
         SpringBusFactory bf = new SpringBusFactory();
         initControl(bf, cfgResource);
-        initGreeter(bf, cfgResource, useDecoupledEndpoint, executor);
+        initGreeterBus(bf, cfgResource);
+        if (useDispatchClient) {
+            initDispatch(useDecoupledEndpoint);
+        } else {
+            initProxy(useDecoupledEndpoint, executor);
+        }
     }
     
     private void initControl(SpringBusFactory bf, String cfgResource) {
@@ -1227,9 +1300,17 @@
         
         assertTrue("Failed to start greeter", control.startGreeter(cfgResource));        
     }
+
+    private void initGreeter(SpringBusFactory bf,
+                             String cfgResource,
+                             boolean useDecoupledEndpoint,
+                             Executor executor) {
+        initGreeterBus(bf, cfgResource);
+        initProxy(useDecoupledEndpoint, executor);
+    }
     
-    private void initGreeter(SpringBusFactory bf, String cfgResource, 
-                             boolean useDecoupledEndpoint, Executor executor) {
+    private void initGreeterBus(SpringBusFactory bf,
+                                String cfgResource) {
         greeterBus = bf.createBus(cfgResource);
         BusFactory.setDefaultBus(greeterBus);
         LOG.fine("Initialised greeter bus with configuration: " + cfgResource);
@@ -1238,29 +1319,46 @@
         greeterBus.getOutInterceptors().add(outRecorder);
         inRecorder = new InMessageRecorder();
         greeterBus.getInInterceptors().add(inRecorder);
-        
+    }
+
+    private void initDispatch(boolean useDecoupledEndpoint) {
+        GreeterService gs = new GreeterService();
+        dispatch = gs.createDispatch(GreeterService.GreeterPort,
+                                     DOMSource.class, 
+                                     Service.Mode.MESSAGE);
+        dispatch.getRequestContext().put(
+                                     BindingProvider.SOAPACTION_USE_PROPERTY, 
+                                     false);
+
+        if (useDecoupledEndpoint) {
+            initDecoupledEndpoint(((DispatchImpl)dispatch).getClient());
+        }
+    }
+
+    private void initProxy(boolean useDecoupledEndpoint, Executor executor) {        
         GreeterService gs = new GreeterService();
 
         if (null != executor) {
             gs.setExecutor(executor);
         }
-
+   
         greeter = gs.getGreeterPort();
         LOG.fine("Created greeter client.");
 
         ConnectionHelper.setKeepAliveConnection(greeter, true);
 
-        if (!useDecoupledEndpoint) {
-            return;
+        if (useDecoupledEndpoint) {
+            initDecoupledEndpoint(ClientProxy.getClient(greeter));
         }
+    }
 
+    private void initDecoupledEndpoint(Client c) {
         // programatically configure decoupled endpoint that is guaranteed to
         // be unique across all test cases
         
         decoupledEndpointPort--;
         decoupledEndpoint = "http://localhost:" + decoupledEndpointPort + "/decoupled_endpoint";
 
-        Client c = ClientProxy.getClient(greeter);
         HTTPConduit hc = (HTTPConduit)(c.getConduit());
         HTTPClientPolicy cp = hc.getClient();
         cp.setDecoupledEndpoint(decoupledEndpoint);
@@ -1268,18 +1366,24 @@
         LOG.fine("Using decoupled endpoint: " + cp.getDecoupledEndpoint());
     }
     
-    private void stopGreeter() {
+    private void stopClient() {
         if (null != greeterBus) {
             
             //ensure we close the decoupled destination of the conduit,
             //so that release the port if the destination reference count hit zero
-            ClientProxy.getClient(greeter).getConduit().close();
+            if (greeter != null) {
+                ClientProxy.getClient(greeter).getConduit().close();
+            }
+            if (dispatch != null) {
+                ((DispatchImpl)dispatch).getClient().getConduit().close();
+            }
             greeterBus.shutdown(true);
             greeter = null;
+            dispatch = null;
             greeterBus = null;
         }
     }
-    
+
     private void stopControl() {
         if (null != control) {  
             assertTrue("Failed to stop greeter", control.stopGreeter(null));
@@ -1315,4 +1419,29 @@
             }
         }
     }
+
+    private DOMSource getDOMRequest(String n) throws Exception {
+        return getDOMRequest(n, false);
+    }
+
+    private DOMSource getDOMRequest(String n, boolean oneway) throws Exception {
+        InputStream is = getClass().getResourceAsStream((oneway ? "oneway" : "twoway") + "Req" + n + ".xml");
+         
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        DocumentBuilder builder = factory.newDocumentBuilder();
+        Document newDoc = builder.parse(is);
+        return new DOMSource(newDoc);
+    }
+
+    private static String convertToString(DOMSource domSource) throws TransformerException {
+        Transformer xformer = TransformerFactory.newInstance().newTransformer();
+        StringWriter output = new StringWriter();
+        xformer.transform(domSource, new StreamResult(output));
+        return output.toString();
+    }
+
+    private void verifyDOMResponse(DOMSource domResponse, String expected) throws Exception {
+        assertTrue(convertToString(domResponse).indexOf(expected) != -1);
+    }
 }

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqOne.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqOne.xml?rev=773965&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqOne.xml (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqOne.xml Tue May 12 16:21:34 2009
@@ -0,0 +1,7 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <greetMeOneWay xmlns="http://cxf.apache.org/greeter_control/types">
+      <requestType>once</requestType>
+    </greetMeOneWay>
+  </soap:Body>
+</soap:Envelope>

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqThree.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqThree.xml?rev=773965&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqThree.xml (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqThree.xml Tue May 12 16:21:34 2009
@@ -0,0 +1,7 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <greetMeOneWay xmlns="http://cxf.apache.org/greeter_control/types">
+      <requestType>thrice</requestType>
+    </greetMeOneWay>
+  </soap:Body>
+</soap:Envelope>

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqTwo.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqTwo.xml?rev=773965&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqTwo.xml (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/onewayReqTwo.xml Tue May 12 16:21:34 2009
@@ -0,0 +1,7 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+  <soap:Body>
+    <greetMeOneWay xmlns="http://cxf.apache.org/greeter_control/types">
+      <requestType>twice</requestType>
+    </greetMeOneWay>
+  </soap:Body>
+</soap:Envelope>

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/rminterceptors.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/rminterceptors.xml?rev=773965&r1=773964&r2=773965&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/rminterceptors.xml (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/rminterceptors.xml Tue May 12 16:21:34 2009
@@ -41,6 +41,7 @@
                 <ref bean="mapCodec"/>
                 <ref bean="rmLogicalIn"/>
                 <ref bean="rmCodec"/>
+                <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
             </list>
         </property>
         <property name="inFaultInterceptors">
@@ -49,6 +50,7 @@
                 <ref bean="mapCodec"/>
                 <ref bean="rmLogicalIn"/>
                 <ref bean="rmCodec"/>
+                <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
             </list>
         </property>
         <property name="outInterceptors">
@@ -57,6 +59,7 @@
                 <ref bean="mapCodec"/>
                 <ref bean="rmLogicalOut"/>
                 <ref bean="rmCodec"/>
+                <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
             </list>
         </property>
         <property name="outFaultInterceptors">
@@ -65,7 +68,8 @@
                 <ref bean="mapCodec"/>
                 <ref bean="rmLogicalOut"/>
                 <ref bean="rmCodec"/>
+                <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
             </list>
         </property>
     </bean>
-</beans>
\ No newline at end of file
+</beans>

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqOne.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqOne.xml?rev=773965&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqOne.xml (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqOne.xml Tue May 12 16:21:34 2009
@@ -0,0 +1,7 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+   <soap:Body>
+      <greetMe xmlns="http://cxf.apache.org/greeter_control/types">
+         <requestType>one</requestType>
+      </greetMe>
+   </soap:Body>
+</soap:Envelope>

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqThree.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqThree.xml?rev=773965&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqThree.xml (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqThree.xml Tue May 12 16:21:34 2009
@@ -0,0 +1,7 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+   <soap:Body>
+      <greetMe xmlns="http://cxf.apache.org/greeter_control/types">
+         <requestType>three</requestType>
+      </greetMe>
+   </soap:Body>
+</soap:Envelope>

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqTwo.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqTwo.xml?rev=773965&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqTwo.xml (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twowayReqTwo.xml Tue May 12 16:21:34 2009
@@ -0,0 +1,7 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+   <soap:Body>
+      <greetMe xmlns="http://cxf.apache.org/greeter_control/types">
+         <requestType>two</requestType>
+      </greetMe>
+   </soap:Body>
+</soap:Envelope>