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/10/18 18:37:17 UTC

svn commit: r465292 - in /incubator/cxf/trunk/rt/ws/rm: ./ src/main/java/org/apache/cxf/ws/rm/ src/main/java/org/apache/cxf/ws/rm/impl/ src/main/java/org/apache/cxf/ws/rm/soap/ src/test/java/org/apache/cxf/ws/rm/impl/ src/test/java/org/apache/cxf/ws/rm...

Author: andreasmyth
Date: Wed Oct 18 09:37:16 2006
New Revision: 465292

URL: http://svn.apache.org/viewvc?view=rev&rev=465292
Log:
[JIRA CXF-137]: RM SoapInterceptor.

Added:
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java   (with props)
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java   (with props)
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/Messages.properties
      - copied unchanged from r465186, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/main/java/org/objectweb/celtix/ws/rm/soap/Messages.properties
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java
      - copied, changed from r465186, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/main/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandler.java
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java
      - copied, changed from r465239, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandlerTest.java
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/resources/
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/resources/Acknowledgment.xml
      - copied unchanged from r465269, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/resources/spec/Acknowledgment.xml
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/resources/Message1.xml
      - copied unchanged from r465275, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/resources/spec/Message1.xml
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/resources/Retransmission.xml
      - copied unchanged from r465269, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/resources/spec/Retransmission.xml
Removed:
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/Names.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMConstantsImpl.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMPropertiesImpl.java
Modified:
    incubator/cxf/trunk/rt/ws/rm/.ruleset
    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/impl/ContextUtils.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/DestinationSequenceImpl.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMInterceptor.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMUtils.java
    incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/SequenceFaultFactory.java
    incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/impl/RMInterceptorTest.java

Modified: incubator/cxf/trunk/rt/ws/rm/.ruleset
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/.ruleset?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/.ruleset (original)
+++ incubator/cxf/trunk/rt/ws/rm/.ruleset Wed Oct 18 09:37:16 2006
@@ -41,7 +41,7 @@
   <rule ref="rulesets/basic.xml/UnnecessaryConversionTemporary"/>
   <rule ref="rulesets/basic.xml/UnnecessaryFinalModifier"/>
   <rule ref="rulesets/basic.xml/UnnecessaryReturn"/>
-  <rule ref="rulesets/basic.xml/UselessOverridingMethod"/>
+  <!--rule ref="rulesets/basic.xml/UselessOverridingMethod"/-->
   
 <!--<rule ref="rulesets/braces.xml/ForLoopsMustUseBraces"/>-->
 <!--<rule ref="rulesets/braces.xml/IfElseStmtsMustUseBraces"/>-->

Added: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java?view=auto&rev=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java Wed Oct 18 09:37:16 2006
@@ -0,0 +1,176 @@
+/**
+ * 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.ws.rm;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+
+/**
+ * Holder for WS-RM names (of headers, namespaces etc.).
+ */
+public final class RMConstants {
+   
+    public static final String WSRM_NAMESPACE_NAME = 
+        "http://schemas.xmlsoap.org/ws/2005/02/rm";
+    
+    public static final String WSRMP_NAMESPACE_NAME = 
+        "http://schemas.xmlsoap.org/ws/2005/02/rm/policy";
+    
+    public static final String WSA_NAMESPACE_NAME = 
+        "http://schemas.xmlsoap.org/ws/2004/08/addressing";
+    
+    public static final String WSRM_NAMESPACE_PREFIX = "wsrm";
+    
+    public static final String WSRM_WSDL_NAMESPACE_NAME = 
+        WSRM_NAMESPACE_NAME + "/wsdl";
+    
+  
+    public static final String WSRM_SEQUENCE_NAME =
+        "Sequence";
+    
+    public static final QName WSRM_SEQUENCE_QNAME =
+        new QName(WSRM_NAMESPACE_NAME, WSRM_SEQUENCE_NAME);
+    
+    public static final String WSRM_SEQUENCE_ACK_NAME =
+        "SequenceAcknowledgement";
+    
+    public static final QName WSRM_SEQUENCE_ACK_QNAME =
+        new QName(WSRM_NAMESPACE_NAME, WSRM_SEQUENCE_ACK_NAME);
+    
+    public static final String WSRM_ACK_REQUESTED_NAME =
+        "AckRequested";
+    
+    public static final QName WSRM_ACK_REQUESTED_QNAME =
+        new QName(WSRM_NAMESPACE_NAME, WSRM_ACK_REQUESTED_NAME);
+    
+    public static final String WSA_ANONYMOUS_ADDRESS = 
+        WSA_NAMESPACE_NAME + "/anonymous";
+    
+    public static final String WSA_NONE_ADDRESS =
+        WSA_NAMESPACE_NAME + "/none";
+      
+    /**
+     * The set of headers understood by the protocol binding.
+     */
+    private static final Set<QName> HEADERS;
+
+    private static final String WSRM_CREATE_SEQUENCE_ACTION =
+        WSRM_NAMESPACE_NAME + "/CreateSequence";
+    
+    private static final String WSRM_CREATE_SEQUENCE_RESPONSE_ACTION =
+        WSRM_NAMESPACE_NAME + "/CreateSequenceResponse";
+    
+    private static final String WSRM_TERMINATE_SEQUENCE_ACTION =
+        WSRM_NAMESPACE_NAME + "/TerminateSequence";
+    
+    private static final String WSRM_LAST_MESSAGE_ACTION =
+        WSRM_NAMESPACE_NAME + "/LastMessage";
+    
+    private static final String WSRM_SEQUENCE_ACKNOWLEDGMENT_ACTION =
+        WSRM_NAMESPACE_NAME + "/SequenceAcknowledgement";
+    
+    private static final String WSRM_SEQUENCE_INFO_ACTION =
+        WSRM_NAMESPACE_NAME + "/SequenceInfo";
+    
+    private static final String WSRM_UNKNOWN_SEQUENCE_FAULT_CODE =
+        "UnknownSequence";
+    
+    private static final String WSRM_SEQUENCE_TERMINATED_FAULT_CODE =
+        "SequenceTerminated";
+    
+    private static final String WSRM_INVALID_ACKNOWLEDGMENT_FAULT_CODE =
+        "InvalidAcknowledgement";
+    
+    private static final String WSRM_MESSAGE_NUMBER_ROLLOVER_FAULT_CODE =
+        "MessageNumberRollover";
+    
+    private static final String WSRM_CREATE_SEQUENCE_REFUSED_FAULT_CODE =
+        "CreateSequenceRefused";
+    
+    private static final String WSRM_LAST_MESSAGE_NUMBER_EXCEEDED_FAULT_CODE =
+        "LastMessageNumberExceeded";
+    
+    static {
+        Set<QName> headers = new HashSet<QName>();
+        headers.add(WSRM_SEQUENCE_QNAME);
+        headers.add(WSRM_SEQUENCE_ACK_QNAME);
+        headers.add(WSRM_ACK_REQUESTED_QNAME);
+        HEADERS = Collections.unmodifiableSet(headers);
+    }
+    
+    private RMConstants() {
+    }
+    
+    public static Set<QName> getHeaders() {
+        return HEADERS;
+    }
+    
+    public static String getCreateSequenceAction() {
+        return WSRM_CREATE_SEQUENCE_ACTION;
+    }
+
+    public static String getCreateSequenceResponseAction() {
+        return WSRM_CREATE_SEQUENCE_RESPONSE_ACTION;
+    }
+    
+    public static String getTerminateSequenceAction() {
+        return WSRM_TERMINATE_SEQUENCE_ACTION;
+    }
+    
+    public static String getLastMessageAction() {
+        return WSRM_LAST_MESSAGE_ACTION;
+    }
+    
+    public static String getSequenceAcknowledgmentAction() {
+        return WSRM_SEQUENCE_ACKNOWLEDGMENT_ACTION;
+    }
+    
+    public static String getSequenceInfoAction() {
+        return WSRM_SEQUENCE_INFO_ACTION;
+    }
+    
+    public static QName getUnknownSequenceFaultCode() {
+        return new QName(WSRM_NAMESPACE_NAME, WSRM_UNKNOWN_SEQUENCE_FAULT_CODE);
+    }
+        
+    public static QName getSequenceTerminatedFaultCode() {
+        return new QName(WSRM_NAMESPACE_NAME, WSRM_SEQUENCE_TERMINATED_FAULT_CODE);
+    }
+        
+    public static QName getInvalidAcknowledgmentFaultCode() {
+        return new QName(RMConstants.WSRM_NAMESPACE_NAME, WSRM_INVALID_ACKNOWLEDGMENT_FAULT_CODE);
+    }
+  
+    public static QName getMessageNumberRolloverFaultCode() {
+        return new QName(WSRM_NAMESPACE_NAME, WSRM_MESSAGE_NUMBER_ROLLOVER_FAULT_CODE);
+    }
+    
+    public static QName getCreateSequenceRefusedFaultCode() {
+        return new QName(WSRM_NAMESPACE_NAME, WSRM_CREATE_SEQUENCE_REFUSED_FAULT_CODE);
+    }
+    
+    public static QName getLastMessageNumberExceededFaultCode() {
+        return new QName(WSRM_NAMESPACE_NAME, WSRM_LAST_MESSAGE_NUMBER_EXCEEDED_FAULT_CODE);
+    }
+}

