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/20 16:37:21 UTC

svn commit: r477226 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/phase/ rt/core/src/main/java/org/apache/cxf/endpoint/ rt/core/src/main/java/org/apache/cxf/interceptor/ rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/ rt/ws/rm/src/main/java/...

Author: andreasmyth
Date: Mon Nov 20 07:37:17 2006
New Revision: 477226

URL: http://svn.apache.org/viewvc?view=rev&rev=477226
Log:
[JIRA [JIRA CXF-138, CXF-140] Support and system test for server side originated TerminateSequence requests and client side originated SequenceAcknowlegment requests.
Involves temporarily (i.e. between inbound RM Soap interceptor and MAPAggregator) adjusting the REQUESTOR_ROLE in order to unmarshal the body of a server side originated TerminateSequence message. 

Added:
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml   (with props)
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml   (with props)
Modified:
    incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
    incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
    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/RMInInterceptor.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/RMMessageConstants.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/SourceSequence.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/SequenceTest.java

Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java Mon Nov 20 07:37:17 2006
@@ -141,8 +141,8 @@
             try {
                 Interceptor currentInterceptor = iterator.next();
                
-                if (LOG.isLoggable(Level.INFO)) {
-                    LOG.info("Invoking handleMessage on interceptor " + currentInterceptor);
+                if (LOG.isLoggable(Level.FINE)) {
+                    LOG.fine("Invoking handleMessage on interceptor " + currentInterceptor);
                 }
                 currentInterceptor.handleMessage(message);
                 

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Mon Nov 20 07:37:17 2006
@@ -219,6 +219,7 @@
         PhaseManager pm = bus.getExtension(PhaseManager.class);
         PhaseInterceptorChain chain = new PhaseInterceptorChain(pm.getInPhases());
         message.setInterceptorChain(chain);
+        message.getExchange().put(Endpoint.class, endpoint);
         
         List<Interceptor> il = bus.getInInterceptors();
         if (LOG.isLoggable(Level.FINE)) {
@@ -261,7 +262,7 @@
         }
     }
 
-    private Conduit getConduit() {        
+    protected Conduit getConduit() {        
         if (null == initedConduit) {
             EndpointInfo ei = endpoint.getEndpointInfo();
             String transportID = ei.getTransportId();

Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AbstractInDatabindingInterceptor.java Mon Nov 20 07:37:17 2006
@@ -54,7 +54,7 @@
         .getBundle(AbstractInDatabindingInterceptor.class);
 
     protected boolean isRequestor(Message message) {
-        return Boolean.TRUE.equals(message.containsKey(Message.REQUESTOR_ROLE));
+        return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
     }
 
     protected DataReader getDataReader(Message message, Class<?> input) {

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=477226&r1=477225&r2=477226
==============================================================================
--- 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 Mon Nov 20 07:37:17 2006
@@ -19,9 +19,8 @@
 
 package org.apache.cxf.ws.rm;
 
+
 import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -33,16 +32,13 @@
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.ClientImpl;
 import org.apache.cxf.endpoint.Endpoint;
-import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.PhaseInterceptorChain;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.transport.Conduit;
-import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
-import org.apache.cxf.ws.addressing.JAXWSAConstants;
 import org.apache.cxf.ws.addressing.RelatesToType;
-import org.apache.cxf.ws.addressing.VersionTransformer;
 import org.apache.cxf.ws.addressing.v200408.EndpointReferenceType;
 import org.apache.cxf.ws.rm.manager.SourcePolicyType;
 
@@ -67,8 +63,7 @@
         return reliableEndpoint;
     }
 
-    void acknowledge(DestinationSequence ds) throws IOException {
-        
+    void acknowledge(DestinationSequence ds) throws IOException {        
         if (RMConstants.getAnonymousAddress().equals(ds.getAcksTo().getAddress().getValue())) {
             LOG.log(Level.WARNING, "STANDALONE_ANON_ACKS_NOT_SUPPORTED");
             return;
@@ -76,20 +71,29 @@
         
         OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
             .getOperation(RMConstants.getSequenceAckOperationName());
+
+        /*
         Map<String, Object> requestContext = new HashMap<String, Object>();
         AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
-        maps.setTo(VersionTransformer.convert(ds.getAcksTo()).getAddress());        
-        maps.setReplyTo(reliableEndpoint.getTransportDestination().getAddress());
+        maps.setTo(VersionTransformer.convert(ds.getAcksTo()).getAddress()); 
+        
+        if (null != reliableEndpoint.getTransportDestination()) {
+            maps.setReplyTo(reliableEndpoint.getTransportDestination().getAddress());
+        } else {
+            maps.setReplyTo(RMUtils.createNoneReference());
+        }
         requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
         Map<String, Object> context = CastUtils.cast(
             Collections.singletonMap(Client.REQUEST_CONTEXT, requestContext),
             String.class,  Object.class);
-        invoke(oi, new Object[] {}, context);
+        */
+        invoke(oi, new Object[] {}, null);
     }
     
     void terminate(SourceSequence ss) throws IOException {
         OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
             .getOperation(RMConstants.getTerminateSequenceOperationName());
+        /*
         Map<String, Object> requestContext = new HashMap<String, Object>();
         AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
         maps.setTo(ss.getTarget().getAddress());
@@ -98,17 +102,18 @@
         } else {
             maps.setReplyTo(RMUtils.createNoneReference());
         }
-        LOG.fine("Using explicit maps: " + maps.toString());
         requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
         Map<String, Object> context = CastUtils.cast(
             Collections.singletonMap(Client.REQUEST_CONTEXT, requestContext),
             String.class,  Object.class);
+        */
         TerminateSequenceType ts = RMUtils.getWSRMFactory().createTerminateSequenceType();
         ts.setIdentifier(ss.getIdentifier());
-        invoke(oi, new Object[] {ts}, context);
+        invoke(oi, new Object[] {ts}, null);
     }
 
-    public CreateSequenceResponseType createSequence(org.apache.cxf.ws.addressing.EndpointReferenceType to, 
+    public CreateSequenceResponseType createSequence(
+                        org.apache.cxf.ws.addressing.EndpointReferenceType to, 
                         EndpointReferenceType defaultAcksTo,
                         RelatesToType relatesTo) throws IOException {
         
@@ -146,6 +151,7 @@
         
         OperationInfo oi = reliableEndpoint.getService().getServiceInfo().getInterface()
             .getOperation(RMConstants.getCreateSequenceOperationName());
+        
         return (CreateSequenceResponseType)invoke(oi, new Object[] {create}, null);
     }
     
@@ -174,12 +180,8 @@
         Endpoint endpoint = reliableEndpoint.getEndpoint();
         BindingInfo bi = reliableEndpoint.getBindingInfo();
         
-        if (null == reliableEndpoint.getConduit()) {
-            LOG.severe("No conduit to available.");
-            return null;
-        }
-        Client client = new RMClient(bus, endpoint, reliableEndpoint.getConduit());
-       
+        Client client = new RMClient(bus, endpoint);
+        
         BindingOperationInfo boi = bi.getOperation(oi);
         try {
             Object[] result = client.invoke(boi, params, context);
@@ -194,10 +196,11 @@
     }
     
     class RMClient extends ClientImpl {
-        RMClient(Bus bus, Endpoint endpoint, Conduit conduit) {
-            super(bus, endpoint, conduit);
+        
+        RMClient(Bus bus, Endpoint endpoint) {
+            super(bus, endpoint);    
         }
-
+        
         @Override
         protected PhaseInterceptorChain setupInterceptorChain() {
             Endpoint originalEndpoint = getEndpoint();
@@ -207,7 +210,31 @@
             return chain;
         }
         
-        
+        @Override
+        protected synchronized Conduit getConduit() {
+            Conduit c = null;
+            
+            if (null != Proxy.this.reliableEndpoint.getApplicationReplyTo()) {
+                String address = Proxy.this.reliableEndpoint.getApplicationReplyTo()
+                    .getAddress().getValue();
+                getEndpoint().getEndpointInfo().setAddress(address);
+                c = super.getConduit();
+            } else {
+                Endpoint oe = getEndpoint();
+                setEndpoint(Proxy.this.reliableEndpoint.getApplicationEndpoint());
+                c = super.getConduit();
+                setEndpoint(oe);
+            }
+           
+            return c;
+        }
+
+        @Override
+        public void onMessage(Message m) {
+            // TODO Auto-generated method stub
+            m.getExchange().put(Endpoint.class, Proxy.this.reliableEndpoint.getApplicationEndpoint());
+            super.onMessage(m);
+        }
         
         
     }

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=477226&r1=477225&r2=477226
==============================================================================
--- 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 Mon Nov 20 07:37:17 2006
@@ -167,12 +167,8 @@
      * @param message the current Message
      * @return the endpoint
      */
-    public static Endpoint getEndpoint(Message message) {
-        if (isRequestor(message)) {
-            return message.getExchange().get(Endpoint.class);
-        } else {
-            return message.getExchange().get(Endpoint.class);
-        }
+    public static Endpoint getEndpoint(Message message) {        
+        return message.getExchange().get(Endpoint.class);
     }
     
     private static String getRMPropertiesKey(boolean outbound) {

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=477226&r1=477225&r2=477226
==============================================================================
--- 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 Mon Nov 20 07:37:17 2006
@@ -41,7 +41,6 @@
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.service.model.UnwrappedOperationInfo;
-import org.apache.cxf.transport.Conduit;
 import org.apache.cxf.ws.addressing.wsdl.UsingAddressing;
 
 public class RMEndpoint {
@@ -57,8 +56,7 @@
         
     private final RMManager manager;
     private final Endpoint applicationEndpoint;
-    private Conduit conduit;
-    private org.apache.cxf.transport.Destination transportDestination;
+    private org.apache.cxf.ws.addressing.EndpointReferenceType applicationReplyTo;
     private Source source;
     private Destination destination;
     private Service service;
@@ -157,27 +155,24 @@
         this.source = source;
     } 
     
-    /** 
-     * @return Returns the conduit.
-     */
-    public Conduit getConduit() {
-        return conduit;
-    }
-    
-    /** 
-     * @return Returns the conduit.
-     */
-    public org.apache.cxf.transport.Destination getTransportDestination() {
-        return transportDestination;
-    }
-    
-    void initialise(Conduit c, org.apache.cxf.transport.Destination d) {
-        conduit = c;
-        transportDestination = d;
+    /**
+     * Returns the adress to which to send CreateSequenceResponse, TerminateSequence
+     * and LastMessage requests (i.e. the replyTo address for twaoway application
+     * messages).
+     * 
+     * @return the replyToAddress
+     */
+    org.apache.cxf.ws.addressing.EndpointReferenceType getApplicationReplyTo() {
+        return applicationReplyTo;
+    }
+  
+    void initialise(org.apache.cxf.ws.addressing.EndpointReferenceType replyTo) {  
+        applicationReplyTo = replyTo;
         createService();
         createEndpoint();
     }
     
+    
     void createService() {
         ServiceInfo si = new ServiceInfo();
         si.setName(SERVICE_NAME);
@@ -274,7 +269,7 @@
         operationInfo = ii.addOperation(RMConstants.getTerminateSequenceOperationName());
         messageInfo = operationInfo.createMessage(RMConstants.getTerminateSequenceOperationName());
         operationInfo.setInput(messageInfo.getName().getLocalPart(), messageInfo);
-        partInfo = messageInfo.addMessagePart("createResponse");
+        partInfo = messageInfo.addMessagePart("terminate");
         partInfo.setElementQName(RMConstants.getTerminateSequenceOperationName());
         partInfo.setElement(true);
         partInfo.setTypeClass(TerminateSequenceType.class);
@@ -282,6 +277,10 @@
         unwrappedOperationInfo = new UnwrappedOperationInfo(operationInfo);
         operationInfo.setUnwrappedOperation(unwrappedOperationInfo);
         unwrappedOperationInfo.setInput(operationInfo.getInputName(), unwrappedMessageInfo);
+        partInfo = unwrappedMessageInfo.addMessagePart("terminate");
+        partInfo.setElementQName(RMConstants.getTerminateSequenceOperationName());
+        partInfo.setElement(true);
+        partInfo.setTypeClass(TerminateSequenceType.class);
         
         operationInfo = ii.addOperation(RMConstants.getSequenceAckOperationName());
         messageInfo = operationInfo.createMessage(RMConstants.getSequenceAckOperationName());

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java Mon Nov 20 07:37:17 2006
@@ -29,7 +29,6 @@
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.InterceptorChain;
-// import org.apache.cxf.jaxws.interceptors.WrapperClassInInterceptor;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.PhaseInterceptor;
 import org.apache.cxf.ws.addressing.AddressingProperties;
@@ -73,17 +72,22 @@
             LOG.fine("Action: " + action);
         }
         
+        Object originalRequestor = message.get(RMMessageConstants.ORIGINAL_REQUESTOR_ROLE);
+        if (null != originalRequestor) {
+            LOG.fine("Restoring original requestor role to: " + originalRequestor);
+            message.put(Message.REQUESTOR_ROLE, originalRequestor);
+        }
+        
         // Destination destination = getManager().getDestination(message);
         // RMEndpoint rme = getManager().getReliableEndpoint(message);
         // Servant servant = new Servant(rme);
-        
 
         if (RMConstants.getCreateSequenceAction().equals(action)
             || RMConstants.getCreateSequenceResponseAction().equals(action)
             || RMConstants.getTerminateSequenceAction().equals(action)) {
+
             InterceptorChain chain = message.getInterceptorChain();
-            ListIterator it = chain.getIterator();
-            LOG.fine("Trying to remove WrapperClassInInterceptor");
+            ListIterator it = chain.getIterator();            
             while (it.hasNext()) {
                 PhaseInterceptor pi = (PhaseInterceptor)it.next();
                 if ("org.apache.cxf.jaxws.interceptors.WrapperClassInInterceptor".equals(pi.getId())) {
@@ -92,10 +96,7 @@
                     break;
                 }
             }
-            
-            return;
-        } else if (RMConstants.getTerminateSequenceAction().equals(action)) {
-            // servant.terminateSequence(message);
+
             return;
         } else if (RMConstants.getSequenceAckAction().equals(action)) {
             processAcknowledgments(rmps);

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=477226&r1=477225&r2=477226
==============================================================================
--- 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 Mon Nov 20 07:37:17 2006
@@ -31,7 +31,6 @@
 import org.apache.cxf.Bus;
 import org.apache.cxf.endpoint.Endpoint;
 import org.apache.cxf.message.Message;
-import org.apache.cxf.transport.Conduit;
 import org.apache.cxf.ws.addressing.AddressingProperties;
 import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
 import org.apache.cxf.ws.addressing.RelatesToType;
@@ -96,26 +95,25 @@
     public Timer getTimer() {
         return timer;
     }
+    
+    public synchronized RMEndpoint getReliableEndpoint(Endpoint e) {
+        return reliableEndpoints.get(e);
+    }
 
     public synchronized RMEndpoint getReliableEndpoint(Message message) {
         Endpoint endpoint = RMContextUtils.getEndpoint(message);
         RMEndpoint rme = reliableEndpoints.get(endpoint);
         if (null == rme) {
             rme = new RMEndpoint(this, endpoint);
-            Conduit conduit = null;
-            org.apache.cxf.transport.Destination destination = null;
-            if (RMContextUtils.isServerSide(message)) {
+            org.apache.cxf.transport.Destination destination = message.getExchange().getDestination();
+            org.apache.cxf.ws.addressing.EndpointReferenceType replyTo = null;
+            if (null != destination) {
                 AddressingPropertiesImpl maps = RMContextUtils.retrieveMAPs(message, false, false);
-                destination = message.getExchange().getDestination();
-                try {
-                    conduit = destination.getBackChannel(message, null, maps.getReplyTo());
-                } catch (IOException ex) {
-                    ex.printStackTrace();
-                }
-            } else {
-                conduit = message.getExchange().getConduit();
+                replyTo = maps.getReplyTo();
             }
-            rme.initialise(conduit, destination);
+            
+            rme.initialise(replyTo);
+            
             reliableEndpoints.put(endpoint, rme);
         }
         return rme;
@@ -180,7 +178,8 @@
                 }
 
                 Proxy proxy = source.getReliableEndpoint().getProxy();
-                CreateSequenceResponseType createResponse = proxy.createSequence(to, acksTo, relatesTo);
+                CreateSequenceResponseType createResponse = 
+                    proxy.createSequence(to, acksTo, relatesTo);
                 Servant servant = source.getReliableEndpoint().getServant();
                 servant.createSequenceResponse(createResponse);
             } catch (IOException ex) {

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMMessageConstants.java Mon Nov 20 07:37:17 2006
@@ -36,6 +36,9 @@
     public static final String RM_PROPERTIES_INBOUND = 
         "org.apache.cxf.ws.rm.inbound";
     
+    public static final String ORIGINAL_REQUESTOR_ROLE =
+        "org.apache.cxf.client.original";
+    
     /**
      * Prevents instantiation. 
      */

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=477226&r1=477225&r2=477226
==============================================================================
--- 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 Mon Nov 20 07:37:17 2006
@@ -55,6 +55,10 @@
     public Object invoke(Exchange exchange, Object o) {
         LOG.fine("Invoking on RM Endpoint");
         OperationInfo oi = exchange.get(OperationInfo.class);
+        if (null == oi) {
+            LOG.fine("No operation info."); 
+            return null;
+        }
         if (RMConstants.getCreateSequenceOperationName().equals(oi.getName())) {
             try {
                 return Collections.singletonList(createSequence(exchange.getInMessage()));

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/SourceSequence.java Mon Nov 20 07:37:17 2006
@@ -153,6 +153,14 @@
             }
         }
     }
+    
+    /** 
+     * Returns the source associated with this source sequence.
+     * @return the source.
+     */
+    public Source getSource() {
+        return source;
+    }
 
     void setSource(Source s) {
         source = s;

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java Mon Nov 20 07:37:17 2006
@@ -51,8 +51,11 @@
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.interceptor.InterceptorChain;
 import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.ws.addressing.AddressingProperties;
 import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.apache.cxf.ws.addressing.soap.MAPCodec;
@@ -62,6 +65,7 @@
 import org.apache.cxf.ws.rm.RMContextUtils;
 import org.apache.cxf.ws.rm.RMEndpoint;
 import org.apache.cxf.ws.rm.RMManager;
+import org.apache.cxf.ws.rm.RMMessageConstants;
 import org.apache.cxf.ws.rm.RMProperties;
 import org.apache.cxf.ws.rm.SequenceAcknowledgement;
 import org.apache.cxf.ws.rm.SequenceType;
@@ -261,7 +265,7 @@
                     String headerURI = headerElement.getNamespaceURI();
                     String localName = headerElement.getLocalName();
                     if (RMConstants.getNamespace().equals(headerURI)) {
-                        LOG.log(Level.INFO, "decoding RM header {0}", localName);
+                        LOG.log(Level.FINE, "decoding RM header {0}", localName);
                         if (RMConstants.getSequenceName().equals(localName)) {
                             SequenceType s = decodeProperty(SequenceType.class,
                                                             headerElement,
@@ -321,7 +325,7 @@
                                            Marshaller marshaller)
         throws JAXBException {
         if (value != null) {
-            LOG.log(Level.INFO, "encoding " + value + " into RM header {0}", qname);
+            LOG.log(Level.FINE, "encoding " + value + " into RM header {0}", qname);
             marshaller.marshal(new JAXBElement<T>(qname, clz, value), header);
         }
     }
@@ -395,11 +399,12 @@
         AttributedURIType actionURI = null == maps ? null : maps.getAction();
         String action = null == actionURI ? null : actionURI.getValue();
         
-        LOG.info("action: " + action);
-        
+        LOG.fine("action: " + action);
+   
         if (!(RMConstants.getCreateSequenceAction().equals(action)
             || RMConstants.getCreateSequenceResponseAction().equals(action)
             || RMConstants.getTerminateSequenceAction().equals(action)
+            || RMConstants.getSequenceAckAction().equals(action)
             || RMConstants.getLastMessageAction().equals(action))) {
             return;
         }
@@ -407,12 +412,54 @@
         LOG.info("Updating service model info in exchange");
         
         RMManager manager = getManager(message);
-        RMEndpoint rme = manager.getReliableEndpoint(message);
+        assert manager != null;
         
+        RMEndpoint rme = manager.getReliableEndpoint(message);
+  
         Exchange exchange = message.getExchange();
+        
         exchange.put(Endpoint.class, rme.getEndpoint());
         exchange.put(Service.class, rme.getService());
         exchange.put(Binding.class, rme.getEndpoint().getBinding());
+        
+        // Also set BindingOperationInfo as some operations (SequenceAcknowledgment) have
+        // neither in nor out messages, and thus the WrappedInInterceptor cannot
+        // determine the operation name.
+        
+        BindingInfo bi = rme.getEndpoint().getEndpointInfo().getBinding();
+        BindingOperationInfo boi = null;
+        if (RMConstants.getCreateSequenceAction().equals(action)
+            || RMConstants.getCreateSequenceResponseAction().equals(action)) {
+            boi = bi.getOperation(RMConstants.getCreateSequenceOperationName());
+        } else if (RMConstants.getSequenceAckAction().equals(action)) {
+            boi = bi.getOperation(RMConstants.getSequenceAckOperationName()); 
+        } else if (RMConstants.getTerminateSequenceAction().equals(action)) {
+            boi = bi.getOperation(RMConstants.getTerminateSequenceOperationName()); 
+        }
+        assert boi != null;
+        exchange.put(BindingOperationInfo.class, boi);
+        
+        // Fix requestor role (as the client side message observer always sets it to TRUE) 
+        // to allow unmarshalling the body of a server originated TerminateSequence request.
+        // In the logical RM interceptor set it back to what it was so that the logical
+        // addressing interceptor does not try to send a partial response to 
+        // server originated oneway RM protocol messages.        
+        // 
+        
+        if (!RMConstants.getCreateSequenceResponseAction().equals(action)) {
+            LOG.fine("Changing requestor role from " + message.get(Message.REQUESTOR_ROLE)
+                     + " to false");
+            Object originalRequestorRole = message.get(Message.REQUESTOR_ROLE);
+            if (null != originalRequestorRole) {
+                message.put(RMMessageConstants.ORIGINAL_REQUESTOR_ROLE, originalRequestorRole);
+            }
+            message.put(Message.REQUESTOR_ROLE, Boolean.FALSE);
+        }
+        
+        if (RMConstants.getSequenceAckAction().equals(action)) {
+            exchange.setOneWay(true);
+        }
+        
     }
 
     private RMManager getManager(SoapMessage message) {

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java?view=diff&rev=477226&r1=477225&r2=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/OutMessageRecorder.java Mon Nov 20 07:37:17 2006
@@ -128,7 +128,7 @@
     class RecorderCallback implements CachedOutputStreamCallback {
 
         public void onFlush(AbstractCachedOutputStream cos) {  
-            LOG.fine("flushing wrapped output stream: " + cos.getOut().getClass().getName());
+            // LOG.fine("flushing wrapped output stream: " + cos.getOut().getClass().getName());
             OutputStream os = cos.getOut();
             if (os instanceof ByteArrayOutputStream) {
                 ByteArrayOutputStream bos = (ByteArrayOutputStream)os;

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=477226&r1=477225&r2=477226
==============================================================================
--- 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 Mon Nov 20 07:37:17 2006
@@ -19,6 +19,7 @@
 
 package org.apache.cxf.systest.ws.rm;
 
+import java.math.BigInteger;
 import java.util.logging.Logger;
 
 import junit.framework.Test;
@@ -33,6 +34,7 @@
 import org.apache.cxf.systest.common.ClientServerSetupBase;
 import org.apache.cxf.systest.common.ClientServerTestBase;
 import org.apache.cxf.ws.rm.RMConstants;
+import org.apache.cxf.ws.rm.RMManager;
 
 
 /**
@@ -60,11 +62,14 @@
     private OutMessageRecorder outRecorder;
     private InMessageRecorder inRecorder;
 
-    private boolean doTestOnewayAnonymousAcks = true;
-    private boolean doTestOnewayDeferredAnonymousAcks = true;
-    private boolean doTestOnewayDeferredNonAnonymousAcks = true;
-    private boolean doTestOnewayAnonymousAcksSequenceLength1 = true;
-    private boolean doTestTwowayNonAnonymous = true;
+    private boolean testAll = true;
+    private boolean doTestOnewayAnonymousAcks = testAll;
+    private boolean doTestOnewayDeferredAnonymousAcks = testAll;
+    private boolean doTestOnewayDeferredNonAnonymousAcks = testAll;
+    private boolean doTestOnewayAnonymousAcksSequenceLength1 = testAll;
+    private boolean doTestTwowayNonAnonymous = testAll;
+    private boolean doTestTwowayNonAnonymousDeferred = testAll;
+    private boolean doTestTwowayNonAnonymousMaximumSequenceLength2 = testAll;
 
     public static void main(String[] args) {
         junit.textui.TestRunner.run(SequenceTest.class);
@@ -281,7 +286,7 @@
         // CreateSequence and three greetMe messages
         // TODO there should be partial responses to the decoupled responses!
 
-        // awaitMessages(6, 6);
+        awaitMessages(4, 8);
         
         MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
         
@@ -315,6 +320,131 @@
         mf.verifyAcknowledgements(new boolean[] {false, true, true, true}, false);
     }
 
+    public void testTwowayNonAnonymousDeferred() throws Exception {
+        if (!doTestTwowayNonAnonymousDeferred) {
+            return;
+        }
+        setupGreeter("org/apache/cxf/systest/ws/rm/twoway-deferred.xml");
+
+        greeter.greetMe("one");
+        greeter.greetMe("two");
+
+        // CreateSequence and three greetMe messages, no acknowledgments
+        // included
+
+        awaitMessages(3, 6);
+        MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+        
+        mf.verifyMessages(3, true);
+        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(), 
+                                                 GREETME_ACTION,
+                                                 GREETME_ACTION};
+        mf.verifyActions(expectedActions, true);
+        mf.verifyMessageNumbers(new String[] {null, "1", "2"}, true);
+        mf.verifyLastMessage(new boolean[3], true);
+        mf.verifyAcknowledgements(new boolean[3], true);
+
+        // CreateSequenceResponse plus 2 greetMeResponse messages plus
+        // one partial response for each of the four messages no acknowledgments
+        // included
+
+        mf.verifyMessages(6, false);
+        expectedActions = new String[] {null, 
+                                        RMConstants.getCreateSequenceResponseAction(), 
+                                        null,
+                                        GREETME_RESPONSE_ACTION,
+                                        null, 
+                                        GREETME_RESPONSE_ACTION};
+        mf.verifyActions(expectedActions, false);
+        mf.verifyMessageNumbers(new String[] {null, null, null, "1", null, "2"}, false);
+        mf.verifyLastMessage(new boolean[6], false);
+        mf.verifyAcknowledgements(new boolean[6], false);
+
+        // one standalone acknowledgement should have been sent from the client and one
+        // should have been received from the server
+   
+        awaitMessages(4, 7, 3000);
+        mf.reset(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+        
+        mf.verifyMessageNumbers(new String[1], true);
+        mf.verifyLastMessage(new boolean[1], true);
+        mf.verifyAcknowledgements(new boolean[] {true}, true);
+        
+        mf.verifyMessageNumbers(new String[1], true);
+        mf.verifyLastMessage(new boolean[1], true);
+        mf.verifyAcknowledgements(new boolean[] {true}, true);
+
+    }
+    
+    /**
+     * A maximum sequence length of 2 is configured for the client only (server allows 10).
+     * However, as we use the defaults regarding the including and acceptance
+     * for inbound sequence offers and correlate offered sequences that are
+     * included in a CreateSequence request and accepted with those that are
+     * created on behalf of such a request, the server also tries terminate its
+     * sequences. Note that as part of the sequence termination exchange a
+     * standalone sequence acknowledgment needs to be sent regardless of whether
+     * or nor acknowledgments are delivered steadily with every response.
+     */
+
+    public void testTwowayNonAnonymousMaximumSequenceLength2() throws Exception {
+
+        if (!doTestTwowayNonAnonymousMaximumSequenceLength2) {
+            return;
+        }
+        setupGreeter("org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml");
+        
+        RMManager manager = greeterBus.getExtension(RMManager.class);
+        assertEquals("Unexpected maximum sequence length.", BigInteger.TEN, 
+            manager.getSourcePolicy().getSequenceTerminationPolicy().getMaxLength());
+        manager.getSourcePolicy().getSequenceTerminationPolicy().setMaxLength(
+            new BigInteger("2"));
+        
+        greeter.greetMe("one");
+        greeter.greetMe("two");
+        greeter.greetMe("three");
+
+        awaitMessages(7, 13, 5000);
+        MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(), inRecorder.getInboundMessages());
+        
+        mf.verifyMessages(7, true);
+        String[] expectedActions = new String[] {RMConstants.getCreateSequenceAction(),
+                                                 GREETME_ACTION,
+                                                 GREETME_ACTION, 
+                                                 RMConstants.getTerminateSequenceAction(),
+                                                 RMConstants.getSequenceAckAction(),
+                                                 RMConstants.getCreateSequenceAction(),
+                                                 GREETME_ACTION};
+        mf.verifyActions(expectedActions, true);
+        mf.verifyMessageNumbers(new String[] {null, "1", "2", null, null, null, "1"}, true);
+        mf.verifyLastMessage(new boolean[] {false, false, true, false, false, false, false}, true);
+        mf.verifyAcknowledgements(new boolean[] {false, false, true, false, true, false, false}, true);
+
+        // 7 partial responses plus 2 full responses to CreateSequence requests
+        // plus 3 full responses to greetMe requests plus server originiated
+        // TerminateSequence request
+
+        mf.verifyMessages(13, false);
+
+        mf.verifyPartialResponses(7);
+
+        mf.purgePartialResponses();
+
+        expectedActions = new String[] {RMConstants.getCreateSequenceResponseAction(),
+                                        GREETME_RESPONSE_ACTION,
+                                        GREETME_RESPONSE_ACTION, 
+                                        RMConstants.getTerminateSequenceAction(),
+                                        RMConstants.getCreateSequenceResponseAction(), 
+                                        GREETME_RESPONSE_ACTION};
+        mf.verifyActions(expectedActions, false);
+        mf.verifyMessageNumbers(new String[] {null, "1", "2", null, null, "1"}, false);
+        boolean[] expected = new boolean[6];
+        expected[2] = true;
+        mf.verifyLastMessage(expected, false);
+        expected[1] = true;
+        expected[5] = true;
+        mf.verifyAcknowledgements(expected, false);
+    }
 
     // --- test utilities ---
 
@@ -339,10 +469,14 @@
     }
     
     private void awaitMessages(int nExpectedOut, int nExpectedIn) {
-        int i = 0;
+        awaitMessages(nExpectedOut, nExpectedIn, 10000);
+    }
+    
+    private void awaitMessages(int nExpectedOut, int nExpectedIn, int timeout) {
+        int waited = 0;
         int nOut = 0;
         int nIn = 0;
-        while (i < 20) {                
+        while (waited <= timeout) {                
             synchronized (outRecorder) {
                 nOut = outRecorder.getOutboundMessages().size();
             }
@@ -357,6 +491,7 @@
             } catch (InterruptedException ex) {
                 // ignore
             }
+            waited += 100;
         }
         assertEquals("Did not receive expected number of inbound messages", nExpectedIn, nIn);
         assertEquals("Did not send expected number of outbound messages", nExpectedOut, nOut);        

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml?view=auto&rev=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-deferred.xml Mon Nov 20 07:37:17 2006
@@ -0,0 +1,63 @@
+<?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:9997/decoupled_endpoint"/>
+            </value>
+        </property>
+    </bean>
+    
+    <bean id="org.apache.cxf.ws.rm.RMManager" class="org.apache.cxf.ws.rm.RMManager">
+        <property name="bus" ref="cxf"/>  
+        <property name="destinationPolicy">
+            <value>
+                <wsrm-mgmt:destinationPolicy>
+                    <wsrm-mgmt:acksPolicy intraMessageThreshold="0"/>                    
+                </wsrm-mgmt:destinationPolicy>
+            </value>
+        </property>
+        <property name="sourcePolicy">
+            <value>
+                <wsrm-mgmt:sourcePolicy acksTo="http://localhost:9997/decoupled_endpoint"/>
+            </value>
+        </property>
+        
+        <property name="RMAssertion">
+            <value>
+                <wsrm-policy:RMAssertion>         
+                    <wsrm-policy:BaseRetransmissionInterval Milliseconds="10000"/>           
+                    <wsrm-policy:AcknowledgementInterval Milliseconds="2000"/>                                                        
+                </wsrm-policy:RMAssertion>
+            </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-deferred.xml
------------------------------------------------------------------------------
    svn:eol-style = native

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

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

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml?view=auto&rev=477226
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/rm/twoway-seqlength2.xml Mon Nov 20 07:37:17 2006
@@ -0,0 +1,49 @@
+<?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:9996/decoupled_endpoint"/>
+            </value>
+        </property>
+    </bean>
+    
+    <bean id="org.apache.cxf.ws.rm.RMManager" class="org.apache.cxf.ws.rm.RMManager">
+        <property name="bus" ref="cxf"/>
+        <property name="sourcePolicy">
+            <value>
+                <wsrm-mgmt:sourcePolicy>
+                    <wsrm-mgmt:sequenceTerminationPolicy maxLength="10"/>                    
+                </wsrm-mgmt:sourcePolicy>
+            </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-seqlength2.xml
------------------------------------------------------------------------------
    svn:eol-style = native

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

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