You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/08/19 16:48:58 UTC

svn commit: r687067 - in /cxf/branches/2.0.x-fixes: api/ common/schemas/src/main/resources/schemas/wsdl/ rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/ rt/ws/addr/src/test/java/org/apa...

Author: dkulp
Date: Tue Aug 19 07:48:57 2008
New Revision: 687067

URL: http://svn.apache.org/viewvc?rev=687067&view=rev
Log:
[CXF-1747] Backport support for older ws-addressing spec to 2.0.x branch

Added:
    cxf/branches/2.0.x-fixes/common/schemas/src/main/resources/schemas/wsdl/addressing200403.xjb
      - copied unchanged from r685947, cxf/trunk/common/schemas/src/main/resources/schemas/wsdl/addressing200403.xjb
    cxf/branches/2.0.x-fixes/common/schemas/src/main/resources/schemas/wsdl/addressing200403.xsd
      - copied unchanged from r685947, cxf/trunk/common/schemas/src/main/resources/schemas/wsdl/addressing200403.xsd
Modified:
    cxf/branches/2.0.x-fixes/api/pom.xml
    cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
    cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/VersionTransformer.java
    cxf/branches/2.0.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java

Modified: cxf/branches/2.0.x-fixes/api/pom.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/api/pom.xml?rev=687067&r1=687066&r2=687067&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/api/pom.xml (original)
+++ cxf/branches/2.0.x-fixes/api/pom.xml Tue Aug 19 07:48:57 2008
@@ -155,6 +155,10 @@
                                     <bindingFile>${basedir}/target/schemas/schemas/wsdl/ws-addr-wsdl.xjb</bindingFile>
                                     <extension>true</extension>
                                 </xsdOption>
+                                   <xsdOption>
+                                    <xsd>${basedir}/target/schemas/schemas/wsdl/addressing200403.xsd</xsd>
+                                    <bindingFile>${basedir}/target/schemas/schemas/wsdl/addressing200403.xjb</bindingFile>
+                                </xsdOption>
                             </xsdOptions>
                         </configuration>
                         <goals>

Modified: cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java?rev=687067&r1=687066&r2=687067&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java (original)
+++ cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java Tue Aug 19 07:48:57 2008
@@ -27,6 +27,7 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.namespace.QName;
 
+
 // importation convention: if the same class name is used for 
 // 2005/08 and 2004/08, then the former version is imported
 // and the latter is fully qualified when used
@@ -77,7 +78,8 @@
      */
     public boolean isSupported(String namespace) {
         return NATIVE_VERSION.equals(namespace) 
-               || Names200408.WSA_NAMESPACE_NAME.equals(namespace);
+               || Names200408.WSA_NAMESPACE_NAME.equals(namespace)
+               || Names200403.WSA_NAMESPACE_NAME.equals(namespace);
     }
     
     /**
@@ -101,6 +103,23 @@
     }
 
     /**
+     * Convert from 2005/08 AttributedURI to 2004/03 AttributedURI.
+     * 
+     * @param internal the 2005/08 AttributedURIType
+     * @return an equivalent 2004/08 or 2004/03 AttributedURI
+     */
+    public static org.apache.cxf.ws.addressing.v200403.AttributedURI 
+    convertTo200403(AttributedURIType internal) {
+        org.apache.cxf.ws.addressing.v200403.AttributedURI exposed = Names200403.WSA_OBJECT_FACTORY
+            .createAttributedURI();
+        String exposedValue = Names.WSA_ANONYMOUS_ADDRESS.equals(internal.getValue())
+            ? Names200403.WSA_ANONYMOUS_ADDRESS : Names.WSA_NONE_ADDRESS.equals(internal.getValue())
+                ? Names200403.WSA_NONE_ADDRESS : internal.getValue();
+        exposed.setValue(exposedValue);
+        putAll(exposed.getOtherAttributes(), internal.getOtherAttributes());
+        return exposed;
+    }
+    /**
      * Convert from 2004/08 AttributedURI to 2005/08 AttributedURI.
      * 
      * @param exposed the 2004/08 AttributedURI
@@ -121,6 +140,22 @@
     }
     
     /**
+     * Convert from 2004/03 AttributedURI to 2005/08 AttributedURI.
+     * 
+     * @param exposed the 2004/03 AttributedURI
+     * @return an equivalent 2005/08 AttributedURIType
+     */
+    public static AttributedURIType convert(org.apache.cxf.ws.addressing.v200403.AttributedURI exposed) {
+        AttributedURIType internal = ContextUtils.WSA_OBJECT_FACTORY.createAttributedURIType();
+        String internalValue = Names200403.WSA_ANONYMOUS_ADDRESS.equals(exposed.getValue())
+            ? Names.WSA_ANONYMOUS_ADDRESS : Names200403.WSA_NONE_ADDRESS.equals(exposed.getValue())
+                ? Names.WSA_NONE_ADDRESS : exposed.getValue();
+        internal.setValue(internalValue);
+        putAll(internal.getOtherAttributes(), exposed.getOtherAttributes());
+        return internal;
+    }    
+
+    /**
      * Convert from 2005/08 EndpointReferenceType to 2004/08 
      * EndpointReferenceType.
      * 
@@ -160,6 +195,40 @@
     }
     
     /**
+     * Convert from 2005/08 EndpointReferenceType to 2004/03 EndpointReferenceType.
+     * 
+     * @param internal the 2005/08 EndpointReferenceType
+     * @return an equivalent 2004/03 EndpointReferenceType
+     */
+    public static org.apache.cxf.ws.addressing.v200403.EndpointReferenceType 
+    convertTo200403(EndpointReferenceType internal) {
+        org.apache.cxf.ws.addressing.v200403.EndpointReferenceType exposed = Names200403.WSA_OBJECT_FACTORY
+            .createEndpointReferenceType();
+        exposed.setAddress(convertTo200403(internal.getAddress()));
+
+        QName serviceQName = EndpointReferenceUtils.getServiceName(internal);
+        if (serviceQName != null) {
+            org.apache.cxf.ws.addressing.v200403.ServiceNameType serviceName = Names200403.WSA_OBJECT_FACTORY
+                .createServiceNameType();
+            serviceName.setValue(serviceQName);
+            exposed.setServiceName(serviceName);
+        }
+        String portLocalName = EndpointReferenceUtils.getPortName(internal);
+        if (portLocalName != null) {
+            String namespace = serviceQName.getNamespaceURI() != null
+                ? serviceQName.getNamespaceURI() : Names.WSDL_INSTANCE_NAMESPACE_NAME;
+            QName portQName = new QName(namespace, portLocalName);
+            org.apache.cxf.ws.addressing.v200403.AttributedQName portType = Names200403.WSA_OBJECT_FACTORY
+                .createAttributedQName();
+            portType.setValue(portQName);
+            exposed.setPortType(portType);
+        }
+        // no direct analogue for Metadata
+        addAll(exposed.getAny(), internal.getAny());
+        putAll(exposed.getOtherAttributes(), internal.getOtherAttributes());
+        return exposed;
+    }
+    /**
      * Convert from 2004/08 EndpointReferenceType to 2005/08 
      * EndpointReferenceType.
      * 
@@ -188,6 +257,32 @@
     }
 
     /**
+     * Convert from 2004/03 EndpointReferenceType to 2005/08 EndpointReferenceType.
+     * 
+     * @param exposed the 2004/03 EndpointReferenceType
+     * @return an equivalent 2005/08 EndpointReferenceType
+     */
+    public static EndpointReferenceType 
+    convert(org.apache.cxf.ws.addressing.v200403.EndpointReferenceType exposed) {
+        EndpointReferenceType internal = ContextUtils.WSA_OBJECT_FACTORY.createEndpointReferenceType();
+        internal.setAddress(convert(exposed.getAddress()));
+        // TODO ref parameters not present in 2004/03
+        // internal.setReferenceParameters(convert(exposed
+        // .getReferenceParameters()));
+        org.apache.cxf.ws.addressing.v200403.ServiceNameType serviceName = exposed.getServiceName();
+        org.apache.cxf.ws.addressing.v200403.AttributedQName portName = exposed.getPortType();
+        if (serviceName != null && portName != null) {
+            EndpointReferenceUtils.setServiceAndPortName(internal, serviceName.getValue(), portName
+                .getValue().getLocalPart());
+        }
+
+        // no direct analogue for ReferenceProperties
+        addAll(internal.getAny(), exposed.getAny());
+        putAll(internal.getOtherAttributes(), exposed.getOtherAttributes());
+        return internal;
+    }    
+    
+    /**
      * Convert from 2005/08 ReferenceParametersType to 2004/08
      * ReferenceParametersType.
      * 
@@ -223,6 +318,7 @@
         }
         return internal; 
     }
+     // THERE IS NO ReferenceParametersType for 2004/03
 
     /**
      * Convert from 2005/08 RelatesToType to 2004/08 Relationship.
@@ -249,7 +345,30 @@
     }
 
     /**
-     * Convert from 2004/08 Relationship to 2005/08 RelatesToType.
+     * Convert from 2005/08 RelatesToType to 2004/03 Relationship.
+     * 
+     * @param internal the 2005/08 RelatesToType
+     * @return an equivalent 2004/03 Relationship
+     */
+    public static org.apache.cxf.ws.addressing.v200403.Relationship convertTo200403(RelatesToType internal) {
+        org.apache.cxf.ws.addressing.v200403.Relationship exposed = null;
+        if (internal != null) {
+            exposed = Names200403.WSA_OBJECT_FACTORY.createRelationship();
+            exposed.setValue(internal.getValue());
+            String internalRelationshipType = internal.getRelationshipType();
+            if (internalRelationshipType != null) {
+                QName exposedRelationshipType = null;
+                if (!Names.WSA_RELATIONSHIP_REPLY.equals(internalRelationshipType)) {
+                    exposedRelationshipType = new QName(internalRelationshipType);
+                }
+                exposed.setRelationshipType(exposedRelationshipType);
+            }
+            putAll(exposed.getOtherAttributes(), internal.getOtherAttributes());
+        }
+        return exposed;
+    }
+    
+    /** Convert from 2004/08 Relationship to 2005/08 RelatesToType.
      * 
      * @param exposed the 2004/08 Relationship
      * @return an equivalent 2005/08 RelatesToType
@@ -273,15 +392,38 @@
         return internal; 
     }
     
-    /** 
+    /**
+     * Convert from 2004/03 Relationship to 2005/08 RelatesToType.
+     * 
+     * @param exposed the 2004/03 Relationship
+     * @return an equivalent 2005/08 RelatesToType
+     */
+    public static RelatesToType convert(org.apache.cxf.ws.addressing.v200403.Relationship exposed) {
+        RelatesToType internal = null;
+        if (exposed != null) {
+            internal = ContextUtils.WSA_OBJECT_FACTORY.createRelatesToType();
+            internal.setValue(exposed.getValue());
+            QName exposedRelationshipType = exposed.getRelationshipType();
+            if (exposedRelationshipType != null) {
+                String internalRelationshipType = Names.WSA_REPLY_NAME.equals(exposedRelationshipType
+                    .getLocalPart()) ? Names.WSA_RELATIONSHIP_REPLY : exposedRelationshipType.toString();
+                internal.setRelationshipType(internalRelationshipType);
+            }
+            internal.getOtherAttributes().putAll(exposed.getOtherAttributes());
+        }
+        return internal;
+    }
+
+    /**
      * @param exposedURI specifies the version WS-Addressing
      * @return JABXContext for the exposed namespace URI
      */