Propchange: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMConstants.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=465292&r1=465291&r2=465292
==============================================================================
--- 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 Wed Oct 18 09:37:16 2006
@@ -30,10 +30,32 @@
     protected RMContextUtils() {
     }
     
+    /**
+     * Determine if message is outbound.
+     * 
+     * @param message the current Message
+     * @return true iff the message direction is outbound
+     */
+    public static boolean isOutbound(Message message) {
+        return org.apache.cxf.ws.addressing.ContextUtils.isOutbound(message);
+    }
+    
+    /**
+     * Retrieve the RM properties from the current message.
+     * @param message the current message
+     * @param outbound true iff the message direction is outbound
+     * @return the RM properties
+     */
     public static RMProperties retrieveRMProperties(Message message, boolean outbound) {
         return (RMProperties)message.get(getRMPropertiesKey(outbound));
     }
     
+    /**
+     * Store the RM properties in the current message.
+     * @param message the current message
+     * @param rmps the RM properties
+     * @param outbound iff the message direction is outbound
+     */
     public static void storeRMProperties(Message message, RMProperties rmps, boolean outbound) {
         String key = getRMPropertiesKey(outbound);
         message.put(key, rmps);
@@ -43,5 +65,7 @@
         return outbound ? RMMessageConstants.RM_PROPERTIES_OUTBOUND 
             : RMMessageConstants.RM_PROPERTIES_INBOUND;
     }
+    
+    
     
 }

