You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ds...@apache.org on 2013/07/02 23:46:56 UTC

svn commit: r1499124 - in /cxf/trunk: rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/ rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/ rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/ rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ rt/ws/rm/src/test/java...

Author: dsosnoski
Date: Tue Jul  2 21:46:55 2013
New Revision: 1499124

URL: http://svn.apache.org/r1499124
Log:
CXF-4139 implement WS-RMP 1.2 handling at the message level.

Added:
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM10PolicyWsdlTest.java
      - copied, changed from r1499123, cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTest.java
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTestBase.java
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm10wsdl_server.xml
      - copied, changed from r1499123, cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm12wsdl_server.xml
      - copied, changed from r1499123, cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml
Removed:
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTest.java
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml
Modified:
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConfiguration.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RM12AssertionBuilder.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMPolicyUtilities.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
    cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImpl.java
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
    cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java
    cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl.xml
    cxf/trunk/testutils/src/main/resources/wsdl/greeter_control.wsdl

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConfiguration.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConfiguration.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConfiguration.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConfiguration.java Tue Jul  2 21:46:55 2013
@@ -19,6 +19,8 @@
 
 package org.apache.cxf.ws.rm;
 
+import org.apache.cxf.ws.addressing.VersionTransformer.Names200408;
+
 
 /**
  * Configuration parameters for reliable messaging. These may be defined by a combination of Spring/Blueprint
@@ -208,4 +210,23 @@ public class RMConfiguration {
     public void setRM10AddressingNamespace(String addrns) {
         rm10AddressingNamespace = addrns;
     }
+    
+    public String getAddressingNamespace() {
+        
+        // determine based on RM namespace and RM 1.0 addressing namespace values
+        if (RM10Constants.NAMESPACE_URI.equals(rmNamespace)) {
+            return rm10AddressingNamespace == null
+                ? EncoderDecoder10Impl.INSTANCE.getWSANamespace() : rm10AddressingNamespace;
+        }
+        if (RM11Constants.NAMESPACE_URI.equals(rmNamespace)) {
+            return EncoderDecoder11Impl.INSTANCE.getWSANamespace();
+        }
+        
+        // should not happen, but in case RM namespace is not set
+        return Names200408.WSA_NAMESPACE_NAME;
+    }
+    
+    public ProtocolVariation getProtocolVariation() {
+        return ProtocolVariation.findVariant(getRMNamespace(), getRM10AddressingNamespace());
+    }
 }

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java Tue Jul  2 21:46:55 2013
@@ -394,32 +394,33 @@ public class RMEndpoint {
             return;
         }
 
-        EndpointInfo ei = getEndpoint(ProtocolVariation.RM10WSA200408).getEndpointInfo();
-
-        PolicyInterceptorProviderRegistry reg = manager.getBus()
-            .getExtension(PolicyInterceptorProviderRegistry.class);
-        EndpointPolicy ep = null == conduit ? engine.getServerEndpointPolicy(applicationEndpoint
-            .getEndpointInfo(), null) : engine.getClientEndpointPolicy(applicationEndpoint.getEndpointInfo(),
-                                                                       conduit);
-
-        if (conduit != null) {
-            engine.setClientEndpointPolicy(ei, ep);
-        } else {
-            engine.setServerEndpointPolicy(ei, ep);
-        }
-
-        EffectivePolicy effectiveOutbound = new EffectivePolicyImpl(ep, reg, true, false);
-        EffectivePolicy effectiveInbound = new EffectivePolicyImpl(ep, reg, false, false);
-
-        BindingInfo bi = ei.getBinding();
-        Collection<BindingOperationInfo> bois = bi.getOperations();
-
-        for (BindingOperationInfo boi : bois) {
-            engine.setEffectiveServerRequestPolicy(ei, boi, effectiveInbound);
-            engine.setEffectiveServerResponsePolicy(ei, boi, effectiveOutbound);
-
-            engine.setEffectiveClientRequestPolicy(ei, boi, effectiveOutbound);
-            engine.setEffectiveClientResponsePolicy(ei, boi, effectiveInbound);
+        for (Endpoint endpoint : endpoints.values()) {
+            EndpointInfo ei = endpoint.getEndpointInfo();
+            PolicyInterceptorProviderRegistry reg = manager.getBus()
+                .getExtension(PolicyInterceptorProviderRegistry.class);
+            EndpointPolicy ep = null == conduit ? engine.getServerEndpointPolicy(applicationEndpoint
+                .getEndpointInfo(), null) : engine.getClientEndpointPolicy(applicationEndpoint.getEndpointInfo(),
+                    conduit);
+            
+            if (conduit != null) {
+                engine.setClientEndpointPolicy(ei, ep);
+            } else {
+                engine.setServerEndpointPolicy(ei, ep);
+            }
+            
+            EffectivePolicy effectiveOutbound = new EffectivePolicyImpl(ep, reg, true, false);
+            EffectivePolicy effectiveInbound = new EffectivePolicyImpl(ep, reg, false, false);
+            
+            BindingInfo bi = ei.getBinding();
+            Collection<BindingOperationInfo> bois = bi.getOperations();
+            
+            for (BindingOperationInfo boi : bois) {
+                engine.setEffectiveServerRequestPolicy(ei, boi, effectiveInbound);
+                engine.setEffectiveServerResponsePolicy(ei, boi, effectiveOutbound);
+                
+                engine.setEffectiveClientRequestPolicy(ei, boi, effectiveOutbound);
+                engine.setEffectiveClientResponsePolicy(ei, boi, effectiveInbound);
+            }
         }
 
         // TODO: FaultPolicy (SequenceFault)

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java Tue Jul  2 21:46:55 2013
@@ -143,13 +143,11 @@ public class RMManager {
     // Configuration
 
     public void setRMNamespace(String uri) {
-        RMConfiguration cfg = forceConfiguration();
-        cfg.setRMNamespace(uri);
+        getConfiguration().setRMNamespace(uri);
     }
 
     public void setRM10AddressingNamespace(RM10AddressingNamespaceType addrns) {
-        RMConfiguration cfg = forceConfiguration();
-        cfg.setRM10AddressingNamespace(addrns.getUri());
+        getConfiguration().setRM10AddressingNamespace(addrns.getUri());
     }
     
     public Bus getBus() {
@@ -243,7 +241,10 @@ public class RMManager {
      * @return configuration (non-<code>null</code>)
      */
     public RMConfiguration getConfiguration() {
-        return forceConfiguration();
+        if (configuration == null) {
+            setConfiguration(new RMConfiguration());
+        }
+        return configuration;
     }
 
     /**
@@ -260,11 +261,14 @@ public class RMManager {
         this.configuration = configuration;
     }
     
-    RMConfiguration forceConfiguration() {
-        if (configuration == null) {
-            setConfiguration(new RMConfiguration());
-        }
-        return configuration;
+    /**
+     * Get configuration after applying policies.
+     * 
+     * @param msg
+     * @return configuration (non-<code>null</code>)
+     */
+    public RMConfiguration getEffectiveConfiguration(Message msg) {
+        return RMPolicyUtilities.getRMConfiguration(getConfiguration(), msg);
     }
 
     /**
@@ -307,15 +311,33 @@ public class RMManager {
             WrappedEndpoint wrappedEndpoint = (WrappedEndpoint)endpoint;
             endpoint = wrappedEndpoint.getWrappedEndpoint();
         }
-        RMConfiguration dflt = getConfiguration();
-        String rmUri = getRMNamespace(dflt, message);
-        String addrUri = getAddressingNamespace(dflt, message);
-        ProtocolVariation protocol = ProtocolVariation.findVariant(rmUri, addrUri);
-        if (protocol == null) {
-            org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(
-                "UNSUPPORTED_NAMESPACE", LOG, addrUri, rmUri);
-            LOG.log(Level.INFO, msg.toString());
-            throw new RMException(msg);
+        String rmUri = (String)message.getContextualProperty(WSRM_VERSION_PROPERTY);
+        if (rmUri == null) {
+            RMProperties rmps = RMContextUtils.retrieveRMProperties(message, false);
+            if (rmps != null) {
+                rmUri = rmps.getNamespaceURI();
+            }
+        }
+        String addrUri = (String)message.getContextualProperty(WSRM_WSA_VERSION_PROPERTY);
+        if (addrUri == null) {
+            AddressingProperties maps = ContextUtils.retrieveMAPs(message, false, false, false);
+            if (maps != null) {
+                addrUri = maps.getNamespaceURI();
+            }
+        }
+        RMConfiguration config = getConfiguration();
+        if (rmUri != null) {
+            config.setRMNamespace(rmUri);
+            ProtocolVariation protocol = ProtocolVariation.findVariant(rmUri, addrUri);
+            if (protocol == null) {
+                org.apache.cxf.common.i18n.Message msg = new org.apache.cxf.common.i18n.Message(
+                    "UNSUPPORTED_NAMESPACE", LOG, addrUri, rmUri);
+                LOG.log(Level.INFO, msg.toString());
+                throw new RMException(msg);
+            }
+        }
+        if (addrUri != null) {
+            config.setRM10AddressingNamespace(addrUri);
         }
         RMEndpoint rme = reliableEndpoints.get(endpoint);
         if (null == rme) {
@@ -331,7 +353,7 @@ public class RMManager {
                 = ei == null ? null : ei.getEndpointInfo()
                     .getProperty(MAPAggregator.DECOUPLED_DESTINATION, 
                              org.apache.cxf.transport.Destination.class);
-            RMConfiguration config = RMPolicyUtilities.getRMConfiguration(getConfiguration(), message);
+            config = RMPolicyUtilities.getRMConfiguration(config, message);
             rme.initialise(config, message.getExchange().getConduit(message), replyTo, dest);
             reliableEndpoints.put(endpoint, rme);
             LOG.fine("Created new RMEndpoint.");
@@ -339,88 +361,6 @@ public class RMManager {
         return rme;
     }
 
-    /**
-     * Get the WS-Addressing namespace being used for a message. If the WS-Addressing namespace has not been
-     * set, this returns the default from the supplied configuration.
-     * 
-     * @param config
-     * @param message
-     * @return namespace URI
-     */
-    String getAddressingNamespace(RMConfiguration config, Message message) {
-        String addrUri = (String)message.getContextualProperty(WSRM_WSA_VERSION_PROPERTY);
-        if (addrUri == null) {
-            AddressingProperties maps = ContextUtils.retrieveMAPs(message, false, false, false);
-            if (maps != null) {
-                addrUri = maps.getNamespaceURI();
-            }
-            if (addrUri == null) {
-                addrUri = ProtocolVariation.findVariant(config.getRMNamespace(), config.getRM10AddressingNamespace())
-                    .getWSANamespace();
-            }
-        }
-        return addrUri;
-    }
-
-    /**
-     * Get the WS-Addressing namespace being used for a message. If the WS-Addressing namespace has not been set, this
-     * returns the best default.
-     * 
-     * @param message
-     * @return namespace URI
-     */
-    public String getAddressingNamespace(Message message) {
-        RMConfiguration config = null;
-        try {
-            config = getReliableEndpoint(message).getConfiguration();
-        } catch (RMException e) {
-            // only happens with invalid namespace combination, just fall back to manager default
-            config = getConfiguration();
-        }
-        return getAddressingNamespace(config, message);
-    }
-
-    /**
-     * Get the WS-RM namespace being used for a message. If the WS-RM namespace has not been set, this returns the
-     * default from the supplied configuration.
-     * 
-     * @param config
-     * @param message
-     * @return namespace URI
-     */
-    String getRMNamespace(RMConfiguration config, Message message) {
-        String rmUri = (String)message.getContextualProperty(WSRM_VERSION_PROPERTY);
-        if (rmUri == null) {
-            RMProperties rmps = RMContextUtils.retrieveRMProperties(message, false);
-            if (rmps != null) {
-                rmUri = rmps.getNamespaceURI();
-            }
-            if (rmUri == null) {
-                rmUri = ProtocolVariation.findVariant(config.getRMNamespace(), config.getRM10AddressingNamespace())
-                    .getWSRMNamespace();
-            }
-        }
-        return rmUri;
-    }
-
-    /**
-     * Get the WS-RM namespace being used for a message. If the WS-RM namespace has not been set, this returns the best
-     * default.
-     * 
-     * @param message
-     * @return namespace URI
-     */
-    String getRMNamespace(Message message) {
-        RMConfiguration config = null;
-        try {
-            config = getReliableEndpoint(message).getConfiguration();
-        } catch (RMException e) {
-            // only happens with invalid namespace combination, just fall back to manager default
-            config = getConfiguration();
-        }
-        return getRMNamespace(config, message);
-    }
-
     public Destination getDestination(Message message) throws RMException {
         RMEndpoint rme = getReliableEndpoint(message);
         if (null != rme) {
@@ -442,7 +382,7 @@ public class RMManager {
 
         Source source = getSource(message);
         SourceSequence seq = source.getCurrent(inSeqId);
-        ProtocolVariation protocol = RMContextUtils.getProtocolVariation(message);
+        RMConfiguration config = getEffectiveConfiguration(message);
         if (null == seq || seq.isExpired()) {
             // TODO: better error handling
             EndpointReferenceType to = null;
@@ -451,7 +391,7 @@ public class RMManager {
             RelatesToType relatesTo = null;
             if (isServer) {
                 AddressingProperties inMaps = RMContextUtils.retrieveMAPs(message, false, false);
-                inMaps.exposeAs(getAddressingNamespace(message));
+                inMaps.exposeAs(config.getAddressingNamespace());
                 acksTo = RMUtils.createReference(inMaps.getTo().getValue());
                 to = inMaps.getReplyTo();
                 source.getReliableEndpoint().getServant().setUnattachedIdentifier(inSeqId);
@@ -486,6 +426,7 @@ public class RMManager {
                 throw new RMException(msg);
             }
             Proxy proxy = source.getReliableEndpoint().getProxy();
+            ProtocolVariation protocol = config.getProtocolVariation();
             CreateSequenceResponseType createResponse = 
                 proxy.createSequence(acksTo, relatesTo, isServer, protocol);
             if (!isServer) {
@@ -652,7 +593,7 @@ public class RMManager {
     @PostConstruct
     void initialise() {
         if (configuration == null) {
-            forceConfiguration().setExponentialBackoff(true);
+            getConfiguration().setExponentialBackoff(true);
         }
         DeliveryAssurance da = configuration.getDeliveryAssurance();
         if (da == null) {

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java Tue Jul  2 21:46:55 2013
@@ -65,21 +65,22 @@ public class RMOutInterceptor extends Ab
             return;
         }
         
-        String wsaNamespace = getManager().getAddressingNamespace(msg);
         if (isRuntimeFault(msg)) {
             LogUtils.log(LOG, Level.WARNING, "RUNTIME_FAULT_MSG");
             // in case of a SequenceFault or other WS-RM related fault, set action appropriately.
             // the received inbound maps is available to extract some values in case if needed.
             Throwable cause = msg.getContent(Exception.class).getCause();
             if (cause instanceof SequenceFault || cause instanceof RMException) {
-                maps.getAction().setValue(wsaNamespace + "/fault");
+                maps.getAction().setValue(getAddressingNamespace(maps) + "/fault");
             }
             return;
         }
 
         Source source = getManager().getSource(msg);
         
-        String rmNamespace = getManager().getRMNamespace(msg);
+        RMConfiguration config = getManager().getEffectiveConfiguration(msg);
+        String wsaNamespace = config.getAddressingNamespace();
+        String rmNamespace = config.getRMNamespace();
         ProtocolVariation protocol = ProtocolVariation.findVariant(rmNamespace, wsaNamespace);
         RMContextUtils.setProtocolVariation(msg, protocol);
         maps.exposeAs(wsaNamespace);
@@ -210,6 +211,14 @@ public class RMOutInterceptor extends Ab
         
         assertReliability(msg);
     }
+
+    private String getAddressingNamespace(AddressingProperties maps) {
+        String wsaNamespace = maps.getNamespaceURI();
+        if (wsaNamespace == null) {
+            getManager().getConfiguration().getAddressingNamespace();
+        }
+        return wsaNamespace;
+    }
     
     void addAcknowledgements(Destination destination, 
                              RMProperties rmpsOut, 

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RM12AssertionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RM12AssertionBuilder.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RM12AssertionBuilder.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RM12AssertionBuilder.java Tue Jul  2 21:46:55 2013
@@ -47,17 +47,17 @@ public class RM12AssertionBuilder implem
     public static final String ATMOSTONCE_NAME = "AtMostOnce";
     public static final String INORDER_NAME = "InOrder";
     
-    private static final QName SEQSTR_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, SEQUENCESTR_NAME);
-    private static final QName SEQTRANSSEC_QNAME =
+    public static final QName SEQSTR_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, SEQUENCESTR_NAME);
+    public static final QName SEQTRANSSEC_QNAME =
         new QName(RM11Constants.WSRMP_NAMESPACE_URI, SEQUENCETRANSEC_NAME);
-    private static final QName DELIVERYASSURANCE_QNAME =
+    public static final QName DELIVERYASSURANCE_QNAME =
         new QName(RM11Constants.WSRMP_NAMESPACE_URI, DELIVERYASSURANCE_NAME);
-    private static final QName EXACTLYONCE_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, EXACTLYONCE_NAME);
-    private static final QName ATLEASTONCE_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, ATLEASTONCE_NAME);
-    private static final QName ATMOSTONCE_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, ATMOSTONCE_NAME);
-    private static final QName INORDER_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, INORDER_NAME);
+    public static final QName EXACTLYONCE_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, EXACTLYONCE_NAME);
+    public static final QName ATLEASTONCE_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, ATLEASTONCE_NAME);
+    public static final QName ATMOSTONCE_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, ATMOSTONCE_NAME);
+    public static final QName INORDER_QNAME = new QName(RM11Constants.WSRMP_NAMESPACE_URI, INORDER_NAME);
     