-    public static JAXBContext getExposedJAXBContext(String exposedURI) 
-        throws JAXBException {
+    public static JAXBContext getExposedJAXBContext(String exposedURI) throws JAXBException {
+
         return NATIVE_VERSION.equals(exposedURI)
-               ? ContextUtils.getJAXBContext()
-               : Names200408.getJAXBContext();
+            ? ContextUtils.getJAXBContext() : Names200408.WSA_NAMESPACE_NAME.equals(exposedURI) ? Names200408
+                .getJAXBContext() : Names200403.WSA_NAMESPACE_NAME.equals(exposedURI) ? Names200403
+                .getJAXBContext() : null;
     }
 
     /**
@@ -358,4 +500,49 @@
             }
         }        
     }
+    /**
+     * Holder for 2004/03 Names
+     */
+    public static class Names200403 {
+        public static final String WSA_NAMESPACE_NAME = "http://schemas.xmlsoap.org/ws/2004/03/addressing";
+        public static final String WSA_ANONYMOUS_ADDRESS = WSA_NAMESPACE_NAME + "/role/anonymous";
+        public static final String WSA_NONE_ADDRESS = WSA_NAMESPACE_NAME + "/role/none";
+        public static final org.apache.cxf.ws.addressing.v200403.ObjectFactory WSA_OBJECT_FACTORY = 
+            new org.apache.cxf.ws.addressing.v200403.ObjectFactory();
+        public static final Class<org.apache.cxf.ws.addressing.v200403.EndpointReferenceType> EPR_TYPE = 
+            org.apache.cxf.ws.addressing.v200403.EndpointReferenceType.class;
+
+        private static JAXBContext jaxbContext;
+
+        protected Names200403() {
+        }
+
+        /**
+         * Retrieve a JAXBContext for marshalling and unmarshalling JAXB generated types for the 2004/08
+         * version.
+         * 
+         * @return a JAXBContext
+         */
+        public static JAXBContext getJAXBContext() throws JAXBException {
+            synchronized (Names200403.class) {
+                if (jaxbContext == null) {
+                    Class clz = org.apache.cxf.ws.addressing.v200403.ObjectFactory.class;
+                    jaxbContext = JAXBContext.newInstance(clz.getPackage().getName(), clz.getClassLoader());
+                }
+            }
+            return jaxbContext;
+        }
+
+        /**
+         * Set the encapsulated JAXBContext (used by unit tests).
+         * 
+         * @param ctx JAXBContext
+         */
+        public static void setJAXBContext(JAXBContext ctx) throws JAXBException {
+            synchronized (Names200403.class) {
+                jaxbContext = ctx;
+            }
+        }
+    }
+
 }

Modified: cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/VersionTransformer.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/VersionTransformer.java?rev=687067&r1=687066&r2=687067&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/VersionTransformer.java (original)
+++ cxf/branches/2.0.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/VersionTransformer.java Tue Aug 19 07:48:57 2008
@@ -19,7 +19,6 @@
 
 package org.apache.cxf.ws.addressing.soap;
 
-
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
@@ -31,12 +30,7 @@
 import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
-
 import org.apache.cxf.common.logging.LogUtils;
-
-// importation convention: if the same class name is used for 
-// 2005/08 and 2004/08, then the former version is imported
-// and the latter is fully qualified when used
 import org.apache.cxf.ws.addressing.AttributedURIType;
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
 import org.apache.cxf.ws.addressing.Names;
@@ -44,36 +38,27 @@
 import org.apache.cxf.ws.addressing.v200408.AttributedURI;
 import org.apache.cxf.ws.addressing.v200408.Relationship;
 
-
 /**
- * This class is responsible for transforming between the native 
- * WS-Addressing schema version (i.e. 2005/08) and exposed
- * version (currently may be 2005/08 or 2004/08).
+ * This class is responsible for transforming between the native WS-Addressing schema version (i.e. 2005/08)
+ * and exposed version (currently may be 2005/08 or 2004/08).
  * <p>
- * The native version is that used throughout the stack, were the
- * WS-A types are represented via the JAXB generated types for the
- * 2005/08 schema.
+ * The native version is that used throughout the stack, were the WS-A types are represented via the JAXB
+ * generated types for the 2005/08 schema.
  * <p>
- * The exposed version is that used when the WS-A types are 
- * externalized, i.e. are encoded in the headers of outgoing 
- * messages. For outgoing requests, the exposed version is 
- * determined from configuration. For outgoing responses, the
- * exposed version is determined by the exposed version of
- * the corresponding request.
+ * The exposed version is that used when the WS-A types are externalized, i.e. are encoded in the headers of
+ * outgoing messages. For outgoing requests, the exposed version is determined from configuration. For
+ * outgoing responses, the exposed version is determined by the exposed version of the corresponding request.
  * <p>
- * The motivation for using different native and exposed types
- * is usually to facilitate a WS-* standard based on an earlier 
- * version of WS-Adressing (for example WS-RM depends on the
- * 2004/08 version).
+ * The motivation for using different native and exposed types is usually to facilitate a WS-* standard based
+ * on an earlier version of WS-Adressing (for example WS-RM depends on the 2004/08 version).
  */