Added: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java?view=auto&rev=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java (added)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java Wed Oct 18 09:37:16 2006
@@ -0,0 +1,76 @@
+/**
+ * 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.ws.rm;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.cxf.ws.rm.impl.RMUtils;
+
+public class RMProperties {
+    private SequenceType sequence;
+    private Collection<SequenceAcknowledgement> acks;
+    private Collection<AckRequestedType> acksRequested;
+    
+    public Collection<SequenceAcknowledgement> getAcks() {
+        return acks;
+    }
+    
+    public Collection<AckRequestedType> getAcksRequested() {
+        return acksRequested;
+    }
+    
+    public SequenceType getSequence() {
+        return sequence;
+    }
+    
+    public void setAcks(Collection<SequenceAcknowledgement> a) {
+        acks = a;
+    }
+    
+    public void setAcksRequested(Collection<AckRequestedType> ar) {
+        acksRequested = ar;       
+    }
+    
+    public void setSequence(SequenceType s) {
+        sequence = s;
+    }
+    
+    public void setSequence(SourceSequence seq) {
+        SequenceType s = RMUtils.getWSRMFactory().createSequenceType();
+        s.setIdentifier(seq.getIdentifier());
+        s.setMessageNumber(seq.getCurrentMessageNr());   
+        if (seq.isLastMessage()) {
+            s.setLastMessage(new SequenceType.LastMessage());
+        }
+        setSequence(s);
+    }
+    
+    public void addAck(DestinationSequence seq) {
+        if (null == acks) {
+            acks = new ArrayList<SequenceAcknowledgement>();
+        }
+        SequenceAcknowledgement ack = seq.getAcknowledgment();
+        acks.add(ack);
+        // TODO: move to caller
+        // seq.acknowledgmentSent();
+    }
+  
+}

Propchange: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMProperties.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/ContextUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/ContextUtils.java?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/ContextUtils.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/ContextUtils.java Wed Oct 18 09:37:16 2006
@@ -44,16 +44,6 @@
     }
 
     /**
-     * Determine if message is outbound.
-     * 
-     * @param message the current Message
-     * @return true iff the message direction is outbound
-     */
-    static boolean isOutbound(Message message) {
-        return org.apache.cxf.ws.addressing.ContextUtils.isOutbound(message);
-    }
-
-    /**
      * Determine if current messaging role is that of requestor.
      * 
      * @param message the current Message

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/DestinationSequenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/DestinationSequenceImpl.java?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/DestinationSequenceImpl.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/DestinationSequenceImpl.java Wed Oct 18 09:37:16 2006
@@ -34,6 +34,7 @@
 import org.apache.cxf.ws.addressing.v200408.EndpointReferenceType;
 import org.apache.cxf.ws.rm.DestinationSequence;
 import org.apache.cxf.ws.rm.Identifier;
+import org.apache.cxf.ws.rm.RMConstants;
 import org.apache.cxf.ws.rm.SequenceAcknowledgement;
 import org.apache.cxf.ws.rm.SequenceAcknowledgement.AcknowledgementRange;
 import org.apache.cxf.ws.rm.SequenceFault;
@@ -82,7 +83,7 @@
     public void acknowledge(BigInteger messageNumber) throws SequenceFault {
         if (null != lastMessageNumber && messageNumber.compareTo(lastMessageNumber) > 0) {
             SequenceFaultType sf = RMUtils.getWSRMFactory().createSequenceFaultType();
-            sf.setFaultCode(RMUtils.getRMConstants().getLastMessageNumberExceededFaultCode());
+            sf.setFaultCode(RMConstants.getLastMessageNumberExceededFaultCode());
             Message msg = new Message("LAST_MESSAGE_NUMBER_EXCEEDED_EXC", LOG, this);
             throw new SequenceFault(msg.toString(), sf);
         }
@@ -176,7 +177,7 @@
     boolean canPiggybackAckOnPartialResponse() {
         // TODO: should also check if we allow breaking the WI Profile rule by which no headers
         // can be included in a HTTP response
-        return getAcksTo().getAddress().getValue().equals(Names.WSA_ANONYMOUS_ADDRESS);
+        return getAcksTo().getAddress().getValue().equals(RMConstants.WSA_ANONYMOUS_ADDRESS);
     }
      
     final void setDestination(Destination d) {

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMInterceptor.java?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMInterceptor.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMInterceptor.java Wed Oct 18 09:37:16 2006
@@ -48,7 +48,9 @@
 import org.apache.cxf.ws.addressing.v200408.AttributedURI;
 import org.apache.cxf.ws.addressing.v200408.EndpointReferenceType;
 import org.apache.cxf.ws.rm.Identifier;
+import org.apache.cxf.ws.rm.RMConstants;
 import org.apache.cxf.ws.rm.RMContextUtils;
+import org.apache.cxf.ws.rm.RMProperties;
 import org.apache.cxf.ws.rm.RetransmissionQueue;
 import org.apache.cxf.ws.rm.SequenceAcknowledgement;
 import org.apache.cxf.ws.rm.SequenceFault;
@@ -128,7 +130,7 @@
 
     public void handleMessage(Message msg) throws Fault {
         try {
-            if (ContextUtils.isOutbound(msg)) {
+            if (RMContextUtils.isOutbound(msg)) {
                 handleOutbound(msg, true);
             } else {
                 handleInbound(msg, true);
@@ -141,7 +143,7 @@
     
     public void handleFault(Message msg) {
         try {
-            if (ContextUtils.isOutbound(msg)) {
+            if (RMContextUtils.isOutbound(msg)) {
                 handleOutbound(msg, true);
             } else {
                 handleInbound(msg, true);
@@ -176,21 +178,21 @@
         boolean isApplicationMessage = isAplicationMessage(action);
         System.out.println("isApplicationMessage: " + isApplicationMessage);
         
-        RMPropertiesImpl rmpsOut = (RMPropertiesImpl)RMContextUtils.retrieveRMProperties(message, true);
+        RMProperties rmpsOut = (RMProperties)RMContextUtils.retrieveRMProperties(message, true);
         if (null == rmpsOut) {
-            rmpsOut = new RMPropertiesImpl();
+            rmpsOut = new RMProperties();
             RMContextUtils.storeRMProperties(message, rmpsOut, true);
         } else {
             System.out.println("Got existing RMPropertiesImpl");
         }
         
-        RMPropertiesImpl rmpsIn = null;
+        RMProperties rmpsIn = null;
         Identifier inSeqId = null;
         BigInteger inMessageNumber = null;
         
         if (isApplicationMessage) {
                         
-            rmpsIn = (RMPropertiesImpl)RMContextUtils.retrieveRMProperties(message, false);
+            rmpsIn = (RMProperties)RMContextUtils.retrieveRMProperties(message, false);
             
             if (null != rmpsIn && null != rmpsIn.getSequence()) {
                 inSeqId = rmpsIn.getSequence().getIdentifier();
@@ -224,7 +226,7 @@
         // created Acknowledgement messages only)
 
         if (isApplicationMessage 
-            || RMUtils.getRMConstants().getSequenceAcknowledgmentAction().equals(action)) {
+            || RMConstants.getSequenceAcknowledgmentAction().equals(action)) {
             AttributedURI to = VersionTransformer.convert(maps.getTo());
             assert null != to;
             addAcknowledgements(destination, rmpsOut, inSeqId, to);
@@ -293,19 +295,19 @@
     }
     
     boolean isAplicationMessage(String action) {
-        if (RMUtils.getRMConstants().getCreateSequenceAction().equals(action)
-            || RMUtils.getRMConstants().getCreateSequenceResponseAction().equals(action)
-            || RMUtils.getRMConstants().getTerminateSequenceAction().equals(action)
-            || RMUtils.getRMConstants().getLastMessageAction().equals(action)
-            || RMUtils.getRMConstants().getSequenceAcknowledgmentAction().equals(action)
-            || RMUtils.getRMConstants().getSequenceInfoAction().equals(action)) {
+        if (RMConstants.getCreateSequenceAction().equals(action)
+            || RMConstants.getCreateSequenceResponseAction().equals(action)
+            || RMConstants.getTerminateSequenceAction().equals(action)
+            || RMConstants.getLastMessageAction().equals(action)
+            || RMConstants.getSequenceAcknowledgmentAction().equals(action)
+            || RMConstants.getSequenceInfoAction().equals(action)) {
             return false;
         }
         return true;
     }
     
     void addAcknowledgements(Destination destination, 
-                             RMPropertiesImpl rmpsOut, 
+                             RMProperties rmpsOut, 
                              Identifier inSeqId, 
                              AttributedURI to) {
 
@@ -364,8 +366,8 @@
                 } else {
                     acksTo = VersionTransformer.convert(maps.getReplyTo());
                     // for oneways
-                    if (Names.WSA_NONE_ADDRESS.equals(acksTo.getAddress().getValue())) {
-                        acksTo = RMUtils.createReference(Names.WSA_ANONYMOUS_ADDRESS);
+                    if (RMConstants.WSA_NONE_ADDRESS.equals(acksTo.getAddress().getValue())) {
+                        acksTo = RMUtils.createReference(RMConstants.WSA_ANONYMOUS_ADDRESS);
                     }
                 }
                 

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMUtils.java?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMUtils.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/RMUtils.java Wed Oct 18 09:37:16 2006
@@ -27,22 +27,20 @@
 
 import org.apache.cxf.ws.policy.PolicyConstants;
 import org.apache.cxf.ws.policy.PolicyConstantsImpl;
-import org.apache.cxf.ws.rm.RMConstants;
+
 // import org.apache.cxf.ws.rm.persistence.PersistenceUtils;
 
 public final class RMUtils {
    
     private static final org.apache.cxf.ws.addressing.v200408.ObjectFactory WSA_FACTORY;
     private static final org.apache.cxf.ws.rm.ObjectFactory WSRM_FACTORY;
-    private static final RMConstants WSRM_CONSTANTS;
     private static final AddressingConstants WSA_CONSTANTS; 
     private static final PolicyConstants WSP_CONSTANTS;
     // private static final PersistenceUtils WSRM_PERSISTENCE_UTILS;
     
     static {
         WSA_FACTORY = new org.apache.cxf.ws.addressing.v200408.ObjectFactory();
-        WSRM_FACTORY = new org.apache.cxf.ws.rm.ObjectFactory();
-        WSRM_CONSTANTS = new RMConstantsImpl();        
+        WSRM_FACTORY = new org.apache.cxf.ws.rm.ObjectFactory();        
         WSA_CONSTANTS = new AddressingConstantsImpl();
         WSP_CONSTANTS = new PolicyConstantsImpl();
         // WSRM_PERSISTENCE_UTILS = new PersistenceUtils();       
@@ -57,10 +55,6 @@
     
     public static org.apache.cxf.ws.rm.ObjectFactory getWSRMFactory() {
         return WSRM_FACTORY;
-    }
-    
-    public static RMConstants getRMConstants() {
-        return WSRM_CONSTANTS;
     }
     
     public static AddressingConstants getAddressingConstants() {

Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/SequenceFaultFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/SequenceFaultFactory.java?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/SequenceFaultFactory.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/impl/SequenceFaultFactory.java Wed Oct 18 09:37:16 2006
@@ -24,6 +24,7 @@
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.ws.rm.Identifier;
+import org.apache.cxf.ws.rm.RMConstants;
 import org.apache.cxf.ws.rm.SequenceFault;
 import org.apache.cxf.ws.rm.SequenceFaultType;
 
@@ -37,7 +38,7 @@
 
     SequenceFault createUnknownSequenceFault(Identifier sid) {
         SequenceFaultType sf = RMUtils.getWSRMFactory().createSequenceFaultType();
-        sf.setFaultCode(RMUtils.getRMConstants().getUnknownSequenceFaultCode());
+        sf.setFaultCode(RMConstants.getUnknownSequenceFaultCode());
         Message msg = new Message("UNKNOWN_SEQUENCE_EXC", LOG, sid.getValue());
         return new SequenceFault(msg.toString(), sf);
     }    

Copied: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java (from r465186, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/main/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandler.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=465292&p1=incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/main/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandler.java&r1=465186&p2=incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java&r2=465292
==============================================================================
--- incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/main/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandler.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptor.java Wed Oct 18 09:37:16 2006
@@ -1,9 +1,28 @@
-package org.objectweb.celtix.ws.rm.soap;
+/**
+ * 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.ws.rm.soap;
 
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
+import java.util.Collections;
 import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -14,146 +33,152 @@
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.namespace.QName;
-import javax.xml.soap.Name;
-import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPHeader;
-import javax.xml.soap.SOAPHeaderElement;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.ws.handler.MessageContext;
-import javax.xml.ws.handler.soap.SOAPHandler;
-import javax.xml.ws.handler.soap.SOAPMessageContext;
-
-
-import org.objectweb.celtix.bindings.BindingContextUtils;
-import org.objectweb.celtix.bindings.DataBindingCallback;
-import org.objectweb.celtix.common.logging.LogUtils;
-import org.objectweb.celtix.common.util.PackageUtils;
-import org.objectweb.celtix.context.ObjectMessageContext;
-import org.objectweb.celtix.ws.addressing.AddressingProperties;
-import org.objectweb.celtix.ws.addressing.AttributedURIType;
-import org.objectweb.celtix.ws.addressing.ContextUtils;
-import org.objectweb.celtix.ws.rm.AckRequestedType;
-import org.objectweb.celtix.ws.rm.CreateSequenceRequest;
-import org.objectweb.celtix.ws.rm.CreateSequenceResponse;
-import org.objectweb.celtix.ws.rm.Names;
-import org.objectweb.celtix.ws.rm.RMContextUtils;
-import org.objectweb.celtix.ws.rm.RMProperties;
-import org.objectweb.celtix.ws.rm.RMPropertiesImpl;
-import org.objectweb.celtix.ws.rm.RMUtils;
-import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
-import org.objectweb.celtix.ws.rm.SequenceType;
-import org.objectweb.celtix.ws.rm.TerminateSequenceRequest;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.PackageUtils;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.ws.addressing.soap.MAPCodec;
+import org.apache.cxf.ws.rm.AckRequestedType;
+import org.apache.cxf.ws.rm.RMConstants;
+import org.apache.cxf.ws.rm.RMContextUtils;
+import org.apache.cxf.ws.rm.RMProperties;
+import org.apache.cxf.ws.rm.SequenceAcknowledgement;
+import org.apache.cxf.ws.rm.SequenceType;
 
 
 /**
  * Protocol Handler responsible for {en|de}coding the RM 
  * Properties for {outgo|incom}ing messages.
  */
