Author: eglynn
Date: Tue Jul 10 07:19:34 2007
New Revision: 554957

URL: http://svn.apache.org/viewvc?view=rev&rev=554957
Log:
Added mechanism to selectively duplicate WS-A headers.



Modified:
    
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
    
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java

Modified: 
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java?view=diff&rev=554957&r1=554956&r2=554957
==============================================================================
--- 
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
 (original)
+++ 
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
 Tue Jul 10 07:19:34 2007
@@ -19,6 +19,8 @@
 
 package org.apache.cxf.ws.addressing;
 
+import javax.xml.namespace.QName;
+
 /**
  * Abstraction of Message Addressing Properties. 
  */
@@ -31,6 +33,7 @@
     private RelatesToType relatesTo;
     private AttributedURIType action;
     private String namespaceURI;
+    private QName duplicate;
 
     /**
      * Constructor, defaults to 2005/08 namespace.
@@ -181,6 +184,14 @@
      */
     public void exposeAs(String uri) {
         namespaceURI = uri;
+    }
+
+    public void setDuplicate(QName dup) {
+        duplicate = dup;
+    }
+
+    public QName getDuplicate() {
+        return duplicate;
     }
 
     public String toString() {

Modified: 
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java?view=diff&rev=554957&r1=554956&r2=554957
==============================================================================
--- 
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
 (original)
+++ 
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
 Tue Jul 10 07:19:34 2007
@@ -154,6 +154,8 @@
                     VersionTransformer.getExposedJAXBContext(
                                                      maps.getNamespaceURI());
                 Marshaller marshaller = jaxbContext.createMarshaller();
+                QName duplicate = 
+                    ((AddressingPropertiesImpl)maps).getDuplicate();
                 marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getMessageID(), 
@@ -161,42 +163,98 @@
                                 AttributedURIType.class, 
                                 hdr, 
                                 marshaller);
+                if (Names.WSA_MESSAGEID_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getMessageID(), 
+                                    Names.WSA_MESSAGEID_NAME,
+                                    AttributedURIType.class, 
+                                    hdr, 
+                                    marshaller);
+                }
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getTo(), 
                                 Names.WSA_TO_NAME,
                                 AttributedURIType.class,  
                                 hdr, 
                                 marshaller);
+                if (Names.WSA_TO_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getTo(), 
+                                    Names.WSA_TO_NAME,
+                                    AttributedURIType.class,  
+                                    hdr, 
+                                    marshaller);
+                }
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getFrom(), 
                                 Names.WSA_FROM_NAME,
                                 EndpointReferenceType.class,  
                                 hdr, 
                                 marshaller);
+                if (Names.WSA_FROM_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getFrom(), 
+                                    Names.WSA_FROM_NAME,
+                                    EndpointReferenceType.class,  
+                                    hdr, 
+                                    marshaller);
+                }
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getReplyTo(), 
                                 Names.WSA_REPLYTO_NAME, 
                                 EndpointReferenceType.class,
                                 hdr,
                                 marshaller);
+                if (Names.WSA_REPLYTO_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getReplyTo(), 
+                                    Names.WSA_REPLYTO_NAME, 
+                                    EndpointReferenceType.class,
+                                    hdr,
+                                    marshaller);
+                }
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getFaultTo(), 
                                 Names.WSA_FAULTTO_NAME, 
                                 EndpointReferenceType.class,
                                 hdr,
                                 marshaller);
+                if (Names.WSA_FAULTTO_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getFaultTo(), 
+                                    Names.WSA_FAULTTO_NAME, 
+                                    EndpointReferenceType.class,
+                                    hdr,
+                                    marshaller);
+                }
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getRelatesTo(),
                                 Names.WSA_RELATESTO_NAME,
                                 RelatesToType.class,
                                 hdr,
                                 marshaller);
+                if (Names.WSA_RELATESTO_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getRelatesTo(),
+                                    Names.WSA_RELATESTO_NAME,
+                                    RelatesToType.class,
+                                    hdr,
+                                    marshaller);
+                }
                 encodeAsExposed(maps.getNamespaceURI(),
                                 maps.getAction(), 
                                 Names.WSA_ACTION_NAME,
                                 AttributedURIType.class, 
                                 hdr, 
                                 marshaller);
+                if (Names.WSA_ACTION_QNAME.equals(duplicate)) {
+                    encodeAsExposed(maps.getNamespaceURI(),
+                                    maps.getAction(), 
+                                    Names.WSA_ACTION_NAME,
+                                    AttributedURIType.class, 
+                                    hdr, 
+                                    marshaller);
+                }
                 encodeReferenceParameters(maps, hdr, marshaller);
                 
                 NodeList children = hdr.getChildNodes();
@@ -209,7 +267,7 @@
                             node);
                     header.add(holder);
                 }
-                
+                ((AddressingPropertiesImpl)maps).setDuplicate(null);
                 
                 propogateAction(maps.getAction(), message);
                 applyMAPValidation(message);


Reply via email to