-public class VersionTransformer 
-    extends org.apache.cxf.ws.addressing.VersionTransformer {
+public class VersionTransformer extends org.apache.cxf.ws.addressing.VersionTransformer {
 
     public static final Set<QName> HEADERS;
     private static final Logger LOG = LogUtils.getL7dLogger(VersionTransformer.class);
-    
+
     protected MAPCodec codec;
-    
+
     /**
      * Constructor.
      * 
@@ -82,69 +67,63 @@
     public VersionTransformer(MAPCodec mapCodec) {
         codec = mapCodec;
     }
-    
+
     /**
      * Encode message in exposed version.
      * 
      * @param exposeAs specifies the WS-Addressing version to expose
      * @param value the value to encode
-     * @param localName the localName for the header 
+     * @param localName the localName for the header
      * @param clz the class
      * @param header the SOAP header element
      * @param marshaller the JAXB marshaller to use
      */
-    public <T> void encodeAsExposed(String exposeAs,
-                                    T value,
-                                    String localName,
-                                    Class<T> clz,
-                                    Element header,
-                                    Marshaller marshaller) 
-        throws JAXBException {
+    public <T> void encodeAsExposed(String exposeAs, T value, String localName, Class<T> clz, Element header,
+                                    Marshaller marshaller) throws JAXBException {
         if (value != null) {
             if (NATIVE_VERSION.equals(exposeAs)) {
-                codec.encodeMAP(value,
-                                new QName(exposeAs, localName),
-                                clz,
-                                header,
-                                marshaller);
+                codec.encodeMAP(value, new QName(exposeAs, localName), clz, header, marshaller);
             } else if (Names200408.WSA_NAMESPACE_NAME.equals(exposeAs)) {
                 if (AttributedURIType.class.equals(clz)) {
-                    codec.encodeMAP(convert((AttributedURIType)value),
-                                    new QName(exposeAs, localName),
-                                    AttributedURI.class,
-                                    header,
-                                    marshaller);
+                    codec.encodeMAP(convert((AttributedURIType)value), new QName(exposeAs, localName),
+                                    AttributedURI.class, header, marshaller);
                 } else if (EndpointReferenceType.class.equals(clz)) {
-                    codec.encodeMAP(convert((EndpointReferenceType)value),
+                    codec.encodeMAP(convert((EndpointReferenceType)value), new QName(exposeAs, localName),
+                                    Names200408.EPR_TYPE, header, marshaller);
+                } else if (RelatesToType.class.equals(clz)) {
+                    codec.encodeMAP(convert((RelatesToType)value), new QName(exposeAs, localName),
+                                    Relationship.class, header, marshaller);
+                }
+            } else if (Names200403.WSA_NAMESPACE_NAME.equals(exposeAs)) {
+                if (AttributedURIType.class.equals(clz)) {
+                    codec.encodeMAP(convertTo200403((AttributedURIType)value),
                                     new QName(exposeAs, localName),
-                                    Names200408.EPR_TYPE,
-                                    header,
+                                    org.apache.cxf.ws.addressing.v200403.AttributedURI.class, header,
                                     marshaller);
+                } else if (EndpointReferenceType.class.equals(clz)) {
+                    codec.encodeMAP(convertTo200403((EndpointReferenceType)value), new QName(exposeAs,
+                                                                                             localName),
+                                    Names200403.EPR_TYPE, header, marshaller);
                 } else if (RelatesToType.class.equals(clz)) {
-                    codec.encodeMAP(convert((RelatesToType)value),
-                                    new QName(exposeAs, localName),
-                                    Relationship.class,
-                                    header,
+                    codec.encodeMAP(convertTo200403((RelatesToType)value), new QName(exposeAs, localName),
+                                    org.apache.cxf.ws.addressing.v200403.Relationship.class, header,
                                     marshaller);
                 }
-            } 
+            }
         }
     }
-    
+
     /**
      * Decodes a MAP from a exposed version.
-     *
+     * 
      * @param encodedAs specifies the encoded version
      * @param clz the class
      * @param headerElement the SOAP header element
      * @param marshaller the JAXB marshaller to use
      * @return the decoded value
      */
-    public <T> T decodeAsNative(String encodedAs,
-                                Class<T> clz,
-                                Element headerElement,
-                                Unmarshaller unmarshaller) 
-        throws JAXBException {
+    public <T> T decodeAsNative(String encodedAs, Class<T> clz, Element headerElement,
+                                Unmarshaller unmarshaller) throws JAXBException {
         T ret = null;
         LOG.fine("decodeAsNative: encodedAs: " + encodedAs);
         LOG.fine("                class: " + clz.getName());
@@ -153,60 +132,87 @@
             ret = codec.decodeMAP(clz, headerElement, unmarshaller);
         } else if (Names200408.WSA_NAMESPACE_NAME.equals(encodedAs)) {
             if (AttributedURIType.class.equals(clz)) {
-                return clz.cast(convert(codec.decodeMAP(AttributedURI.class, 
-                                                  headerElement, 
-                                                  unmarshaller)));
+                ret = clz.cast(convert(codec.decodeMAP(AttributedURI.class, headerElement, unmarshaller)));
+            } else if (EndpointReferenceType.class.equals(clz)) {
+                ret = clz.cast(convert(codec.decodeMAP(Names200408.EPR_TYPE, headerElement, unmarshaller)));
+            } else if (RelatesToType.class.equals(clz)) {
+                ret = clz.cast(convert(codec.decodeMAP(Relationship.class, headerElement, unmarshaller)));
+            }
+        } else if (Names200403.WSA_NAMESPACE_NAME.equals(encodedAs)) {
+            if (AttributedURIType.class.equals(clz)) {
+                ret = clz.cast(convert(codec
+                    .decodeMAP(org.apache.cxf.ws.addressing.v200403.AttributedURI.class, headerElement,
+                               unmarshaller)));
             } else if (EndpointReferenceType.class.equals(clz)) {
-                return clz.cast(convert(codec.decodeMAP(Names200408.EPR_TYPE, 
-                                                  headerElement, 
-                                                  unmarshaller)));
-            }  else if (RelatesToType.class.equals(clz)) {
-                return clz.cast(convert(codec.decodeMAP(Relationship.class, 
-                                                  headerElement, 
-                                                  unmarshaller)));
-            }           
+                ret = clz.cast(convert(codec.decodeMAP(Names200403.EPR_TYPE, headerElement, unmarshaller)));
+            } else if (RelatesToType.class.equals(clz)) {
+                ret = clz.cast(convert(codec
+                    .decodeMAP(org.apache.cxf.ws.addressing.v200403.Relationship.class, headerElement,
+                               unmarshaller)));
+            }
         }
         return ret;
     }
-           
+
     /**
-     * Augment the set of headers understood by the protocol binding
-     * with the 2004/08 header QNames.
+     * Augment the set of headers understood by the protocol binding with the 2004/08 header QNames.
      */
     static {
         Set<QName> headers = new HashSet<QName>();
         headers.addAll(Names.HEADERS);
         Names200408.addHeaders(headers);
+        Names200403.addHeaders(headers);
         HEADERS = Collections.unmodifiableSet(headers);
     }
-    
+
     /**
      * Holder for 2004/08 Names
      */
     public static final class Names200408 
         extends org.apache.cxf.ws.addressing.VersionTransformer.Names200408 {
-        
+
         protected Names200408() {
         }
-        
+
         /**
          * Adds 2004/08 headers to set.
          * 
          * @param headers set of headers
          */
         private static void addHeaders(Set<QName> headers) {
-            headers.add(new QName(WSA_NAMESPACE_NAME, 
-                                  Names.WSA_FROM_NAME));
-            headers.add(new QName(WSA_NAMESPACE_NAME, 
-                                  Names.WSA_TO_NAME));
-            headers.add(new QName(WSA_NAMESPACE_NAME, 
-                                  Names.WSA_REPLYTO_NAME));
-            headers.add(new QName(WSA_NAMESPACE_NAME, 
-                                  Names.WSA_FAULTTO_NAME));
-            headers.add(new QName(WSA_NAMESPACE_NAME, 
-                                  Names.WSA_ACTION_NAME));
-            headers.add(new QName(WSA_NAMESPACE_NAME, 
-                                  Names.WSA_MESSAGEID_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_FROM_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_TO_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_REPLYTO_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_FAULTTO_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_ACTION_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_MESSAGEID_NAME));
         }
     }
+
+    /**
+     * Adds 2004/03 headers to set.
+     * 
+     * @param headers set of headers
+     */
+    public static final class Names200403 
+        extends org.apache.cxf.ws.addressing.VersionTransformer.Names200403 {
+
+        protected Names200403() {
+        }
+
+        /**
+         * Adds 2004/08 headers to set.
+         * 
+         * @param headers set of headers
+         */
+        private static void addHeaders(Set<QName> headers) {
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_FROM_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_TO_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_REPLYTO_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_FAULTTO_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_ACTION_NAME));
+            headers.add(new QName(WSA_NAMESPACE_NAME, Names.WSA_MESSAGEID_NAME));
+        }
+    }
+
 }