-    private static final QName[] KNOWN_ELEMENTS = {
+    public static final QName[] KNOWN_ELEMENTS = {
         RM11Constants.WSRMP_RMASSERTION_QNAME,
         SEQSTR_QNAME,
         SEQTRANSSEC_QNAME,

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMPolicyUtilities.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMPolicyUtilities.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMPolicyUtilities.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/policy/RMPolicyUtilities.java Tue Jul  2 21:46:55 2013
@@ -21,12 +21,14 @@ package org.apache.cxf.ws.rm.policy;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
+
+import javax.xml.namespace.QName;
 
 import org.apache.cxf.message.Message;
 import org.apache.cxf.ws.policy.AssertionInfo;
 import org.apache.cxf.ws.policy.AssertionInfoMap;
 import org.apache.cxf.ws.policy.builder.jaxb.JaxbAssertion;
-import org.apache.cxf.ws.rm.RM10Constants;
 import org.apache.cxf.ws.rm.RM11Constants;
 import org.apache.cxf.ws.rm.RMConfiguration;
 import org.apache.cxf.ws.rm.RMConfiguration.DeliveryAssurance;
@@ -39,6 +41,15 @@ import org.apache.neethi.builders.Primit
  */
 public final class RMPolicyUtilities {
     
+    private static final List<QName> ASSERTION_NAMES;
+    static {
+        ASSERTION_NAMES = new ArrayList<QName>();
+        ASSERTION_NAMES.addAll(RM10AssertionBuilder.KNOWN_ELEMENTS);
+        for (QName qn : RM12AssertionBuilder.KNOWN_ELEMENTS) {
+            ASSERTION_NAMES.add(qn);
+        }
+    }
+    
     private RMPolicyUtilities() {
     }
     
@@ -76,13 +87,11 @@ public final class RMPolicyUtilities {
     public static Collection<AssertionInfo> collectRMAssertions(AssertionInfoMap aim) {
         Collection<AssertionInfo> mergedAsserts = new ArrayList<AssertionInfo>();
         if (aim != null) {
-            Collection<AssertionInfo> ais = aim.get(RM10Constants.WSRMP_RMASSERTION_QNAME);
-            if (ais != null) {
-                mergedAsserts.addAll(ais);
-            }
-            ais = aim.get(RM11Constants.WSRMP_RMASSERTION_QNAME);
-            if (ais != null) {
-                mergedAsserts.addAll(ais);
+            for (QName qn : ASSERTION_NAMES) {
+                Collection<AssertionInfo> ais = aim.get(qn);
+                if (ais != null) {
+                    mergedAsserts.addAll(ais);
+                }
             }
         }
         return mergedAsserts;

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java Tue Jul  2 21:46:55 2013
@@ -69,6 +69,7 @@ import org.apache.cxf.ws.rm.EncoderDecod
 import org.apache.cxf.ws.rm.ProtocolVariation;
 import org.apache.cxf.ws.rm.RM10Constants;
 import org.apache.cxf.ws.rm.RM11Constants;
+import org.apache.cxf.ws.rm.RMConfiguration;
 import org.apache.cxf.ws.rm.RMConstants;
 import org.apache.cxf.ws.rm.RMContextUtils;
 import org.apache.cxf.ws.rm.RMEndpoint;
@@ -285,7 +286,8 @@ public class RMSoapInterceptor extends A
                             String wsauri = null;
                             AddressingProperties maps = ContextUtils.retrieveMAPs(message, false, false, false);
                             if (maps == null) {
-                                wsauri = getManager(message).getAddressingNamespace(message);
+                                RMConfiguration config = getManager(message).getEffectiveConfiguration(message);
+                                wsauri = config.getAddressingNamespace();
                             } else {
                                 wsauri = maps.getNamespaceURI();
                             }

Modified: cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImpl.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImpl.java (original)
+++ cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImpl.java Tue Jul  2 21:46:55 2013
@@ -69,7 +69,6 @@ import org.apache.cxf.ws.rm.RetryStatus;
 import org.apache.cxf.ws.rm.SourceSequence;
 import org.apache.cxf.ws.rm.manager.RetryPolicyType;
 import org.apache.cxf.ws.rm.persistence.RMStore;
-import org.apache.cxf.ws.rm.policy.RMPolicyUtilities;
 import org.apache.cxf.ws.rm.v200702.Identifier;
 import org.apache.cxf.ws.rm.v200702.SequenceType;
 import org.apache.cxf.ws.rmp.v200502.RMAssertion;
@@ -505,7 +504,7 @@ public class RetransmissionQueueImpl imp
             message = m;
             retries = 0;
             out = m.getContent(OutputStream.class);
-            RMConfiguration cfg = RMPolicyUtilities.getRMConfiguration(manager.getConfiguration(), message);
+            RMConfiguration cfg = manager.getEffectiveConfiguration(message);
             long baseRetransmissionInterval = 
                 cfg.getBaseRetransmissionInterval().longValue();
             backoff = cfg.isExponentialBackoff()  ? RetransmissionQueue.DEFAULT_EXPONENTIAL_BACKOFF : 1;

Modified: cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java (original)
+++ cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMEndpointTest.java Tue Jul  2 21:46:55 2013
@@ -22,7 +22,6 @@ package org.apache.cxf.ws.rm;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 
 import javax.wsdl.extensions.ExtensibilityElement;
@@ -37,7 +36,6 @@ import org.apache.cxf.interceptor.Interc
 import org.apache.cxf.message.Message;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.model.BindingInfo;
-import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.InterfaceInfo;
 import org.apache.cxf.service.model.OperationInfo;
@@ -271,52 +269,6 @@ public class RMEndpointTest extends Asse
     }
 
     @Test
-    public void testSetPolicies() throws NoSuchMethodException {
-        Method m = RMEndpoint.class.getDeclaredMethod("getEndpoint", new Class[] {ProtocolVariation.class});
-        rme = EasyMock.createMockBuilder(RMEndpoint.class)
-            .addMockedMethod(m).createMock(control);
-        rme.setAplicationEndpoint(ae);
-        rme.setManager(manager);
-        Endpoint e = control.createMock(Endpoint.class);
-        EasyMock.expect(rme.getEndpoint(ProtocolVariation.RM10WSA200408)).andReturn(e);
-        EndpointInfo ei = control.createMock(EndpointInfo.class);
-        EasyMock.expect(e.getEndpointInfo()).andReturn(ei);
-        Bus bus = control.createMock(Bus.class);
-        EasyMock.expect(manager.getBus()).andReturn(bus).times(2);
-        PolicyEngine pe = control.createMock(PolicyEngine.class);
-        EasyMock.expect(bus.getExtension(PolicyEngine.class)).andReturn(pe);
-        EasyMock.expect(pe.isEnabled()).andReturn(true);
-        PolicyInterceptorProviderRegistry reg = control.createMock(PolicyInterceptorProviderRegistry.class);
-        EasyMock.expect(bus.getExtension(PolicyInterceptorProviderRegistry.class)).andReturn(reg);
-        EndpointInfo aei = control.createMock(EndpointInfo.class);
-        EasyMock.expect(ae.getEndpointInfo()).andReturn(aei);
-        EndpointPolicy epi = control.createMock(EndpointPolicy.class);
-        EasyMock.expect(pe.getServerEndpointPolicy(aei, null)).andReturn(epi);
-        EasyMock.expect(epi.getChosenAlternative()).andReturn(new ArrayList<Assertion>());
-
-        pe.setServerEndpointPolicy(ei, epi);
-        EasyMock.expectLastCall();
-        BindingInfo bi = control.createMock(BindingInfo.class);
-        EasyMock.expect(ei.getBinding()).andReturn(bi);
-        BindingOperationInfo boi = control.createMock(BindingOperationInfo.class);
-        EasyMock.expect(bi.getOperations()).andReturn(Collections.singletonList(boi));
-        pe.setEffectiveServerRequestPolicy(EasyMock.eq(ei), EasyMock.eq(boi), EasyMock
-            .isA(EffectivePolicy.class));
-        EasyMock.expectLastCall();
-        pe.setEffectiveServerResponsePolicy(EasyMock.eq(ei), EasyMock.eq(boi), EasyMock
-            .isA(EffectivePolicy.class));
-        EasyMock.expectLastCall();
-        pe.setEffectiveClientRequestPolicy(EasyMock.eq(ei), EasyMock.eq(boi), EasyMock
-            .isA(EffectivePolicy.class));
-        EasyMock.expectLastCall();
-        pe.setEffectiveClientResponsePolicy(EasyMock.eq(ei), EasyMock.eq(boi), EasyMock
-            .isA(EffectivePolicy.class));
-        EasyMock.expectLastCall();
-        control.replay();
-        rme.setPolicies();
-    }
-
-    @Test
     public void testShutdown() {
         DestinationSequence ds = control.createMock(DestinationSequence.class);
         Identifier did = control.createMock(Identifier.class);

Modified: cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java (original)
+++ cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java Tue Jul  2 21:46:55 2013
@@ -465,10 +465,10 @@ public class RMInInterceptorTest extends
         EasyMock.expect(exchange.getDestination()).andReturn(td);
         
         manager = control.createMock(RMManager.class);
-        EasyMock.expect(manager.getRMNamespace(EasyMock.same(message)))
-            .andReturn(RM10Constants.NAMESPACE_URI).anyTimes();
-        EasyMock.expect(manager.getAddressingNamespace(EasyMock.same(message)))
-            .andReturn(Names200408.WSA_NAMESPACE_NAME).anyTimes();
+        RMConfiguration config = new RMConfiguration();
+        config.setRMNamespace(RM10Constants.NAMESPACE_URI);
+        config.setRM10AddressingNamespace(RM10Constants.NAMESPACE_URI);
+        EasyMock.expect(manager.getEffectiveConfiguration(message)).andReturn(config).anyTimes();
         interceptor.setManager(manager);
         rme = control.createMock(RMEndpoint.class);
         EasyMock.expect(manager.getReliableEndpoint(message)).andReturn(rme);

Modified: cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java (original)
+++ cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java Tue Jul  2 21:46:55 2013
@@ -51,7 +51,6 @@ import org.apache.cxf.ws.addressing.Attr
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
 import org.apache.cxf.ws.addressing.JAXWSAConstants;
 import org.apache.cxf.ws.addressing.RelatesToType;
-import org.apache.cxf.ws.addressing.VersionTransformer.Names200408;
 import org.apache.cxf.ws.addressing.impl.AddressingPropertiesImpl;
 import org.apache.cxf.ws.rm.manager.SequenceTerminationPolicyType;
 import org.apache.cxf.ws.rm.manager.SourcePolicyType;
@@ -294,14 +293,13 @@ public class RMManagerTest extends Asser
     public void testGetReliableEndpointExisting() throws NoSuchMethodException, RMException {
         Method m1 = RMManager.class.getDeclaredMethod("createReliableEndpoint", 
             new Class[] {Endpoint.class});
-        Method m2 = RMManager.class.getDeclaredMethod("getRMNamespace",  new Class[] {Message.class});
-        Method m3 = RMManager.class.getDeclaredMethod("getAddressingNamespace",  new Class[] {Message.class});
-        manager = control.createMock(RMManager.class, new Method[] {m1, m2, m3});
+        manager = control.createMock(RMManager.class, new Method[] {m1});
         manager.setReliableEndpointsMap(new HashMap<Endpoint, RMEndpoint>());
         Message message = control.createMock(Message.class);
-        EasyMock.expect(manager.getRMNamespace(message)).andReturn(RM10Constants.NAMESPACE_URI).anyTimes();
-        EasyMock.expect(manager.getAddressingNamespace(message)).andReturn(Names200408.WSA_NAMESPACE_NAME)
-            .anyTimes();
+        RMConfiguration config = new RMConfiguration();
+        config.setRMNamespace(RM10Constants.NAMESPACE_URI);
+        config.setRM10AddressingNamespace(RM10Constants.NAMESPACE_URI);
+        EasyMock.expect(manager.getEffectiveConfiguration(message)).andReturn(config).anyTimes();
         Exchange exchange = control.createMock(Exchange.class);
         EasyMock.expect(message.getExchange()).andReturn(exchange);
         Endpoint endpoint = control.createMock(Endpoint.class);
@@ -384,8 +382,6 @@ public class RMManagerTest extends Asser
         Method m = RMManager.class.getDeclaredMethod("getSource", new Class[] {Message.class});
         manager = control.createMock(RMManager.class, new Method[] {m});
         Message message = control.createMock(Message.class);
-        EasyMock.expect(RMContextUtils.getProtocolVariation(message))
-            .andReturn(ProtocolVariation.RM10WSA200408);
         Exchange exchange = control.createMock(Exchange.class);
         EasyMock.expect(message.getExchange()).andReturn(exchange).anyTimes();
         EasyMock.expect(exchange.getOutMessage()).andReturn(message).anyTimes();

Modified: cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java (original)
+++ cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java Tue Jul  2 21:46:55 2013
@@ -146,8 +146,7 @@ public class RMOutInterceptorTest extend
         config.setRMNamespace(RM10Constants.NAMESPACE_URI);
         config.setRM10AddressingNamespace(Names200408.WSA_NAMESPACE_NAME);
         EasyMock.expect(rme.getConfiguration()).andReturn(config).anyTimes();
-        EasyMock.expect(manager.getRMNamespace(message)).andReturn(RM10Constants.NAMESPACE_URI).anyTimes();
-        EasyMock.expect(manager.getAddressingNamespace(message)).andReturn(Names200408.WSA_NAMESPACE_NAME).anyTimes();
+        EasyMock.expect(manager.getEffectiveConfiguration(message)).andReturn(config).anyTimes();
         Source source = control.createMock(Source.class);
         EasyMock.expect(source.getReliableEndpoint()).andReturn(rme).anyTimes();
         EasyMock.expect(manager.getSource(message)).andReturn(source).anyTimes();

Modified: cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java (original)
+++ cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RetransmissionQueueImplTest.java Tue Jul  2 21:46:55 2013
@@ -26,7 +26,6 @@ import java.util.List;
 import java.util.concurrent.Executor;
 
 import org.apache.cxf.message.Message;
-import org.apache.cxf.ws.policy.AssertionInfoMap;
 import org.apache.cxf.ws.rm.RMConfiguration;
 import org.apache.cxf.ws.rm.RMManager;
 import org.apache.cxf.ws.rm.RMMessageConstants;
@@ -365,9 +364,8 @@ public class RetransmissionQueueImplTest
     }
     
     private void setupMessagePolicies(Message message) {
-        EasyMock.expect(message.get(AssertionInfoMap.class)).andReturn(null);
         RMConfiguration cfg = new RMConfiguration();
-        EasyMock.expect(manager.getConfiguration()).andReturn(cfg);
+        EasyMock.expect(manager.getEffectiveConfiguration(message)).andReturn(cfg);
         cfg.setBaseRetransmissionInterval(new Long(5000));
         cfg.setExponentialBackoff(true);
     }

Copied: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM10PolicyWsdlTest.java (from r1499123, cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTest.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM10PolicyWsdlTest.java?p2=cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM10PolicyWsdlTest.java&p1=cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTest.java&r1=1499123&r2=1499124&rev=1499124&view=diff
==============================================================================
--- cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTest.java (original)
+++ cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM10PolicyWsdlTest.java Tue Jul  2 21:46:55 2013
@@ -20,88 +20,32 @@
 package org.apache.cxf.systest.ws.policy;
 
 import java.io.Closeable;
-import java.util.List;
 import java.util.logging.Logger;
 
-import org.apache.cxf.Bus;
-import org.apache.cxf.BusFactory;
-import org.apache.cxf.bus.spring.SpringBusFactory;
 import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.endpoint.ServerRegistry;
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.PingMeFault;
 import org.apache.cxf.greeter_control.ReliableGreeterService;
-import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.systest.ws.util.ConnectionHelper;
 import org.apache.cxf.systest.ws.util.MessageFlow;
-import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
-import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
 import org.apache.cxf.testutil.common.TestUtil;
-import org.apache.cxf.testutil.recorders.InMessageRecorder;
 import org.apache.cxf.testutil.recorders.MessageRecorder;
-import org.apache.cxf.testutil.recorders.OutMessageRecorder;
-import org.apache.cxf.ws.policy.PolicyAssertion;
-import org.apache.cxf.ws.policy.PolicyEngine;
 import org.apache.cxf.ws.rm.RM10Constants;
-import org.apache.neethi.All;
-import org.apache.neethi.ExactlyOne;
-import org.apache.neethi.Policy;
+
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-
 /**
- * Tests the use of the WS-Policy Framework to automatically engage WS-RM
- * in response to Policies defined for the endpoint via an direct attachment to the wsdl.
+ * Tests the use of the WS-Policy Framework to automatically engage WS-RM 1.0 in response to Policies defined for the
+ * endpoint via an direct attachment to the wsdl.
  */
-public class RMPolicyWsdlTest extends AbstractBusClientServerTestBase {
+public class RM10PolicyWsdlTest extends RMPolicyWsdlTestBase {
+    
     public static final String PORT = allocatePort(Server.class);
-       
-    private static final Logger LOG = LogUtils.getLogger(RMPolicyWsdlTest.class);
-    private static final String GREETMEONEWAY_ACTION 
-        = "http://cxf.apache.org/greeter_control/Greeter/greetMeOneWayRequest";
-    private static final String GREETME_ACTION 
-        = "http://cxf.apache.org/greeter_control/Greeter/greetMeRequest";
-    private static final String GREETME_RESPONSE_ACTION 
-        = "http://cxf.apache.org/greeter_control/Greeter/greetMeResponse";
-    private static final String PINGME_ACTION = "http://cxf.apache.org/greeter_control/Greeter/pingMeRequest";
-    private static final String PINGME_RESPONSE_ACTION 
-        = "http://cxf.apache.org/greeter_control/Greeter/pingMeResponse";
-    private static final String GREETER_FAULT_ACTION
-        = "http://cxf.apache.org/greeter_control/Greeter/pingMe/Fault/faultDetail";
-
-
-    public static class Server extends AbstractBusTestServerBase {
-        protected void run()  {            
-            SpringBusFactory bf = new SpringBusFactory();
-            Bus bus = bf.createBus("org/apache/cxf/systest/ws/policy/rmwsdl_server.xml");
-            BusFactory.setDefaultBus(bus);
-            setBus(bus);
-            
-            ServerRegistry sr = bus.getExtension(ServerRegistry.class);
-            PolicyEngine pe = bus.getExtension(PolicyEngine.class);
-            
-            List<PolicyAssertion> assertions1 
-                = getAssertions(pe, sr.getServers().get(0));
-            assertEquals("2 assertions should be available", 2, assertions1.size());
-            List<PolicyAssertion> assertions2 = 
-                getAssertions(pe, sr.getServers().get(1));
-            assertEquals("1 assertion should be available", 1, assertions2.size());
-            
-            LOG.info("Published greeter endpoints.");
-        }
-        
-        protected List<PolicyAssertion> getAssertions(PolicyEngine pe, org.apache.cxf.endpoint.Server s) {
-            Policy p1 = pe.getServerEndpointPolicy(
-                             s.getEndpoint().getEndpointInfo(), null).getPolicy();
-            List<ExactlyOne> pops = 
-                CastUtils.cast(p1.getPolicyComponents(), ExactlyOne.class);
-            assertEquals("New policy must have 1 top level policy operator", 1, pops.size());
-            List<All> alts = 
-                CastUtils.cast(pops.get(0).getPolicyComponents(), All.class);
-            assertEquals("1 alternatives should be available", 1, alts.size());
-            return CastUtils.cast(alts.get(0).getAssertions(), PolicyAssertion.class);
-        }
+    
+    private static final Logger LOG = LogUtils.getLogger(RM10PolicyWsdlTest.class);
+    
+    public static class Server extends ServerBase {
         
         public static void main(String[] args) {
             try { 
@@ -114,7 +58,13 @@ public class RMPolicyWsdlTest extends Ab
                 System.out.println("done!");
             }
         }
-    }    
+
+        @Override
+        protected String getConfigPath() {
+            return "org/apache/cxf/systest/ws/policy/rm10wsdl_server.xml";
+        }
+    }
+    
     
     @BeforeClass
     public static void startServers() throws Exception {
@@ -124,16 +74,9 @@ public class RMPolicyWsdlTest extends Ab
          
     @Test
     public void testUsingRM() throws Exception {
-        SpringBusFactory bf = new SpringBusFactory();
-        bus = bf.createBus("org/apache/cxf/systest/ws/policy/rmwsdl.xml");
-        BusFactory.setDefaultBus(bus);
-        OutMessageRecorder outRecorder = new OutMessageRecorder();
-        bus.getOutInterceptors().add(outRecorder);
-        InMessageRecorder inRecorder = new InMessageRecorder();
-        bus.getInInterceptors().add(inRecorder);
-        
+        setUpBus(PORT);
         ReliableGreeterService gs = new ReliableGreeterService();
-        final Greeter greeter = gs.getGreeterPort();
+        Greeter greeter = gs.getGreeterPort();
         updateAddressPort(greeter, PORT);
         LOG.fine("Created greeter client.");
 

Added: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java?rev=1499124&view=auto
==============================================================================
--- cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java (added)
+++ cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RM12PolicyWsdlTest.java Tue Jul  2 21:46:55 2013
@@ -0,0 +1,144 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.systest.ws.policy;
+
+import java.io.Closeable;
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.greeter_control.Greeter;
+import org.apache.cxf.greeter_control.PingMeFault;
+import org.apache.cxf.greeter_control.Reliable12GreeterService;
+import org.apache.cxf.systest.ws.util.MessageFlow;
+import org.apache.cxf.testutil.common.TestUtil;
+import org.apache.cxf.testutil.recorders.MessageRecorder;
+import org.apache.cxf.ws.rm.RM11Constants;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Tests the use of the WS-Policy Framework to automatically engage WS-RM 1.2 in response to Policies defined for the
+ * endpoint via an direct attachment to the wsdl.
+ */
+public class RM12PolicyWsdlTest extends RMPolicyWsdlTestBase {
+    
+    public static final String PORT = allocatePort(Server.class);
+    
+    private static final Logger LOG = LogUtils.getLogger(RM12PolicyWsdlTest.class);
+    
+    public static class Server extends ServerBase {
+        
+        public static void main(String[] args) {
+            try { 
+                Server s = new Server(); 
+                s.start();
+            } catch (Exception ex) {
+                ex.printStackTrace();
+                System.exit(-1);
+            } finally { 
+                System.out.println("done!");
+            }
+        }
+
+        @Override
+        protected String getConfigPath() {
+            return "org/apache/cxf/systest/ws/policy/rm12wsdl_server.xml";
+        }
+    }
+    
+    
+    @BeforeClass
+    public static void startServers() throws Exception {
+        TestUtil.getNewPortNumber("decoupled");
+        assertTrue("server did not launch correctly", launchServer(Server.class, true));
+    }
+         
+    @Test
+    public void testUsingRM12() throws Exception {
+        setUpBus(PORT);
+        Reliable12GreeterService gs = new Reliable12GreeterService();
+        Greeter greeter = gs.getGreeterPort();
+        updateAddressPort(greeter, PORT);
+        LOG.fine("Created greeter client.");
+
+        // oneway
+
+        greeter.greetMeOneWay("CXF");
+
+        // two-way
+
+        assertEquals("CXF", greeter.greetMe("cxf")); 
+     
+        // exception
+
+        try {
+            greeter.pingMe();
+        } catch (PingMeFault ex) {
+            fail("First invocation should have succeeded.");
+        } 
+       
+        try {
+            greeter.pingMe();
+            fail("Expected PingMeFault not thrown.");
+        } catch (PingMeFault ex) {
+            assertEquals(2, ex.getFaultInfo().getMajor());
+            assertEquals(1, ex.getFaultInfo().getMinor());
+        } 
+
+        MessageRecorder mr = new MessageRecorder(outRecorder, inRecorder);
+        mr.awaitMessages(5, 4, 5000);
+//        mr.awaitMessages(5, 9, 5000);
+
+        MessageFlow mf = new MessageFlow(outRecorder.getOutboundMessages(),
+                                         inRecorder.getInboundMessages(),
+                                         "http://www.w3.org/2005/08/addressing",
+                                         "http://docs.oasis-open.org/ws-rx/wsrm/200702");
+        
+        
+        mf.verifyMessages(5, true);
+        String[] expectedActions = new String[] {RM11Constants.INSTANCE.getCreateSequenceAction(), 
+                                                 GREETMEONEWAY_ACTION,
+                                                 GREETME_ACTION, 
+                                                 PINGME_ACTION,
+                                                 PINGME_ACTION};
+        mf.verifyActions(expectedActions, true);
+        mf.verifyMessageNumbers(new String[] {null, "1", "2", "3", "4"}, true);
+        mf.verifyLastMessage(new boolean[] {false, false, false, false, false}, true);
+        mf.verifyAcknowledgements(new boolean[] {false, false, false, true, true}, true);
+
+        mf.verifyMessages(4, false);
+//        mf.verifyMessages(9, false);
+//        mf.verifyPartialResponses(5);      
+//        mf.purgePartialResponses();
+
+        expectedActions = new String[] {
+            RM11Constants.INSTANCE.getCreateSequenceResponseAction(),
+            GREETME_RESPONSE_ACTION,
+            PINGME_RESPONSE_ACTION,
+            GREETER_FAULT_ACTION
+        };
+        mf.verifyActions(expectedActions, false);
+        mf.verifyMessageNumbers(new String[] {null, "1", "2", "3"}, false);
+        mf.verifyLastMessage(new boolean[] {false, false, false, false}, false);
+        mf.verifyAcknowledgements(new boolean[] {false, true, true, true}, false);
+        ((Closeable)greeter).close();
+    }
+}

Added: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTestBase.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTestBase.java?rev=1499124&view=auto
==============================================================================
--- cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTestBase.java (added)
+++ cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/RMPolicyWsdlTestBase.java Tue Jul  2 21:46:55 2013
@@ -0,0 +1,107 @@
+/**
+ * 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.
+ */
+
+package org.apache.cxf.systest.ws.policy;
+
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.spring.SpringBusFactory;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.endpoint.ServerRegistry;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.cxf.testutil.recorders.InMessageRecorder;
+import org.apache.cxf.testutil.recorders.OutMessageRecorder;
+import org.apache.cxf.ws.policy.PolicyAssertion;
+import org.apache.cxf.ws.policy.PolicyEngine;
+import org.apache.neethi.All;
+import org.apache.neethi.ExactlyOne;
+import org.apache.neethi.Policy;
+
+/**
+ * Base class for testing WS-Policy Framework using engage WS-RM Policy to engage WS-RM.
+ */
+public class RMPolicyWsdlTestBase extends AbstractBusClientServerTestBase {
+    protected static final String GREETMEONEWAY_ACTION 
+        = "http://cxf.apache.org/greeter_control/Greeter/greetMeOneWayRequest";
+    protected static final String GREETME_ACTION 
+        = "http://cxf.apache.org/greeter_control/Greeter/greetMeRequest";
+    protected static final String GREETME_RESPONSE_ACTION 
+        = "http://cxf.apache.org/greeter_control/Greeter/greetMeResponse";
+    protected static final String PINGME_ACTION = "http://cxf.apache.org/greeter_control/Greeter/pingMeRequest";
+    protected static final String PINGME_RESPONSE_ACTION 
+        = "http://cxf.apache.org/greeter_control/Greeter/pingMeResponse";
+    protected static final String GREETER_FAULT_ACTION
+        = "http://cxf.apache.org/greeter_control/Greeter/pingMe/Fault/faultDetail";
+    
+    private static final Logger LOG = LogUtils.getLogger(RMPolicyWsdlTestBase.class);
+    
+    protected OutMessageRecorder outRecorder;
+    protected InMessageRecorder inRecorder;
+
+    public abstract static class ServerBase extends AbstractBusTestServerBase {
+        
+        protected abstract String getConfigPath();
+        
+        protected void run()  {            
+            SpringBusFactory bf = new SpringBusFactory();
+            Bus bus = bf.createBus(getConfigPath());
+            BusFactory.setDefaultBus(bus);
+            setBus(bus);
+            
+            ServerRegistry sr = bus.getExtension(ServerRegistry.class);
+            PolicyEngine pe = bus.getExtension(PolicyEngine.class);
+            
+            List<PolicyAssertion> assertions1 
+                = getAssertions(pe, sr.getServers().get(0));
+            assertEquals("2 assertions should be available", 2, assertions1.size());
+            List<PolicyAssertion> assertions2 = 
+                getAssertions(pe, sr.getServers().get(1));
+            assertEquals("1 assertion should be available", 1, assertions2.size());
+            
+            LOG.info("Published greeter endpoints.");
+        }
+        
+        protected List<PolicyAssertion> getAssertions(PolicyEngine pe, org.apache.cxf.endpoint.Server s) {
+            Policy p1 = pe.getServerEndpointPolicy(
+                             s.getEndpoint().getEndpointInfo(), null).getPolicy();
+            List<ExactlyOne> pops = 
+                CastUtils.cast(p1.getPolicyComponents(), ExactlyOne.class);
+            assertEquals("New policy must have 1 top level policy operator", 1, pops.size());
+            List<All> alts = 
+                CastUtils.cast(pops.get(0).getPolicyComponents(), All.class);
+            assertEquals("1 alternatives should be available", 1, alts.size());
+            return CastUtils.cast(alts.get(0).getAssertions(), PolicyAssertion.class);
+        }
+    }
+    
+    public void setUpBus(String port) throws Exception {
+        SpringBusFactory bf = new SpringBusFactory();
+        bus = bf.createBus("org/apache/cxf/systest/ws/policy/rmwsdl.xml");
+        BusFactory.setDefaultBus(bus);
+        outRecorder = new OutMessageRecorder();
+        bus.getOutInterceptors().add(outRecorder);
+        inRecorder = new InMessageRecorder();
+        bus.getInInterceptors().add(inRecorder);
+    }
+}

Copied: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm10wsdl_server.xml (from r1499123, cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml)
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm10wsdl_server.xml?p2=cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm10wsdl_server.xml&p1=cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml&r1=1499123&r2=1499124&rev=1499124&view=diff
==============================================================================
    (empty)

Copied: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm12wsdl_server.xml (from r1499123, cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml)
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm12wsdl_server.xml?p2=cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm12wsdl_server.xml&p1=cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml&r1=1499123&r2=1499124&rev=1499124&view=diff
==============================================================================
--- cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl_server.xml (original)
+++ cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rm12wsdl_server.xml Tue Jul  2 21:46:55 2013
@@ -72,18 +72,29 @@ http://www.springframework.org/schema/be
 		</jaxws:features>
 	</jaxws:endpoint>
 
-    <wsp:Policy wsu:Id="AddressingPolicy"
+  <wsp:Policy wsu:Id="AddressingPolicy"
 		xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
 		<wsam:Addressing>
 			<wsp:Policy />
 		</wsam:Addressing>
 	</wsp:Policy>
 	<wsp:Policy wsu:Id="AddressingRmPolicy">
-                <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
-                    <wsp:Policy/>
-                </wsam:Addressing>
-                <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy">
-                    <wsrmp:BaseRetransmissionInterval Milliseconds="30000"/>
-                </wsrmp:RMAssertion>
+	    <wsp:ExactlyOne>
+	      <wsp:All>
+          <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
+            <wsp:Policy/>
+          </wsam:Addressing>
+	        <wsrmp:RMAssertion xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702">
+	          <wsp:Policy>
+	            <wsrmp:DeliveryAssurance>
+	              <wsp:Policy>
+	                <wsrmp:ExactlyOnce/>
+	                <wsrmp:InOrder/>
+	              </wsp:Policy>
+	            </wsrmp:DeliveryAssurance>
+	          </wsp:Policy>
+	        </wsrmp:RMAssertion>
+	      </wsp:All>
+	    </wsp:ExactlyOne>
     </wsp:Policy>
 </beans>

Modified: cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl.xml?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl.xml (original)
+++ cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/policy/rmwsdl.xml Tue Jul  2 21:46:55 2013
@@ -20,7 +20,6 @@
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:http="http://cxf.apache.org/transports/http/configuration"
-       xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
        xsi:schemaLocation="
 http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

Modified: cxf/trunk/testutils/src/main/resources/wsdl/greeter_control.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/testutils/src/main/resources/wsdl/greeter_control.wsdl?rev=1499124&r1=1499123&r2=1499124&view=diff
==============================================================================
--- cxf/trunk/testutils/src/main/resources/wsdl/greeter_control.wsdl (original)
+++ cxf/trunk/testutils/src/main/resources/wsdl/greeter_control.wsdl Tue Jul  2 21:46:55 2013
@@ -327,6 +327,40 @@
         </wsdl:port>
         
     </wsdl:service>
+    
+    <wsdl:service name="Reliable12GreeterService">
+        <wsdl:port binding="tns:GreeterSOAPBinding" name="GreeterPort">
+            <soap:address location="http://localhost:9020/SoapContext/GreeterPort"/>
+            <wsp:Policy xmlns:wsp="http://www.w3.org/2006/07/ws-policy">
+              <wsp:ExactlyOne>
+                <wsp:All>
+                  <wsrmp:RMAssertion xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702">
+                    <wsp:Policy>
+                      <wsrmp:DeliveryAssurance>
+                        <wsp:Policy>
+                          <wsrmp:ExactlyOnce/>
+                          <wsrmp:InOrder/>
+                        </wsp:Policy>
+                      </wsrmp:DeliveryAssurance>
+                    </wsp:Policy>
+                  </wsrmp:RMAssertion>
+                  <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
+                      <wsp:Policy/>
+                  </wsam:Addressing>
+                </wsp:All>
+              </wsp:ExactlyOne>
+            </wsp:Policy>
+        </wsdl:port> 
+        <wsdl:port binding="tns:GreeterSOAPBinding" name="GreeterPort2">
+            <soap:address location="http://localhost:9020/SoapContext/GreeterPort2"/>
+            <wsp:Policy xmlns:wsp="http://www.w3.org/2006/07/ws-policy">
+                <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata">
+                    <wsp:Policy/>
+                </wsam:Addressing>
+            </wsp:Policy>
+        </wsdl:port>
+        
+    </wsdl:service>
    
     <wsdl:service name="BasicGreeterService">
         <wsdl:port binding="tns:GreeterSOAPBinding" name="GreeterPort">