-public class RMSoapHandler implements SOAPHandler<SOAPMessageContext> {
+public class RMSoapInterceptor extends AbstractSoapInterceptor {
 
     protected static JAXBContext jaxbContext;
 
-    private static final Logger LOG = LogUtils.getL7dLogger(RMSoapHandler.class);
+    private static final Logger LOG = LogUtils.getL7dLogger(RMSoapInterceptor.class);
     private static final String WS_RM_PACKAGE = 
         PackageUtils.getPackageName(SequenceType.class);
+    
+    private Set<String> before = Collections.singleton(MAPCodec.class.getName());
 
     /**
      * Constructor.
      */
-    public RMSoapHandler() {
+    public RMSoapInterceptor() {
     } 
+    
+    // PhaseInterceptor interface
 
-    /**
-     * @return the set of SOAP headers understood by this handler 
-     */
-    public Set<QName> getHeaders() {
-        return Names.HEADERS;
+    public Set<String> getAfter() {
+        return CastUtils.cast(Collections.EMPTY_SET);        
+    }
+
+    public Set<String> getBefore() {
+        return before;
     }
+
+    public String getId() {
+        return RMSoapInterceptor.class.getName();
+    }
+
+    public String getPhase() {
+        return Phase.PRE_LOGICAL;
+    }
+      
+    // AbstractSoapInterceptor interface 
     
     /**
-     * Invoked for normal processing of inbound and outbound messages.
-     *
-     * @param context the messsage context
+     * @return the set of SOAP headers understood by this handler 
      */
-    public boolean handleMessage(SOAPMessageContext context) {
-        return mediate(context);
+    public Set<QName> getUnderstoodHeaders() {
+        return RMConstants.getHeaders();
     }
+    
+    // Interceptor interface
 
-    /**
-     * Invoked for fault processing.
-     *
-     * @param context the messsage context
+    /* (non-Javadoc)
+     * @see org.apache.cxf.interceptor.Interceptor#handleFault(org.apache.cxf.message.Message)
      */
-    public boolean handleFault(SOAPMessageContext context) {
-        return mediate(context);
+    public void handleFault(SoapMessage message) {
+        mediate(message);        
     }
 
-    /**
-     * Called at the conclusion of a message exchange pattern just prior to
-     * the JAX-WS runtime dispatching a message, fault or exception.
-     *
-     * @param context the message context
+    /* (non-Javadoc)
+     * @see org.apache.cxf.interceptor.Interceptor#handleMessage(org.apache.cxf.message.Message)
      */
-    public void close(MessageContext context) {
+
+    public void handleMessage(SoapMessage message) throws Fault {
+        mediate(message);
     }
 
 
     /**
-     * Mediate message flow, peforming MAP {en|de}coding.
+     * Mediate message flow, peforming RMProperties {en|de}coding.
      * 
-     * @param context the messsage context
-     * @return true if processing should continue on dispatch path 
-     */     
-    boolean mediate(SOAPMessageContext context) {
-        if (ContextUtils.isOutbound(context)) {
-            encode(context);
+     * @param message the messsage
+     */ 
+
+    void mediate(SoapMessage message) {
+        if (RMContextUtils.isOutbound(message)) {
+            encode(message);
         } else {
-            decode(context);
-            storeBindingInfo(context);
+            decode(message);
+            // storeBindingInfo(context);
         }
-        return true;
     }
     
     /**
-     * Encode the current RM properties  in protocol-specific headers.
+     * Encode the current RM properties in protocol-specific headers.
      *
-     * @param context the message context.
+     * @param message the SOAP message
      */
-    private void encode(SOAPMessageContext context) {
-        RMProperties rmps = RMContextUtils.retrieveRMProperties(context, true);
+    
+    void encode(SoapMessage message) {
+        RMProperties rmps = RMContextUtils.retrieveRMProperties(message, true);
         if (null == rmps) {
             // nothing to encode
             return;
         }
-        SOAPMessage message = context.getMessage();
         encode(message, rmps);
     }
 
     /**
-     * Encode the current RM properties  in protocol-specific headers.
+     * Encode the current RM properties in protocol-specific headers.
      *
      * @param message the SOAP message.
      * @param rmps the current RM properties.
      */
 
-    public static void encode(SOAPMessage message, RMProperties rmps) {
+    public static void encode(SoapMessage message, RMProperties rmps) {
+        if (null == rmps) {
+            return;
+        }
+        LOG.log(Level.FINE, "encoding RMPs in SOAP headers");
+        
         try {
-            SOAPEnvelope env = message.getSOAPPart().getEnvelope();
-            SOAPHeader header = env.getHeader() != null 
-                                ? env.getHeader()
-                                : env.addHeader(); 
-                                
+            Element header = message.getHeaders(Element.class);
             discardRMHeaders(header);
-            header.addNamespaceDeclaration(Names.WSRM_NAMESPACE_PREFIX,
-                                           Names.WSRM_NAMESPACE_NAME);
+            
+            // add WSRM namespace declaration to header, instead of
+            // repeating in each individual child node
+            header.setAttributeNS("http://www.w3.org/2000/xmlns/",
+                                  "xmlns:" + RMConstants.WSRM_NAMESPACE_PREFIX,
+                                 RMConstants.WSRM_NAMESPACE_NAME);
             Marshaller marshaller = getJAXBContext().createMarshaller();
             marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
            
             SequenceType seq = rmps.getSequence();
             if (null != seq) {
                 encodeProperty(seq, 
-                               Names.WSRM_SEQUENCE_QNAME, 
+                               RMConstants.WSRM_SEQUENCE_QNAME, 
                                SequenceType.class, 
                                header,
                                marshaller);
@@ -162,7 +187,7 @@
             if (null != acks) {
                 for (SequenceAcknowledgement ack : acks) {
                     encodeProperty(ack, 
-                                   Names.WSRM_SEQUENCE_ACK_QNAME, 
+                                   RMConstants.WSRM_SEQUENCE_ACK_QNAME, 
                                    SequenceAcknowledgement.class, 
                                    header,
                                    marshaller);
@@ -172,71 +197,71 @@
             if (null != requested) {
                 for (AckRequestedType ar : requested) {
                     encodeProperty(ar, 
-                                   Names.WSRM_ACK_REQUESTED_QNAME, 
+                                   RMConstants.WSRM_ACK_REQUESTED_QNAME, 
                                    AckRequestedType.class, 
                                    header,
                                    marshaller);
                 }
-            }                           
+            }         
         } catch (SOAPException se) {
             LOG.log(Level.WARNING, "SOAP_HEADER_ENCODE_FAILURE_MSG", se); 
         } catch (JAXBException je) {
             LOG.log(Level.WARNING, "SOAP_HEADER_ENCODE_FAILURE_MSG", je);
-        }
+        }        
     }
     
     /**
-     * Decode the RM properties from protocol-specific headers.
+     * Decode the RM properties from protocol-specific headers
+     * and store them in the message.
      *  
-     * @param context the messsage context
-     * @param the decoded MAPs
-     * @exception SOAPFaultException if decoded MAPs are invalid 
+     * @param message the SOAP mesage
      */
-    private void decode(SOAPMessageContext context) { 
-        SOAPMessage message = context.getMessage();
+    void decode(SoapMessage message) {
         RMProperties rmps = unmarshalRMProperties(message);
-        RMContextUtils.storeRMProperties(context, rmps, false);
+        RMContextUtils.storeRMProperties(message, rmps, false);
     }
     
     /**
-     * Decode the RM properties from the SOAP message.
+     * Decode the RM properties from protocol-specific headers.
      * 
      * @param message the SOAP message
      * @return the RM properties
      */
-    public RMProperties unmarshalRMProperties(SOAPMessage message) { 
-        RMProperties rmps = new RMPropertiesImpl();
+    public RMProperties unmarshalRMProperties(SoapMessage message) { 
+        RMProperties rmps = new RMProperties();
         
         try {
             Collection<SequenceAcknowledgement> acks = new ArrayList<SequenceAcknowledgement>();
             Collection<AckRequestedType> requested = new ArrayList<AckRequestedType>();           
             
-            SOAPEnvelope env = message.getSOAPPart().getEnvelope();
-            SOAPHeader header = env.getHeader();
-            
+            Element header = message.getHeaders(Element.class);
+ 
             if (header != null) {
                 Unmarshaller unmarshaller = 
                     getJAXBContext().createUnmarshaller();
-                Iterator headerElements = header.examineAllHeaderElements();
-                while (headerElements.hasNext()) {
-                    SOAPHeaderElement headerElement = 
-                        (SOAPHeaderElement)headerElements.next();
-                    Name headerName = headerElement.getElementName();
-                    String localName = headerName.getLocalName(); 
-                    if (Names.WSRM_NAMESPACE_NAME.equals(headerName.getURI())) {
+                NodeList headerElements = header.getChildNodes();
+                for (int i = 0; i < headerElements.getLength(); i++) {
+                    Node node = headerElements.item(i);
+                    if (Node.ELEMENT_NODE != node.getNodeType()) {
+                        continue;
+                    }
+                    Element headerElement = (Element)headerElements.item(i);
+                    String headerURI = headerElement.getNamespaceURI();
+                    String localName = headerElement.getLocalName();
+                    if (RMConstants.WSRM_NAMESPACE_NAME.equals(headerURI)) {
                         LOG.log(Level.INFO, "decoding RM header {0}", localName);
-                        if (Names.WSRM_SEQUENCE_NAME.equals(localName)) {
+                        if (RMConstants.WSRM_SEQUENCE_NAME.equals(localName)) {
                             SequenceType s = decodeProperty(SequenceType.class,
                                                             headerElement,
                                                             unmarshaller);
                             
                             rmps.setSequence(s);
-                        } else if (Names.WSRM_SEQUENCE_ACK_NAME.equals(localName)) {
+                        } else if (RMConstants.WSRM_SEQUENCE_ACK_NAME.equals(localName)) {
                             SequenceAcknowledgement ack = decodeProperty(SequenceAcknowledgement.class,
                                                             headerElement,
                                                             unmarshaller);
                             acks.add(ack);                            
-                        } else if (Names.WSRM_ACK_REQUESTED_NAME.equals(localName)) {
+                        } else if (RMConstants.WSRM_ACK_REQUESTED_NAME.equals(localName)) {
                             AckRequestedType ar = decodeProperty(AckRequestedType.class,
                                                             headerElement,
                                                             unmarshaller);
@@ -250,11 +275,9 @@
                 if (requested.size() > 0) {
                     rmps.setAcksRequested(requested);
                 }
-            }
-        } catch (SOAPException se) {
-            LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", se); 
-        } catch (JAXBException je) {
-            LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", je); 
+            } 
+        } catch (JAXBException ex) {
+            LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", ex); 
         }
         return rmps;
     }
@@ -276,13 +299,13 @@
      * @param value the value to encode
      * @param qname the QName for the header 
      * @param clz the class
-     * @param header the SOAP header
+     * @param header the SOAP header element
      * @param marshaller the JAXB marshaller to use
      */
     private static <T> void encodeProperty(T value, 
                                            QName qname, 
                                            Class<T> clz, 
-                                           SOAPHeader header,
+                                           Element header,
                                            Marshaller marshaller)
         throws JAXBException {
         if (value != null) {
@@ -300,7 +323,7 @@
      * @return the decoded EndpointReference
      */
     public static <T> T decodeProperty(Class<T> clz,
-                                       SOAPHeaderElement headerElement,
+                                       Element headerElement,
                                        Unmarshaller unmarshaller)
         throws JAXBException {
         if (null == unmarshaller) {
@@ -316,25 +339,28 @@
      * Discard any pre-existing RM headers - this may occur if the runtime
      * re-uses a SOAP message.
      *
-     * @param header the SOAP header
+     * @param header the SOAP header element
      */
-    private static void discardRMHeaders(SOAPHeader header) throws SOAPException {
-        Iterator headerElements = header.examineAllHeaderElements();
-        while (headerElements.hasNext()) {
-            SOAPHeaderElement headerElement =
-                (SOAPHeaderElement)headerElements.next();
-            Name headerName = headerElement.getElementName();
-            if (Names.WSRM_NAMESPACE_NAME.equals(headerName.getURI())) {
-                headerElement.detachNode();
+    private static void discardRMHeaders(Element header) throws SOAPException {
+        NodeList headerElements =
+            header.getElementsByTagNameNS(RMConstants.WSRM_NAMESPACE_NAME, "*");
+        
+        for (int i = 0; i < headerElements.getLength(); i++) {
+            Node headerElement = headerElements.item(i);
+            if (RMConstants.WSRM_NAMESPACE_NAME.equals(headerElement.getNamespaceURI())) {
+                header.removeChild(headerElement);
             }
+
             
             // REVISIT should detach wsa:Action on resend
-            if (org.objectweb.celtix.ws.addressing.Names.WSA_NAMESPACE_NAME
+            /*
+            if (org.apache.cxf.ws.addressing.Names.WSA_NAMESPACE_NAME
                 .equals(headerName.getURI())
-                && org.objectweb.celtix.ws.addressing.Names.WSA_ACTION_NAME
+                && org.apache.cxf.ws.addressing.Names.WSA_ACTION_NAME
                 .equals(headerName.getLocalName())) {
                 headerElement.detachNode();
             }
+            */
         }
     }
     
@@ -347,6 +373,7 @@
      * 
      * @param context
      */
+    /*
     private void storeBindingInfo(MessageContext context) {
         assert !ContextUtils.isOutbound(context);
         AddressingProperties maps = ContextUtils.retrieveMAPs(context, false, false);
@@ -382,6 +409,7 @@
             context.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.FALSE);            
         }
     }
+    */
 
 }
 

Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/impl/RMInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/impl/RMInterceptorTest.java?view=diff&rev=465292&r1=465291&r2=465292
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/impl/RMInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/impl/RMInterceptorTest.java Wed Oct 18 09:37:16 2006
@@ -45,6 +45,7 @@
 import org.apache.cxf.ws.addressing.v200408.AttributedURI;
 import org.apache.cxf.ws.rm.Identifier;
 import org.apache.cxf.ws.rm.RMMessageConstants;
+import org.apache.cxf.ws.rm.RMProperties;
 import org.apache.cxf.ws.rm.RetransmissionQueue;
 import org.apache.cxf.ws.rm.SequenceFault;
 import org.apache.cxf.ws.rm.interceptor.SequenceTerminationPolicyType;
@@ -239,7 +240,7 @@
             RMInterceptor.class.getDeclaredMethod("getSequence", 
                 new Class[] {Identifier.class, Message.class, AddressingProperties.class}),
             RMInterceptor.class.getDeclaredMethod("addAcknowledgements",
-                new Class[] {Destination.class, RMPropertiesImpl.class, Identifier.class, 
+                new Class[] {Destination.class, RMProperties.class, Identifier.class, 
                              AttributedURI.class})            
         };
         RMInterceptor rmi = control.createMock(RMInterceptor.class, mocked);       
@@ -247,7 +248,7 @@
         EasyMock.expect(message.get(Message.REQUESTOR_ROLE)).andReturn(Boolean.TRUE).anyTimes();        
         EasyMock.expect(message.get(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND))
             .andReturn(maps).anyTimes();
-        RMPropertiesImpl rmpsOut = new RMPropertiesImpl();
+        RMProperties rmpsOut = new RMProperties();
         EasyMock.expect(message.get(RMMessageConstants.RM_PROPERTIES_OUTBOUND)).andReturn(rmpsOut);
         EasyMock.expect(message.get(RMMessageConstants.RM_PROPERTIES_INBOUND)).andReturn(null);        
         Source source = control.createMock(Source.class);

Copied: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java (from r465239, incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandlerTest.java)
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java?view=diff&rev=465292&p1=incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandlerTest.java&r1=465239&p2=incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java&r2=465292
==============================================================================
--- incubator/cxf/tags/celtix/pre_apache/rt/ws/rm/src/test/java/org/objectweb/celtix/ws/rm/soap/RMSoapHandlerTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java Wed Oct 18 09:37:16 2006
@@ -1,56 +1,63 @@
-package org.objectweb.celtix.ws.rm.soap;
+/**
+ * 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.
+ */
 
-import java.io.IOException;
+package org.apache.cxf.ws.rm.soap;
+
+import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.Set;
 
 import javax.xml.namespace.QName;
-import javax.xml.soap.MessageFactory;
-import javax.xml.soap.Name;
-import javax.xml.soap.SOAPEnvelope;
-import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPHeader;
-import javax.xml.soap.SOAPHeaderElement;
-import javax.xml.soap.SOAPMessage;
-import javax.xml.ws.handler.soap.SOAPMessageContext;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
 
-import static javax.xml.ws.handler.MessageContext.MESSAGE_OUTBOUND_PROPERTY;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 import junit.framework.TestCase;
 
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.ws.rm.AckRequestedType;
+import org.apache.cxf.ws.rm.Identifier;
+import org.apache.cxf.ws.rm.RMConstants;
+import org.apache.cxf.ws.rm.RMContextUtils;
+import org.apache.cxf.ws.rm.RMProperties;
+import org.apache.cxf.ws.rm.SequenceAcknowledgement;
+import org.apache.cxf.ws.rm.SequenceType;
 import org.easymock.classextension.EasyMock;
 import org.easymock.classextension.IMocksControl;
-import org.objectweb.celtix.bindings.soap.SOAPBindingImpl;
-import org.objectweb.celtix.context.ObjectMessageContext;
-import org.objectweb.celtix.context.ObjectMessageContextImpl;
-import org.objectweb.celtix.datamodel.soap.W3CConstants;
-import org.objectweb.celtix.ws.rm.AckRequestedType;
-import org.objectweb.celtix.ws.rm.Identifier;
-import org.objectweb.celtix.ws.rm.Names;
-import org.objectweb.celtix.ws.rm.RMContextUtils;
-import org.objectweb.celtix.ws.rm.RMEndpointTest;
-import org.objectweb.celtix.ws.rm.RMProperties;
-import org.objectweb.celtix.ws.rm.RMPropertiesImpl;
-import org.objectweb.celtix.ws.rm.RMUtils;
-import org.objectweb.celtix.ws.rm.SequenceAcknowledgement;
-import org.objectweb.celtix.ws.rm.SequenceAcknowledgement.AcknowledgementRange;
-import org.objectweb.celtix.ws.rm.SequenceType;
-import org.objectweb.celtix.ws.rm.TestInputStreamContext;
-
-import static org.easymock.classextension.EasyMock.expect;
 
-public class RMSoapHandlerTest extends TestCase {
+public class RMSoapInterceptorTest extends TestCase {
 
     private static final String SEQ_IDENTIFIER = "http://Business456.com/RM/ABC";
     private static final BigInteger MSG1_MESSAGE_NUMBER = BigInteger.ONE;
     private static final BigInteger MSG2_MESSAGE_NUMBER = BigInteger.ONE.add(BigInteger.ONE);
 
     private IMocksControl control;
-    private RMSoapHandler codec;
     
     private SequenceType s1;
     private SequenceType s2;
@@ -58,126 +65,142 @@
     private SequenceAcknowledgement ack2;
     private AckRequestedType ar1;
     private AckRequestedType ar2;
-    private SOAPBindingImpl sb = new SOAPBindingImpl(false);
     
     public void setUp() {
         control = EasyMock.createNiceControl(); 
-        codec = new RMSoapHandler();
     }
 
-    public void testGetHeaders() throws Exception {
-
-        Set<QName> headers = codec.getHeaders();
-        assertTrue("expected Sequence header", headers.contains(Names.WSRM_SEQUENCE_QNAME));
-        assertTrue("expected SequenceAcknowledgment header", headers.contains(Names.WSRM_SEQUENCE_ACK_QNAME));
-        assertTrue("expected AckRequested header", headers.contains(Names.WSRM_ACK_REQUESTED_QNAME));
-    }
-    
-    public void testClose() {
-        SOAPMessageContext ctx = control.createMock(SOAPMessageContext.class);
-        codec.close(ctx);
+    public void testGetUnderstoodHeaders() throws Exception {
+        RMSoapInterceptor codec = new RMSoapInterceptor();
+        Set<QName> headers = codec.getUnderstoodHeaders();
+        assertTrue("expected Sequence header", 
+                   headers.contains(RMConstants.WSRM_SEQUENCE_QNAME));
+        assertTrue("expected SequenceAcknowledgment header", 
+                   headers.contains(RMConstants.WSRM_SEQUENCE_ACK_QNAME));
+        assertTrue("expected AckRequested header", 
+                   headers.contains(RMConstants.WSRM_ACK_REQUESTED_QNAME));
     }
     
     public void testHandleMessage() throws NoSuchMethodException {
-        Method m = RMSoapHandler.class.getDeclaredMethod("mediate", 
-            new Class[] {SOAPMessageContext.class});
-        codec = control.createMock(RMSoapHandler.class, new Method[] {m});
-        SOAPMessageContext ctx = control.createMock(SOAPMessageContext.class);
-        expect(codec.mediate(ctx)).andReturn(true);
+        Method m = RMSoapInterceptor.class.getDeclaredMethod("mediate", 
+            new Class[] {SoapMessage.class});
+        RMSoapInterceptor codec = control.createMock(RMSoapInterceptor.class, new Method[] {m});
+        SoapMessage msg = control.createMock(SoapMessage.class);
+        codec.mediate(msg);
+        EasyMock.expectLastCall();
         
         control.replay();
-        assertTrue(codec.handleMessage(ctx));
+        codec.handleMessage(msg);
         control.verify();
     }
     
     public void testHandleFault() throws NoSuchMethodException {
-        Method m = RMSoapHandler.class.getDeclaredMethod("mediate", 
-            new Class[] {SOAPMessageContext.class});
-        codec = control.createMock(RMSoapHandler.class, new Method[] {m});
-        SOAPMessageContext ctx = control.createMock(SOAPMessageContext.class);
-        expect(codec.mediate(ctx)).andReturn(true);
+        Method m = RMSoapInterceptor.class.getDeclaredMethod("mediate", 
+            new Class[] {SoapMessage.class});
+        RMSoapInterceptor codec = control.createMock(RMSoapInterceptor.class, new Method[] {m});
+        SoapMessage msg = control.createMock(SoapMessage.class);
+        codec.mediate(msg);
+        EasyMock.expectLastCall();
         
         control.replay();
-        assertTrue(codec.handleFault(ctx));
+        codec.handleFault(msg);
         control.verify();
     }
+    
+    public void testMediate() throws NoSuchMethodException {
+        Method m1 = RMSoapInterceptor.class.getDeclaredMethod("encode", 
+                                                             new Class[] {SoapMessage.class});
+        Method m2 = RMSoapInterceptor.class.getDeclaredMethod("decode", 
+                                                              new Class[] {SoapMessage.class});
+        RMSoapInterceptor codec = control.createMock(RMSoapInterceptor.class, new Method[] {m1, m2});
+        
+        SoapMessage msg = control.createMock(SoapMessage.class);
+        Exchange exchange = control.createMock(Exchange.class);
+        EasyMock.expect(msg.getExchange()).andReturn(exchange);
+        EasyMock.expect(exchange.getOutMessage()).andReturn(msg);
+        codec.encode(msg);
+        EasyMock.expectLastCall();
+        
+        control.replay();
+        codec.mediate(msg);
+        control.verify();
+                
+        control.reset();
+        EasyMock.expect(msg.getExchange()).andReturn(null);
+        codec.decode(msg);
+        EasyMock.expectLastCall();
+        
+        control.replay();
+        codec.mediate(msg);
+        control.verify();
+        
+    }
 
-    public void testOutbound() throws Exception {
-
+    public void testEncode() throws Exception {
+        RMSoapInterceptor codec = new RMSoapInterceptor();
         setUpOutbound();
-        SOAPMessageContext context = null;
+        SoapMessage message = setupOutboundMessage();
 
         // no RM headers
-
-        context = setupOutboundContext();
-        assertTrue("expected dispatch to proceed", codec.handleMessage(context));
-        verifyHeaders(context, new String[] {});
-        codec.close(context);
+   
+        codec.handleMessage(message);
+        verifyHeaders(message, new String[] {});
 
         // one sequence header
 
-        context = setupOutboundContext();
-        
-        RMProperties rmps = RMContextUtils.retrieveRMProperties(context, true);     
-        rmps.setSequence(s1);
-        
-        assertTrue("expected dispatch to proceed", codec.handleMessage(context));
-        verifyHeaders(context, new String[] {Names.WSRM_SEQUENCE_NAME});
-        codec.close(context);
+        message = setupOutboundMessage();        
+        RMProperties rmps = RMContextUtils.retrieveRMProperties(message, true);     
+        rmps.setSequence(s1);        
+        codec.encode(message);
+        verifyHeaders(message, new String[] {RMConstants.WSRM_SEQUENCE_NAME});
 
         // one acknowledgment header
 
-        context = setupOutboundContext();
-        rmps = RMContextUtils.retrieveRMProperties(context, true);  
-        
+        message = setupOutboundMessage(); 
+        rmps = RMContextUtils.retrieveRMProperties(message, true);          
         Collection<SequenceAcknowledgement> acks = new ArrayList<SequenceAcknowledgement>();
         acks.add(ack1);
-        rmps.setAcks(acks);
-        assertTrue("expected dispatch to proceed", codec.handleMessage(context));
-        verifyHeaders(context, new String[] {Names.WSRM_SEQUENCE_ACK_NAME});
+        rmps.setAcks(acks);        
+        codec.encode(message);
+        verifyHeaders(message, new String[] {RMConstants.WSRM_SEQUENCE_ACK_NAME});
 
         // two acknowledgment headers
 
-        context = setupOutboundContext();
-        rmps = RMContextUtils.retrieveRMProperties(context, true);
-        
+        message = setupOutboundMessage();
+        rmps = RMContextUtils.retrieveRMProperties(message, true);        
         acks.add(ack2);
         rmps.setAcks(acks);
-        assertTrue("expected dispatch to proceed", codec.handleMessage(context));
-        verifyHeaders(context, new String[] {Names.WSRM_SEQUENCE_ACK_NAME, Names.WSRM_SEQUENCE_ACK_NAME});
+        codec.encode(message);
+        verifyHeaders(message, new String[] {RMConstants.WSRM_SEQUENCE_ACK_NAME, 
+                                             RMConstants.WSRM_SEQUENCE_ACK_NAME});
 
         // one ack requested header
 
-        context = setupOutboundContext();
-        rmps = RMContextUtils.retrieveRMProperties(context, true);
-        
+        message = setupOutboundMessage();
+        rmps = RMContextUtils.retrieveRMProperties(message, true);        
         Collection<AckRequestedType> requested = new ArrayList<AckRequestedType>();
         requested.add(ar1);
         rmps.setAcksRequested(requested);
-        assertTrue("expected dispatch to proceed", codec.handleMessage(context));
-        verifyHeaders(context, new String[] {Names.WSRM_ACK_REQUESTED_NAME});
+        codec.encode(message);
+        verifyHeaders(message, new String[] {RMConstants.WSRM_ACK_REQUESTED_NAME});
 
         // two ack requested headers
 
-        context = setupOutboundContext();
-        rmps = RMContextUtils.retrieveRMProperties(context, true); 
-        
+        message = setupOutboundMessage();
+        rmps = RMContextUtils.retrieveRMProperties(message, true);         
         requested.add(ar2);
         rmps.setAcksRequested(requested);
-        assertTrue("expected dispatch to proceed", codec.handleMessage(context));
-        verifyHeaders(context, new String[] {Names.WSRM_ACK_REQUESTED_NAME, Names.WSRM_ACK_REQUESTED_NAME});
+        codec.encode(message);
+        verifyHeaders(message, new String[] {RMConstants.WSRM_ACK_REQUESTED_NAME, 
+                                             RMConstants.WSRM_ACK_REQUESTED_NAME});
     }
 
-    public void testInboundSequence() throws IOException {
-        TestInputStreamContext istreamCtx = new TestInputStreamContext();
-        istreamCtx.setInputStream(RMEndpointTest.class
-            .getResourceAsStream("resources/spec/Message1.xml"));
-        sb = new SOAPBindingImpl(false);
-        ObjectMessageContext objectCtx = new ObjectMessageContextImpl();
-        SOAPMessageContext context = (SOAPMessageContext)sb.createBindingMessageContext(objectCtx);
-        sb.read(istreamCtx, context);
-        assertTrue(codec.handleMessage(context));
-        RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
+
+    public void testDecodeSequence() throws XMLStreamException {
+        SoapMessage message = setUpInboundMessage("resources/Message1.xml");
+        RMSoapInterceptor codec = new RMSoapInterceptor();
+        codec.handleMessage(message);
+        RMProperties rmps = RMContextUtils.retrieveRMProperties(message, false);
         SequenceType st = rmps.getSequence();
         assertNotNull(st);
         assertEquals(st.getIdentifier().getValue(), SEQ_IDENTIFIER);
@@ -188,17 +211,11 @@
 
     }
 
-    public void testInboundAcknowledgements() throws IOException {
-        TestInputStreamContext istreamCtx = new TestInputStreamContext();
-        istreamCtx.setInputStream(RMEndpointTest.class
-            .getResourceAsStream("resources/spec/Acknowledgment.xml"));
-        sb = new SOAPBindingImpl(false);
-        ObjectMessageContext objectCtx = new ObjectMessageContextImpl();
-        SOAPMessageContext context = (SOAPMessageContext)sb.createBindingMessageContext(objectCtx);
-        sb.read(istreamCtx, context);
-        
-        assertTrue(codec.handleMessage(context));
-        RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
+    public void testDecodeAcknowledgements() throws XMLStreamException {
+        SoapMessage message = setUpInboundMessage("resources/Acknowledgment.xml");
+        RMSoapInterceptor codec = new RMSoapInterceptor();
+        codec.handleMessage(message);
+        RMProperties rmps = RMContextUtils.retrieveRMProperties(message, false);
         Collection<SequenceAcknowledgement> acks = rmps.getAcks();
         assertNotNull(acks);
         assertEquals(1, acks.size());
@@ -210,17 +227,11 @@
         assertNull(rmps.getAcksRequested());
     }
 
-    public void testInboundAcksRequested() throws IOException {
-        TestInputStreamContext istreamCtx = new TestInputStreamContext();
-        istreamCtx.setInputStream(RMEndpointTest.class
-            .getResourceAsStream("resources/spec/Retransmission.xml"));
-        sb = new SOAPBindingImpl(false);
-        ObjectMessageContext objectCtx = new ObjectMessageContextImpl();
-        SOAPMessageContext context = (SOAPMessageContext)sb.createBindingMessageContext(objectCtx);
-        sb.read(istreamCtx, context);
-        
-        assertTrue(codec.handleMessage(context));
-        RMProperties rmps = RMContextUtils.retrieveRMProperties(context, false);
+    public void testDecodeAcksRequested() throws XMLStreamException {
+        SoapMessage message = setUpInboundMessage("resources/Retransmission.xml");
+        RMSoapInterceptor codec = new RMSoapInterceptor();
+        codec.handleMessage(message);
+        RMProperties rmps = RMContextUtils.retrieveRMProperties(message, false);
         Collection<AckRequestedType> requested = rmps.getAcksRequested();
         assertNotNull(requested);
         assertEquals(1, requested.size());
@@ -237,7 +248,7 @@
     }
 
     private void setUpOutbound() {
-        org.objectweb.celtix.ws.rm.ObjectFactory factory = RMUtils.getWSRMFactory();
+        org.apache.cxf.ws.rm.ObjectFactory factory = new org.apache.cxf.ws.rm.ObjectFactory();
         s1 = factory.createSequenceType();
         Identifier sid = factory.createIdentifier();
         sid.setValue("sequence1");
@@ -250,7 +261,8 @@
         s2.setMessageNumber(BigInteger.TEN);
 
         ack1 = factory.createSequenceAcknowledgement();
-        AcknowledgementRange r = factory.createSequenceAcknowledgementAcknowledgementRange();
+        SequenceAcknowledgement.AcknowledgementRange r = 
+            factory.createSequenceAcknowledgementAcknowledgementRange();
         r.setLower(BigInteger.ONE);
         r.setUpper(BigInteger.ONE);
         ack1.getAcknowledgementRange().add(r);
@@ -268,50 +280,34 @@
 
         ar2 = factory.createAckRequestedType();
         ar2.setIdentifier(s2.getIdentifier());
-
-        sb = new SOAPBindingImpl(false);
     }
 
-    private SOAPMessageContext setupOutboundContext() throws Exception {
-        ObjectMessageContext objectCtx = new ObjectMessageContextImpl();
-        objectCtx.put(ObjectMessageContext.MESSAGE_INPUT, Boolean.FALSE);
-        objectCtx.put(MESSAGE_OUTBOUND_PROPERTY, Boolean.TRUE);
-        SOAPMessageContext context = (SOAPMessageContext)sb.createBindingMessageContext(objectCtx);
-
-        MessageFactory msgFactory = MessageFactory.newInstance();
-        SOAPMessage msg = msgFactory.createMessage();
-        msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
-        msg.getSOAPPart().getEnvelope().addNamespaceDeclaration(W3CConstants.NP_SCHEMA_XSD,
-                                                                W3CConstants.NU_SCHEMA_XSD);
-        msg.getSOAPPart().getEnvelope().addNamespaceDeclaration(W3CConstants.NP_SCHEMA_XSI,
-                                                                W3CConstants.NU_SCHEMA_XSI);
-        context.setMessage(msg);
+    private SoapMessage setupOutboundMessage() throws Exception {
+        Message message = new MessageImpl();
+        SoapMessage soapMessage = new SoapMessage(message);         
+        RMProperties rmps = new RMProperties();
+        RMContextUtils.storeRMProperties(soapMessage, rmps, true);
         
-        RMPropertiesImpl rmps = new RMPropertiesImpl();
-        RMContextUtils.storeRMProperties(context, rmps, true);
-        return context;
+        return soapMessage;
     }
 
-    private void verifyHeaders(SOAPMessageContext context, String... names) throws SOAPException {
-        SOAPMessage message = context.getMessage();
-        SOAPEnvelope env = message.getSOAPPart().getEnvelope();
-        SOAPHeader header = env.getHeader();
+    private void verifyHeaders(SoapMessage message, String... names) {
+        Element header = message.getHeaders(Element.class);
 
         // check all expected headers are present
 
         for (String name : names) {
             boolean found = false;
-            Iterator headerElements = header.examineAllHeaderElements();
-            while (headerElements.hasNext()) {
-                SOAPHeaderElement headerElement = (SOAPHeaderElement)headerElements.next();
-                Name headerName = headerElement.getElementName();
-                String localName = headerName.getLocalName();
-                if (headerName.getURI().equals(RMUtils.getRMConstants().getNamespaceURI())
+            NodeList headerElements = header.getChildNodes();
+            for (int i = 0; i < headerElements.getLength(); i++) {
+                Element headerElement = (Element)headerElements.item(i);
+                String namespace = headerElement.getNamespaceURI();
+                String localName = headerElement.getLocalName();
+                if (RMConstants.WSRM_NAMESPACE_NAME.equals(namespace)
                     && localName.equals(name)) {
                     found = true;
                     break;
-                } else if (headerName.getURI().equals(
-                    org.objectweb.celtix.ws.addressing.Names.WSA_NAMESPACE_NAME)
+                } else if (RMConstants.WSA_NAMESPACE_NAME.equals(namespace)
                     && localName.equals(name)) {
                     found = true;
                     break;
@@ -322,14 +318,13 @@
 
         // no other headers should be present
 
-        Iterator headerElements = header.examineAllHeaderElements();
-        while (headerElements.hasNext()) {
-            SOAPHeaderElement headerElement = (SOAPHeaderElement)headerElements.next();
-            Name headerName = headerElement.getElementName();
-            String localName = headerName.getLocalName();
-            assertTrue(RMUtils.getRMConstants().getNamespaceURI().equals(headerName.getURI()) 
-                || org.objectweb.celtix.ws.addressing.Names.WSA_NAMESPACE_NAME
-                .equals(headerName.getURI()));
+        NodeList headerElements = header.getChildNodes();
+        for (int i = 0; i < headerElements.getLength(); i++) {
+            Element headerElement = (Element)headerElements.item(i);  
+            String namespace = headerElement.getNamespaceURI();
+            String localName = headerElement.getLocalName();
+            assertTrue(RMConstants.WSRM_NAMESPACE_NAME.equals(namespace) 
+                || RMConstants.WSA_NAMESPACE_NAME.equals(namespace));
             boolean found = false;
             for (String name : names) {
                 if (localName.equals(name)) {
@@ -339,5 +334,17 @@
             }
             assertTrue("Unexpected header element " + localName, found);
         }
+    }
+    
+    private SoapMessage setUpInboundMessage(String resource) throws XMLStreamException {
+        Message message = new MessageImpl();
+        SoapMessage soapMessage = new SoapMessage(message);
+        InputStream is = RMSoapInterceptorTest.class.getResourceAsStream(resource);
+        assertNotNull(is);
+        XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(is);
+        soapMessage.setContent(XMLStreamReader.class, reader);
+        ReadHeadersInterceptor rji = new ReadHeadersInterceptor();
+        rji.handleMessage(soapMessage); 
+        return soapMessage;
     }
 }