Modified: cxf/branches/2.0.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java?rev=687067&r1=687066&r2=687067&view=diff
==============================================================================
--- cxf/branches/2.0.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java (original)
+++ cxf/branches/2.0.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java Tue Aug 19 07:48:57 2008
@@ -19,7 +19,6 @@
 
 package org.apache.cxf.ws.addressing.soap;
 
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -35,7 +34,6 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
-
 import org.apache.cxf.binding.soap.SoapConstants;
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.binding.soap.SoapMessage;
@@ -69,7 +67,6 @@
 import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND;
 import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND;
 
-
 public class MAPCodecTest extends Assert {
 
     private MAPCodec codec;
@@ -103,28 +100,57 @@
     @Test
     public void testGetHeaders() throws Exception {
         Set<QName> headers = codec.getUnderstoodHeaders();
-        assertTrue("expected From header", 
-                   headers.contains(Names.WSA_FROM_QNAME));
-        assertTrue("expected To header", 
-                   headers.contains(Names.WSA_TO_QNAME));
-        assertTrue("expected ReplyTo header", 
-                   headers.contains(Names.WSA_REPLYTO_QNAME));
-        assertTrue("expected FaultTo header", 
-                   headers.contains(Names.WSA_FAULTTO_QNAME));
-        assertTrue("expected Action header", 
-                   headers.contains(Names.WSA_ACTION_QNAME));
-        assertTrue("expected MessageID header", 
-                   headers.contains(Names.WSA_MESSAGEID_QNAME));
+        assertTrue("expected From header", headers.contains(Names.WSA_FROM_QNAME));
+        assertTrue("expected To header", headers.contains(Names.WSA_TO_QNAME));
+        assertTrue("expected ReplyTo header", headers.contains(Names.WSA_REPLYTO_QNAME));
+        assertTrue("expected FaultTo header", headers.contains(Names.WSA_FAULTTO_QNAME));
+        assertTrue("expected Action header", headers.contains(Names.WSA_ACTION_QNAME));
+        assertTrue("expected MessageID header", headers.contains(Names.WSA_MESSAGEID_QNAME));
+    }
+
+    @Test
+    public void testRequestorInboundNonNative200403() throws Exception {
+        String uri = VersionTransformer.Names200403.WSA_NAMESPACE_NAME;
+        SoapMessage message = setUpMessage(true, false, false, false, uri);
+        codec.handleMessage(message);
+        control.verify();
+        verifyMessage(message, true, false, false);
+    }
+
+    @Test
+    public void testResponderInboundNonNative200403() throws Exception {
+        String uri = VersionTransformer.Names200403.WSA_NAMESPACE_NAME;
+        SoapMessage message = setUpMessage(false, false, false, false, uri);
+        codec.handleMessage(message);
+        control.verify();
+        verifyMessage(message, false, false, false);
     }
 
     @Test
+    public void testRequestorOutboundNonNative200403() throws Exception {
+        String uri = VersionTransformer.Names200403.WSA_NAMESPACE_NAME;
+        SoapMessage message = setUpMessage(true, true, false, false, uri);
+        codec.handleMessage(message);
+        control.verify();
+        verifyMessage(message, true, true, false);
+    }
+
+    @Test
+    public void testResponderOutboundNonNative200403() throws Exception {
+        String uri = VersionTransformer.Names200403.WSA_NAMESPACE_NAME;
+        SoapMessage message = setUpMessage(false, true, false, false, uri);
+        codec.handleMessage(message);
+        control.verify();
+        verifyMessage(message, false, true, false);
+    }
+
     public void testRequestorOutbound() throws Exception {
         SoapMessage message = setUpMessage(true, true);
         codec.handleMessage(message);
         control.verify();
         verifyMessage(message, true, true, true);
     }
-    
+
     @Test
     public void testRequestorOutboundPreExistingSOAPAction() throws Exception {
         SoapMessage message = setUpMessage(true, true, false, true);
@@ -133,17 +159,16 @@
         control.verify();
         verifyMessage(message, true, true, true);
     }
-    
+
     @Test
     public void testRequestorOutboundNonNative() throws Exception {
         String uri = VersionTransformer.Names200408.WSA_NAMESPACE_NAME;
-        SoapMessage message = 
-            setUpMessage(true, true, false, false, uri);
+        SoapMessage message = setUpMessage(true, true, false, false, uri);
         codec.handleMessage(message);
         control.verify();
         verifyMessage(message, true, true, false);
     }
-    
+
     @Test
     public void testResponderInbound() throws Exception {
         SoapMessage message = setUpMessage(false, false);
@@ -159,17 +184,16 @@
         control.verify();
         verifyMessage(message, false, true, true);
     }
-    
+
     @Test
     public void testResponderInboundNonNative() throws Exception {
         String uri = VersionTransformer.Names200408.WSA_NAMESPACE_NAME;
-        SoapMessage message = 
-            setUpMessage(false, false, false, false, uri);
+        SoapMessage message = setUpMessage(false, false, false, false, uri);
         codec.handleMessage(message);
         control.verify();
         verifyMessage(message, false, false, false);
     }
-    
+
     @Test
     public void testResponderOutboundInvalidMAP() throws Exception {
         SoapMessage message = setUpMessage(false, true, true);
@@ -177,14 +201,12 @@
             codec.handleMessage(message);
             fail("expected SOAPFaultException on invalid MAP");
         } catch (SoapFault sfe) {
-            assertEquals("unexpected fault string",
-                         "Duplicate Message ID urn:uuid:12345", 
-                         sfe.getMessage());
+            assertEquals("unexpected fault string", "Duplicate Message ID urn:uuid:12345", sfe.getMessage());
         }
         control.verify();
         verifyMessage(message, false, true, true);
     }
-    
+
     @Test
     public void testResponderOutboundPreExistingSOAPAction() throws Exception {
         SoapMessage message = setUpMessage(false, true, false, true);
@@ -197,13 +219,12 @@
     @Test
     public void testResponderOutboundNonNative() throws Exception {
         String uri = VersionTransformer.Names200408.WSA_NAMESPACE_NAME;
-        SoapMessage message = 
-            setUpMessage(false, true, false, false, uri);
+        SoapMessage message = setUpMessage(false, true, false, false, uri);
         codec.handleMessage(message);
         control.verify();
         verifyMessage(message, false, true, false);
     }
-    
+
     @Test
     public void testRequestorInbound() throws Exception {
         SoapMessage message = setUpMessage(true, false);
@@ -211,51 +232,32 @@
         control.verify();
         verifyMessage(message, true, false, true);
     }
-    
+
     @Test
     public void testRequestorInboundNonNative() throws Exception {
         String uri = VersionTransformer.Names200408.WSA_NAMESPACE_NAME;
-        SoapMessage message = 
-            setUpMessage(true, false, false, false, uri);
+        SoapMessage message = setUpMessage(true, false, false, false, uri);
         codec.handleMessage(message);
         control.verify();
         verifyMessage(message, true, false, false);
     }
 
-    private SoapMessage setUpMessage(boolean requestor, 
-                                     boolean outbound)
-        throws Exception {
-        return setUpMessage(requestor, outbound, false); 
+    private SoapMessage setUpMessage(boolean requestor, boolean outbound) throws Exception {
+        return setUpMessage(requestor, outbound, false);
     }
 
-    private SoapMessage setUpMessage(boolean requestor, 
-                                     boolean outbound,
-                                     boolean invalidMAP) 
+    private SoapMessage setUpMessage(boolean requestor, boolean outbound, boolean invalidMAP)
         throws Exception {
-        return setUpMessage(requestor, 
-                            outbound,
-                            invalidMAP,
-                            false);
+        return setUpMessage(requestor, outbound, invalidMAP, false);
     }
 
-    private SoapMessage setUpMessage(boolean requestor, 
-                                     boolean outbound,
-                                     boolean invalidMAP,
-                                     boolean preExistingSOAPAction) 
-        throws Exception {
-        return setUpMessage(requestor, 
-                            outbound,
-                            invalidMAP,
-                            preExistingSOAPAction,
-                            Names.WSA_NAMESPACE_NAME);
+    private SoapMessage setUpMessage(boolean requestor, boolean outbound, boolean invalidMAP,
+                                     boolean preExistingSOAPAction) throws Exception {
+        return setUpMessage(requestor, outbound, invalidMAP, preExistingSOAPAction, Names.WSA_NAMESPACE_NAME);
     }
 
-    private SoapMessage setUpMessage(boolean requestor, 
-                                     boolean outbound,
-                                     boolean invalidMAP,
-                                     boolean preExistingSOAPAction,
-                                     String exposeAs) 
-        throws Exception {
+    private SoapMessage setUpMessage(boolean requestor, boolean outbound, boolean invalidMAP,
+                                     boolean preExistingSOAPAction, String exposeAs) throws Exception {
         SoapMessage message = new SoapMessage(new MessageImpl());
         setUpOutbound(message, outbound);
         expectRelatesTo = (requestor && !outbound) || (!requestor && outbound);
@@ -272,14 +274,9 @@
         JAXBContext jaxbContext = control.createMock(JAXBContext.class);
         ContextUtils.setJAXBContext(jaxbContext);
         VersionTransformer.Names200408.setJAXBContext(jaxbContext);
+        VersionTransformer.Names200403.setJAXBContext(jaxbContext);
         if (outbound) {
-            setUpEncode(requestor,
-                        message,
-                        header,
-                        maps,
-                        mapProperty,
-                        invalidMAP,
-                        preExistingSOAPAction);
+            setUpEncode(requestor, message, header, maps, mapProperty, invalidMAP, preExistingSOAPAction);
         } else {
             setUpDecode(message, headers, maps, mapProperty, requestor);
         }
@@ -287,13 +284,9 @@
         return message;
     }
 
-    private void setUpEncode(boolean requestor,
-                             SoapMessage message,
-                             Element header,
-                             AddressingPropertiesImpl maps,
-                             String mapProperty,
-                             boolean invalidMAP,
-                             boolean preExistingSOAPAction) throws Exception { 
+    private void setUpEncode(boolean requestor, SoapMessage message, Element header,
+                             AddressingPropertiesImpl maps, String mapProperty, boolean invalidMAP,
+                             boolean preExistingSOAPAction) throws Exception {
         message.put(mapProperty, maps);
         Marshaller marshaller = control.createMock(Marshaller.class);
         ContextUtils.getJAXBContext().createMarshaller();
@@ -301,16 +294,14 @@
         marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
         EasyMock.expectLastCall();
         IArgumentMatcher matcher = new JAXBEltMatcher();
-        int expectedMarshals = requestor 
-                               ? expectedValues.length - 1
-                               : expectedValues.length;
+        int expectedMarshals = requestor ? expectedValues.length - 1 : expectedValues.length;
         for (int i = 0; i < expectedMarshals; i++) {
             EasyMock.reportMatcher(matcher);
             EasyMock.eq(header);
             marshaller.marshal(null, header);
             EasyMock.expectLastCall();
         }
-        
+
         NodeList children = control.createMock(NodeList.class);
         header.getChildNodes();
         EasyMock.expectLastCall().andReturn(children);
@@ -321,17 +312,15 @@
             children.item(i);
             EasyMock.expectLastCall().andReturn(child);
             /*
-            child.setAttributeNS(EasyMock.eq("http://www.w3.org/2000/xmlns/"),
-                                 EasyMock.eq("xmlns:wsa"),
-                                 EasyMock.eq(maps.getNamespaceURI()));
-            EasyMock.expectLastCall();
-            */
+             * child.setAttributeNS(EasyMock.eq("http://www.w3.org/2000/xmlns/"), EasyMock.eq("xmlns:wsa"),
+             * EasyMock.eq(maps.getNamespaceURI())); EasyMock.expectLastCall();
+             */
             child.getNamespaceURI();
             EasyMock.expectLastCall().andReturn(expectedNames[i].getNamespaceURI());
             child.getLocalName();
             EasyMock.expectLastCall().andReturn(expectedNames[i].getLocalPart());
         }
-        
+
         mimeHeaders = new HashMap<String, List<String>>();
         message.put(MIME_HEADERS, mimeHeaders);
         if (preExistingSOAPAction) {
@@ -340,84 +329,46 @@
             mimeHeaders.put(SoapConstants.SOAP_ACTION, soapAction);
         }
         if (invalidMAP) {
-            message.put("org.apache.cxf.ws.addressing.map.fault.name",
-                        Names.DUPLICATE_MESSAGE_ID_NAME);
+            message.put("org.apache.cxf.ws.addressing.map.fault.name", Names.DUPLICATE_MESSAGE_ID_NAME);
             message.put("org.apache.cxf.ws.addressing.map.fault.reason",
                         "Duplicate Message ID urn:uuid:12345");
         }
     }
-    
-    private void setUpDecode(SoapMessage message, 
-                             List<Header> headers,
-                             AddressingPropertiesImpl maps,
-                             String mapProperty,
-                             boolean requestor) throws Exception {
+
+    private void setUpDecode(SoapMessage message, List<Header> headers, AddressingPropertiesImpl maps,
+                             String mapProperty, boolean requestor) throws Exception {
         Unmarshaller unmarshaller = control.createMock(Unmarshaller.class);
         ContextUtils.getJAXBContext().createUnmarshaller();
         EasyMock.expectLastCall().andReturn(unmarshaller);
         String uri = maps.getNamespaceURI();
         boolean exposedAsNative = Names.WSA_NAMESPACE_NAME.equals(uri);
-        boolean exposedAs200408 = 
-            VersionTransformer.Names200408.WSA_NAMESPACE_NAME.equals(uri);
-        assertTrue("unexpected namescape URI: " + uri, 
-                   exposedAsNative || exposedAs200408);
-        setUpHeaderDecode(headers,
-                          uri,
-                          Names.WSA_MESSAGEID_NAME,
-                          exposedAsNative
-                          ? AttributedURIType.class
-                          : AttributedURI.class,
-                          0,
-                          unmarshaller);
-        setUpHeaderDecode(headers,
-                          uri,
-                          Names.WSA_TO_NAME,
-                          exposedAsNative
-                          ? AttributedURIType.class
-                          : AttributedURI.class,
-                          1,
-                          unmarshaller);
-        setUpHeaderDecode(headers,
-                          uri,
-                          Names.WSA_REPLYTO_NAME,
-                          exposedAsNative
-                          ? EndpointReferenceType.class
-                          : VersionTransformer.Names200408.EPR_TYPE,
-                          2,
-                          unmarshaller);
-        setUpHeaderDecode(headers,
-                          uri,
-                          Names.WSA_FAULTTO_NAME,
-                          exposedAsNative
-                          ? EndpointReferenceType.class
-                          : VersionTransformer.Names200408.EPR_TYPE,
-                          3,
-                          unmarshaller);
-        setUpHeaderDecode(headers,
-                          uri,
-                          Names.WSA_RELATESTO_NAME,
-                          exposedAsNative
-                          ? RelatesToType.class
-                          : Relationship.class,
-                          4,
-                          unmarshaller);
-        setUpHeaderDecode(headers,
-                          uri,
-                          Names.WSA_ACTION_NAME,
-                          exposedAsNative
-                          ? AttributedURIType.class
-                          : AttributedURI.class,
-                          5,
-                          unmarshaller);
-    }
-
-    private <T> void setUpHeaderDecode(List<Header> headers,
-                                       String uri,
-                                       String name,
-                                       Class<T> clz,
-                                       int index,
-                                       Unmarshaller unmarshaller) 
-        throws Exception { 
+        boolean exposedAs200408 = VersionTransformer.Names200408.WSA_NAMESPACE_NAME.equals(uri);
+        boolean exposedAs200403 = VersionTransformer.Names200403.WSA_NAMESPACE_NAME.equals(uri);
+        assertTrue("unexpected namescape URI: " + uri, exposedAsNative || exposedAs200408 || exposedAs200403);
+        setUpHeaderDecode(headers, uri, Names.WSA_MESSAGEID_NAME, exposedAsNative
+            ? AttributedURIType.class : exposedAs200408 ? AttributedURI.class : exposedAs200403
+                ? org.apache.cxf.ws.addressing.v200403.AttributedURI.class : null, 0, unmarshaller);
+        setUpHeaderDecode(headers, uri, Names.WSA_TO_NAME, exposedAsNative
+            ? AttributedURIType.class : exposedAs200408 ? AttributedURI.class : exposedAs200403
+                ? org.apache.cxf.ws.addressing.v200403.AttributedURI.class : null, 1, unmarshaller);
+        setUpHeaderDecode(headers, uri, Names.WSA_REPLYTO_NAME, exposedAsNative
+            ? EndpointReferenceType.class : exposedAs200408
+                ? VersionTransformer.Names200408.EPR_TYPE : exposedAs200403
+                    ? VersionTransformer.Names200403.EPR_TYPE : null, 2, unmarshaller);
+        setUpHeaderDecode(headers, uri, Names.WSA_FAULTTO_NAME, exposedAsNative
+            ? EndpointReferenceType.class : exposedAs200408
+                ? VersionTransformer.Names200408.EPR_TYPE : exposedAs200403
+                    ? VersionTransformer.Names200403.EPR_TYPE : null, 3, unmarshaller);
+        setUpHeaderDecode(headers, uri, Names.WSA_RELATESTO_NAME, exposedAsNative
+            ? RelatesToType.class : exposedAs200408 ? Relationship.class : exposedAs200403
+                ? org.apache.cxf.ws.addressing.v200403.Relationship.class : null, 4, unmarshaller);
+        setUpHeaderDecode(headers, uri, Names.WSA_ACTION_NAME, exposedAsNative
+            ? AttributedURIType.class : exposedAs200408 ? AttributedURI.class : exposedAs200403
+                ? org.apache.cxf.ws.addressing.v200403.AttributedURI.class : null, 5, unmarshaller);
+    }
+
+    private <T> void setUpHeaderDecode(List<Header> headers, String uri, String name, Class<T> clz,
+                                       int index, Unmarshaller unmarshaller) throws Exception {
         Element headerElement = control.createMock(Element.class);
         headers.add(new Header(new QName(uri, name), headerElement));
         headerElement.getNamespaceURI();
@@ -425,117 +376,118 @@
         headerElement.getLocalName();
         EasyMock.expectLastCall().andReturn(name);
         Object v = expectedValues[index];
-        JAXBElement<?> jaxbElement = 
-            new JAXBElement<T>(new QName(uri, name), clz, clz.cast(v));
+        JAXBElement<?> jaxbElement = new JAXBElement<T>(new QName(uri, name), clz, clz.cast(v));
         unmarshaller.unmarshal(headerElement, clz);
         EasyMock.expectLastCall().andReturn(jaxbElement);
     }
-    
+
     private void setUpOutbound(Message message, boolean outbound) {
         Exchange exchange = new ExchangeImpl();
         exchange.setOutMessage(outbound ? message : new MessageImpl());
         message.setExchange(exchange);
     }
 
-    private String getMAPProperty(boolean requestor, boolean outbound) { 
-        return requestor
-               ? outbound
-                 ? CLIENT_ADDRESSING_PROPERTIES_OUTBOUND
-                 : CLIENT_ADDRESSING_PROPERTIES_INBOUND
-               : outbound
-                 ? SERVER_ADDRESSING_PROPERTIES_OUTBOUND
-                 : SERVER_ADDRESSING_PROPERTIES_INBOUND;
+    private String getMAPProperty(boolean requestor, boolean outbound) {
+        return requestor ? outbound
+            ? CLIENT_ADDRESSING_PROPERTIES_OUTBOUND : CLIENT_ADDRESSING_PROPERTIES_INBOUND : outbound
+            ? SERVER_ADDRESSING_PROPERTIES_OUTBOUND : SERVER_ADDRESSING_PROPERTIES_INBOUND;
     }
 
-    private AddressingPropertiesImpl getMAPs(boolean requestor,
-                                             boolean outbound,
-                                             String uri) {
+    private AddressingPropertiesImpl getMAPs(boolean requestor, boolean outbound, String uri) {
         AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
         boolean exposeAsNative = Names.WSA_NAMESPACE_NAME.equals(uri);
-        boolean exposeAs200408 = 
-            VersionTransformer.Names200408.WSA_NAMESPACE_NAME.equals(uri);
-        AttributedURIType id = 
-            ContextUtils.getAttributedURI("urn:uuid:12345");
+        boolean exposeAs200408 = VersionTransformer.Names200408.WSA_NAMESPACE_NAME.equals(uri);
+        boolean exposeAs200403 = VersionTransformer.Names200403.WSA_NAMESPACE_NAME.equals(uri);
+
+        AttributedURIType id = ContextUtils.getAttributedURI("urn:uuid:12345");
         maps.setMessageID(id);
-        AttributedURIType to =
-            ContextUtils.getAttributedURI("foobar");
+        AttributedURIType to = ContextUtils.getAttributedURI("foobar");
         EndpointReferenceType toEpr = EndpointReferenceUtils.getEndpointReference(to);
         maps.setTo(toEpr);
         EndpointReferenceType replyTo = new EndpointReferenceType();
-        String anonymous = 
-            exposeAsNative
-            ? Names.WSA_ANONYMOUS_ADDRESS
-            : VersionTransformer.Names200408.WSA_ANONYMOUS_ADDRESS;
-        replyTo.setAddress(
-            ContextUtils.getAttributedURI(anonymous));
+        String anonymous = exposeAsNative ? Names.WSA_ANONYMOUS_ADDRESS : exposeAs200408
+            ? VersionTransformer.Names200408.WSA_ANONYMOUS_ADDRESS
+            : VersionTransformer.Names200403.WSA_ANONYMOUS_ADDRESS;
+        replyTo.setAddress(ContextUtils.getAttributedURI(anonymous));
         maps.setReplyTo(replyTo);
         EndpointReferenceType faultTo = new EndpointReferenceType();
-        anonymous = 
-            exposeAsNative
-            ? Names.WSA_ANONYMOUS_ADDRESS
-            : VersionTransformer.Names200408.WSA_ANONYMOUS_ADDRESS;
-        faultTo.setAddress(
-            ContextUtils.getAttributedURI(anonymous));
+        anonymous = exposeAsNative ? Names.WSA_ANONYMOUS_ADDRESS : exposeAs200408
+            ? VersionTransformer.Names200408.WSA_ANONYMOUS_ADDRESS
+            : VersionTransformer.Names200403.WSA_ANONYMOUS_ADDRESS;
+        faultTo.setAddress(ContextUtils.getAttributedURI(anonymous));
         maps.setFaultTo(faultTo);
         RelatesToType relatesTo = null;
         if (expectRelatesTo) {
             String correlationID = "urn:uuid:67890";
-            relatesTo = new RelatesToType(); 
+            relatesTo = new RelatesToType();
             relatesTo.setValue(correlationID);
             maps.setRelatesTo(relatesTo);
             correlatedExchange = new ExchangeImpl();
             codec.uncorrelatedExchanges.put(correlationID, correlatedExchange);
         }
-        AttributedURIType action = 
-            ContextUtils.getAttributedURI("http://foo/bar/SEI/opRequest");
+        AttributedURIType action = ContextUtils.getAttributedURI("http://foo/bar/SEI/opRequest");
         maps.setAction(action);
         maps.exposeAs(uri);
         expectedNamespaceURI = uri;
 
-        expectedNames = 
-            new QName[] {new QName(uri, Names.WSA_MESSAGEID_NAME), 
-                         new QName(uri, Names.WSA_TO_NAME), 
-                         new QName(uri, Names.WSA_REPLYTO_NAME),
-                         new QName(uri, Names.WSA_FAULTTO_NAME),
-                         new QName(uri, Names.WSA_RELATESTO_NAME),
-                         new QName(uri, Names.WSA_ACTION_NAME)};
+        expectedNames = new QName[] {
+            new QName(uri, Names.WSA_MESSAGEID_NAME), new QName(uri, Names.WSA_TO_NAME),
+            new QName(uri, Names.WSA_REPLYTO_NAME), new QName(uri, Names.WSA_FAULTTO_NAME),
+            new QName(uri, Names.WSA_RELATESTO_NAME), new QName(uri, Names.WSA_ACTION_NAME)
+        };
         if (exposeAsNative) {
-            expectedValues = new Object[] {id, to, replyTo, faultTo, relatesTo, action};
-            expectedDeclaredTypes = 
-                new Class<?>[] {AttributedURIType.class,
-                                AttributedURIType.class,
-                                EndpointReferenceType.class,
-                                EndpointReferenceType.class,
-                                RelatesToType.class, 
-                                AttributedURIType.class};
+            expectedValues = new Object[] {
+                id, to, replyTo, faultTo, relatesTo, action
+            };
+            expectedDeclaredTypes = new Class<?>[] {
+                AttributedURIType.class, AttributedURIType.class, EndpointReferenceType.class,
+                EndpointReferenceType.class, RelatesToType.class, AttributedURIType.class
+            };
         } else if (exposeAs200408) {
-            expectedValues = new Object[] {VersionTransformer.convert(id),
-                                           VersionTransformer.convert(to),
-                                           VersionTransformer.convert(replyTo),
-                                           VersionTransformer.convert(faultTo),
-                                           VersionTransformer.convert(relatesTo),
-                                           VersionTransformer.convert(action)};
+            expectedValues = new Object[] {
+                VersionTransformer.convert(id), VersionTransformer.convert(to),
+                VersionTransformer.convert(replyTo), VersionTransformer.convert(faultTo),
+                VersionTransformer.convert(relatesTo), VersionTransformer.convert(action)
+            };
             if (!outbound) {
                 // conversion from 2004/08 to 2005/08 anonymous address
                 // occurs transparently in VersionTransformer
-                VersionTransformer.Names200408.EPR_TYPE.cast(expectedValues[2]).
-                    getAddress().setValue(Names.WSA_ANONYMOUS_ADDRESS);
-                VersionTransformer.Names200408.EPR_TYPE.cast(expectedValues[3]).
-                    getAddress().setValue(Names.WSA_ANONYMOUS_ADDRESS);    
+                VersionTransformer.Names200408.EPR_TYPE.cast(expectedValues[2]).getAddress()
+                    .setValue(Names.WSA_ANONYMOUS_ADDRESS);
+                VersionTransformer.Names200408.EPR_TYPE.cast(expectedValues[3]).getAddress()
+                    .setValue(Names.WSA_ANONYMOUS_ADDRESS);
             }
-            expectedDeclaredTypes = 
-                new Class<?>[] {AttributedURI.class,
-                                AttributedURI.class,
-                                VersionTransformer.Names200408.EPR_TYPE,
-                                VersionTransformer.Names200408.EPR_TYPE,
-                                Relationship.class, 
-                                AttributedURI.class};
+            expectedDeclaredTypes = new Class<?>[] {
+                AttributedURI.class, AttributedURI.class, VersionTransformer.Names200408.EPR_TYPE,
+                VersionTransformer.Names200408.EPR_TYPE, Relationship.class, AttributedURI.class
+            };
+        } else if (exposeAs200403) {
+            expectedValues = new Object[] {
+                VersionTransformer.convertTo200403(id), VersionTransformer.convertTo200403(to),
+                VersionTransformer.convertTo200403(replyTo), VersionTransformer.convertTo200403(faultTo),
+                VersionTransformer.convertTo200403(relatesTo), VersionTransformer.convertTo200403(action)
+            };
+            if (!outbound) {
+                // conversion from 2004/03 to 2005/08 anonymous address
+                // occurs transparently in VersionTransformer
+                VersionTransformer.Names200403.EPR_TYPE.cast(expectedValues[2]).getAddress()
+                    .setValue(Names.WSA_ANONYMOUS_ADDRESS);
+                VersionTransformer.Names200403.EPR_TYPE.cast(expectedValues[3]).getAddress()
+                    .setValue(Names.WSA_ANONYMOUS_ADDRESS);
+            }
+            expectedDeclaredTypes = new Class<?>[] {
+                org.apache.cxf.ws.addressing.v200403.AttributedURI.class,
+                org.apache.cxf.ws.addressing.v200403.AttributedURI.class,
+                VersionTransformer.Names200403.EPR_TYPE, VersionTransformer.Names200403.EPR_TYPE,
+                org.apache.cxf.ws.addressing.v200403.Relationship.class,
+                org.apache.cxf.ws.addressing.v200403.AttributedURI.class
+            };
         } else {
             fail("unexpected namespace URI: " + uri);
         }
         return maps;
     }
-    
+
     private final class JAXBEltMatcher implements IArgumentMatcher {
         public boolean matches(Object obj) {
             QName name = expectedNames[expectedIndex];
@@ -548,8 +500,7 @@
             }
             if (obj instanceof JAXBElement) {
                 JAXBElement other = (JAXBElement)obj;
-                ret = name.equals(other.getName()) 
-                      && declaredType.isAssignableFrom(other.getDeclaredType())
+                ret = name.equals(other.getName()) && declaredType.isAssignableFrom(other.getDeclaredType())
                       && compare(value, other.getValue());
             }
             return ret;
@@ -558,30 +509,43 @@
         public void appendTo(StringBuffer buffer) {
             buffer.append("JAXBElements did not match[" + expectedIndex + "]");
         }
-        
+
         private boolean compare(Object a, Object b) {
             boolean ret = false;
             if (a instanceof AttributedURI && b instanceof AttributedURI) {
                 ret = ((AttributedURI)a).getValue().equals(((AttributedURI)b).getValue());
+            } else if (a instanceof org.apache.cxf.ws.addressing.v200403.AttributedURI
+                       && b instanceof org.apache.cxf.ws.addressing.v200403.AttributedURI) {
+                ret = ((org.apache.cxf.ws.addressing.v200403.AttributedURI)a).getValue()
+                    .equals(((org.apache.cxf.ws.addressing.v200403.AttributedURI)b).getValue());
             } else if (a instanceof AttributedURIType && b instanceof AttributedURIType) {
                 ret = ((AttributedURIType)a).getValue().equals(((AttributedURIType)b).getValue());
             } else if (a instanceof EndpointReferenceType && b instanceof EndpointReferenceType) {
                 EndpointReferenceType aEPR = (EndpointReferenceType)a;
                 EndpointReferenceType bEPR = (EndpointReferenceType)b;
-                ret = aEPR.getAddress() != null
-                      && bEPR.getAddress() != null
+                ret = aEPR.getAddress() != null && bEPR.getAddress() != null
                       && aEPR.getAddress().getValue().equals(bEPR.getAddress().getValue());
             } else if (VersionTransformer.Names200408.EPR_TYPE.isInstance(a)
                        && VersionTransformer.Names200408.EPR_TYPE.isInstance(b)) {
                 ret = VersionTransformer.Names200408.EPR_TYPE.cast(a).getAddress() != null
                       && VersionTransformer.Names200408.EPR_TYPE.cast(b).getAddress() != null
-                      && VersionTransformer.Names200408.EPR_TYPE.cast(a).getAddress().getValue().equals(
-                             VersionTransformer.Names200408.EPR_TYPE.cast(b).getAddress().getValue());
+                      && VersionTransformer.Names200408.EPR_TYPE.cast(a).getAddress().getValue()
+                          .equals(VersionTransformer.Names200408.EPR_TYPE.cast(b).getAddress().getValue());
+            } else if (VersionTransformer.Names200403.EPR_TYPE.isInstance(a)
+                       && VersionTransformer.Names200403.EPR_TYPE.isInstance(b)) {
+                ret = VersionTransformer.Names200403.EPR_TYPE.cast(a).getAddress() != null
+                      && VersionTransformer.Names200403.EPR_TYPE.cast(b).getAddress() != null
+                      && VersionTransformer.Names200403.EPR_TYPE.cast(a).getAddress().getValue()
+                          .equals(VersionTransformer.Names200403.EPR_TYPE.cast(b).getAddress().getValue());
             } else if (a instanceof Relationship && b instanceof Relationship) {
                 ret = ((Relationship)a).getValue().equals(((Relationship)b).getValue());
+            } else if (a instanceof org.apache.cxf.ws.addressing.v200403.Relationship
+                       && b instanceof org.apache.cxf.ws.addressing.v200403.Relationship) {
+                ret = ((org.apache.cxf.ws.addressing.v200403.Relationship)a).getValue()
+                    .equals(((org.apache.cxf.ws.addressing.v200403.Relationship)b).getValue());
             } else if (a instanceof RelatesToType && b instanceof RelatesToType) {
                 ret = ((RelatesToType)a).getValue().equals(((RelatesToType)b).getValue());
-            } 
+            }
             return ret;
         }
     }
@@ -590,100 +554,89 @@
         if (obj instanceof AddressingPropertiesImpl) {
             AddressingPropertiesImpl other = (AddressingPropertiesImpl)obj;
             return compareExpected(other);
-        } 
+        }
         return false;
-    }    
+    }
 
     private boolean compareExpected(AddressingPropertiesImpl other) {
         boolean ret = false;
         String uri = other.getNamespaceURI();
         boolean exposedAsNative = Names.WSA_NAMESPACE_NAME.equals(uri);
-        boolean exposedAs200408 = 
-            VersionTransformer.Names200408.WSA_NAMESPACE_NAME.equals(uri);
-        if (exposedAsNative || exposedAs200408) {
-            String expectedMessageID = 
-                exposedAsNative
-                ? ((AttributedURIType)expectedValues[0]).getValue()
-                : ((AttributedURI)expectedValues[0]).getValue();
-            String expectedTo =
-                exposedAsNative
-                ? ((AttributedURIType)expectedValues[1]).getValue()
-                : ((AttributedURI)expectedValues[1]).getValue();
-            String expectedReplyTo = 
-                exposedAsNative
-                ? ((EndpointReferenceType)expectedValues[2]).getAddress().getValue()
-                : (VersionTransformer.Names200408.EPR_TYPE.cast(expectedValues[2])).
-                    getAddress().getValue();
-            String expectedAction =                    
-                exposedAsNative
-                ? ((AttributedURIType)expectedValues[5]).getValue()
-                : ((AttributedURI)expectedValues[5]).getValue();
+        boolean exposedAs200408 = VersionTransformer.Names200408.WSA_NAMESPACE_NAME.equals(uri);
+        boolean exposedAs200403 = VersionTransformer.Names200403.WSA_NAMESPACE_NAME.equals(uri);
+
+        if (exposedAsNative || exposedAs200408 || exposedAs200403) {
+            String expectedMessageID = exposedAsNative
+                ? ((AttributedURIType)expectedValues[0]).getValue() : exposedAs200408
+                    ? ((AttributedURI)expectedValues[0]).getValue()
+                    : ((org.apache.cxf.ws.addressing.v200403.AttributedURI)expectedValues[0]).getValue();
+
+            String expectedTo = exposedAsNative
+                ? ((AttributedURIType)expectedValues[1]).getValue() : exposedAs200408
+                    ? ((AttributedURI)expectedValues[1]).getValue()
+                    : ((org.apache.cxf.ws.addressing.v200403.AttributedURI)expectedValues[1]).getValue();
+
+            String expectedReplyTo = exposedAsNative ? ((EndpointReferenceType)expectedValues[2])
+                .getAddress().getValue() : exposedAs200408 ? (VersionTransformer.Names200408.EPR_TYPE
+                .cast(expectedValues[2])).getAddress().getValue() : (VersionTransformer.Names200403.EPR_TYPE
+                .cast(expectedValues[2])).getAddress().getValue();
+            String expectedAction = exposedAsNative
+                ? ((AttributedURIType)expectedValues[5]).getValue() : exposedAs200408
+                    ? ((AttributedURI)expectedValues[5]).getValue()
+                    : ((org.apache.cxf.ws.addressing.v200403.AttributedURI)expectedValues[5]).getValue();
 
             ret = expectedMessageID.equals(other.getMessageID().getValue())
                   && expectedTo.equals(other.getTo().getValue())
-                  && expectedReplyTo.equals(
-                        other.getReplyTo().getAddress().getValue())
+                  && expectedReplyTo.equals(other.getReplyTo().getAddress().getValue())
                   && expectedAction.equals(other.getAction().getValue())
                   && expectedNamespaceURI.equals(other.getNamespaceURI());
             if (expectRelatesTo) {
-                String expectedRelatesTo = 
-                    exposedAsNative
-                    ? ((RelatesToType)expectedValues[4]).getValue()
-                    : ((Relationship)expectedValues[4]).getValue();
-                ret = ret
-                      && expectedRelatesTo.equals(other.getRelatesTo().getValue());
+                String expectedRelatesTo = exposedAsNative
+                    ? ((RelatesToType)expectedValues[4]).getValue() : exposedAs200408
+                        ? ((Relationship)expectedValues[4]).getValue()
+                        : ((org.apache.cxf.ws.addressing.v200403.Relationship)expectedValues[4]).getValue();
+                ret = ret && expectedRelatesTo.equals(other.getRelatesTo().getValue());
             }
-        } 
+        }
         return ret;
     }
-        
+
     private void verifyAction() {
         List<?> soapAction = (List<?>)mimeHeaders.get("SOAPAction");
         assertNotNull("expected propogated action", soapAction);
         assertEquals("expected single action", 1, soapAction.size());
-        String expectedAction =
-            "\"" + ((AttributedURIType)expectedValues[5]).getValue() + "\"";
-        assertEquals("expected propogated action", 
-                     expectedAction,
-                     soapAction.get(0));
+        String expectedAction = "\"" + ((AttributedURIType)expectedValues[5]).getValue() + "\"";
+        assertEquals("expected propogated action", expectedAction, soapAction.get(0));
     }
 
-    private void verifyMessage(SoapMessage message,
-                               boolean requestor,
-                               boolean outbound,
+    private void verifyMessage(SoapMessage message, boolean requestor, boolean outbound,
                                boolean exposedAsNative) {
         if (requestor) {
             if (outbound) {
                 String id = expectedValues[0] instanceof AttributedURIType
-                            ? ((AttributedURIType)expectedValues[0]).getValue()
-                            : ((AttributedURI)expectedValues[0]).getValue();
-                //assertTrue("expected correlationID : " + id + " in map: " + codec.uncorrelatedExchanges,
-                //           codec.uncorrelatedExchanges.containsKey(id));
-                assertSame("unexpected correlated exchange",
-                           codec.uncorrelatedExchanges.get(id),
-                           message.getExchange());
+                    ? ((AttributedURIType)expectedValues[0]).getValue()
+                    : expectedValues[0] instanceof AttributedURI ? ((AttributedURI)expectedValues[0])
+                        .getValue() : ((org.apache.cxf.ws.addressing.v200403.AttributedURI)expectedValues[0])
+                        .getValue();
+                // assertTrue("expected correlationID : " + id + " in map: " +
+                // codec.uncorrelatedExchanges,
+                // codec.uncorrelatedExchanges.containsKey(id));
+                assertSame("unexpected correlated exchange", codec.uncorrelatedExchanges.get(id), message
+                    .getExchange());
             } else {
-                assertSame("unexpected correlated exchange",
-                           correlatedExchange,
-                           message.getExchange());
+                assertSame("unexpected correlated exchange", correlatedExchange, message.getExchange());
             }
         }
         if (outbound) {
-            int expectedMarshals = requestor 
-                                   ? expectedValues.length - 1
-                                   : expectedValues.length;
+            int expectedMarshals = requestor ? expectedValues.length - 1 : expectedValues.length;
             List<Header> headers = message.getHeaders();
-            assertTrue("expected holders added to header list",
-                       headers.size() >= expectedMarshals);
+            assertTrue("expected holders added to header list", headers.size() >= expectedMarshals);
             for (int i = 0; i < expectedMarshals; i++) {
-                assertTrue("expected " + expectedNames[i] + " added to headers",
-                           message.hasHeader(expectedNames[i]));
+                assertTrue("expected " + expectedNames[i] + " added to headers", message
+                    .hasHeader(expectedNames[i]));
             }
         }
-        assertTrue("unexpected MAPs",
-                   verifyMAPs(message.get(getMAPProperty(requestor, outbound))));
-        
+        assertTrue("unexpected MAPs", verifyMAPs(message.get(getMAPProperty(requestor, outbound))));
+
     }
 }
-
-