You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by as...@apache.org on 2015/03/27 16:10:09 UTC

[1/2] cxf git commit: [CXF-6319] Improving fix to keep track of both namespaces and attributes

Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes 101c99fc1 -> c65a7b712


[CXF-6319] Improving fix to keep track of both namespaces and attributes


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/5ae494dc
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/5ae494dc
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/5ae494dc

Branch: refs/heads/3.0.x-fixes
Commit: 5ae494dc9868552ea70b7fdac70e59c066d64317
Parents: 101c99f
Author: Alessio Soldano <as...@redhat.com>
Authored: Fri Mar 27 13:05:21 2015 +0100
Committer: Alessio Soldano <as...@redhat.com>
Committed: Fri Mar 27 16:09:01 2015 +0100

----------------------------------------------------------------------
 .../interceptor/ReadHeadersInterceptor.java     | 47 ++++++++++++--------
 .../binding/soap/saaj/SAAJInInterceptor.java    | 33 +++++++++-----
 2 files changed, 51 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/5ae494dc/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
----------------------------------------------------------------------
diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
index d671e9b..a44ba00 100644
--- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
+++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
@@ -22,9 +22,7 @@ package org.apache.cxf.binding.soap.interceptor;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
@@ -32,7 +30,6 @@ import javax.xml.stream.XMLEventFactory;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
-import javax.xml.stream.events.Namespace;
 import javax.xml.stream.events.XMLEvent;
 
 import org.w3c.dom.Attr;
@@ -68,7 +65,8 @@ import org.apache.cxf.staxutils.W3CDOMStreamWriter;
 
 public class ReadHeadersInterceptor extends AbstractSoapInterceptor {
     
-    public static final String ADDITIONAL_ENVELOPE_BODY_NS = "additional.env.body.ns";
+    public static final String ENVELOPE_EVENTS = "envelope.events";
+    public static final String BODY_EVENTS = "body.events";
     /**
      * 
      */
@@ -193,7 +191,8 @@ public class ReadHeadersInterceptor extends AbstractSoapInterceptor {
                     if (doc != null) {
                         message.setContent(Node.class, doc);
                     } else {
-                        message.put(ADDITIONAL_ENVELOPE_BODY_NS, processor.getEnvelopeAndBodyNamespaces());
+                        message.put(ENVELOPE_EVENTS, processor.getEnvAttributeAndNamespaceEvents());
+                        message.put(BODY_EVENTS, processor.getBodyAttributeAndNamespaceEvents());
                     }
                 }
 
@@ -292,7 +291,8 @@ public class ReadHeadersInterceptor extends AbstractSoapInterceptor {
         private final String body;
         private final String envelope;
         private final List<XMLEvent> events = new ArrayList<XMLEvent>(8);
-        private Map<String, String> namespaces;
+        private List<XMLEvent> envEvents;
+        private List<XMLEvent> bodyEvents;
         private StreamToDOMContext context;
         private Document doc;
         private Node parent;
@@ -383,28 +383,37 @@ public class ReadHeadersInterceptor extends AbstractSoapInterceptor {
                     events.add(event);
                 }
             } else {
-                if (event.isNamespace()) {
+                if (event.isNamespace() || event.isAttribute()) {
                     final String lastEl = lastStartElementQName.getLocalPart();
-                    if ((body.equals(lastEl) || envelope.equals(lastEl))
-                        && ns.equals(lastStartElementQName.getNamespaceURI())) {
-                        if (namespaces == null) {
-                            namespaces = new HashMap<String, String>();
+                    if (body.equals(lastEl) && ns.equals(lastStartElementQName.getNamespaceURI())) {
+                        if (bodyEvents == null) {
+                            bodyEvents = new ArrayList<XMLEvent>();
                         }
-                        Namespace nsEvent = (Namespace)event;
-                        //just put in the map, in case of duplicates in env and body,
-                        //body one will always come afterwards, so we're fine
-                        namespaces.put(nsEvent.getPrefix(), nsEvent.getNamespaceURI());
+                        bodyEvents.add(event);
+                    } else if (envelope.equals(lastEl) && ns.equals(lastStartElementQName.getNamespaceURI())) {
+                        if (envEvents == null) {
+                            envEvents = new ArrayList<XMLEvent>();
+                        }
+                        envEvents.add(event);
                     }
                 }
                 events.add(event);
             }
         }
         
-        public Map<String, String> getEnvelopeAndBodyNamespaces() {
-            if (namespaces == null) {
-                return Collections.emptyMap();
+        public List<XMLEvent> getBodyAttributeAndNamespaceEvents() {
+            if (bodyEvents == null) {
+                return Collections.emptyList();
+            } else {
+                return Collections.unmodifiableList(bodyEvents);
+            }
+        }
+        
+        public List<XMLEvent> getEnvAttributeAndNamespaceEvents() {
+            if (envEvents == null) {
+                return Collections.emptyList();
             } else {
-                return Collections.unmodifiableMap(namespaces);
+                return Collections.unmodifiableList(envEvents);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/5ae494dc/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
----------------------------------------------------------------------
diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
index 32ea088..1f12f8f 100644
--- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
+++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
@@ -25,14 +25,14 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.ResourceBundle;
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.AttachmentPart;
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPMessage;
@@ -40,6 +40,9 @@ import javax.xml.soap.SOAPPart;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.events.Attribute;
+import javax.xml.stream.events.Namespace;
+import javax.xml.stream.events.XMLEvent;
 import javax.xml.transform.dom.DOMSource;
 
 import org.w3c.dom.Document;
@@ -162,6 +165,7 @@ public class SAAJInInterceptor extends AbstractSoapInterceptor {
     
     
     
+    @SuppressWarnings("unchecked")
     public void handleMessage(SoapMessage message) throws Fault {
         if (isGET(message)) {
             return;
@@ -188,15 +192,12 @@ public class SAAJInInterceptor extends AbstractSoapInterceptor {
             if (node != part && node != null) {
                 StaxUtils.copy(node, new SAAJStreamWriter(part));
             } else {
+                SOAPEnvelope env = soapMessage.getSOAPPart().getEnvelope();
+                List<XMLEvent> events = (List<XMLEvent>)message.get(ReadHeadersInterceptor.ENVELOPE_EVENTS);
+                applyEvents(events, env);
                 SOAPBody body = soapMessage.getSOAPBody();
-                @SuppressWarnings("unchecked")
-                Map<String, String> additionalNsMap = (Map<String, String>)message
-                    .get(ReadHeadersInterceptor.ADDITIONAL_ENVELOPE_BODY_NS);
-                if (additionalNsMap != null) {
-                    for (Entry<String, String> e : additionalNsMap.entrySet()) {
-                        body.addNamespaceDeclaration(e.getKey(), e.getValue());
-                    }
-                }
+                events = (List<XMLEvent>)message.get(ReadHeadersInterceptor.BODY_EVENTS);
+                applyEvents(events, body);
             }
             message.setContent(Node.class, soapMessage.getSOAPPart());
 
@@ -258,6 +259,18 @@ public class SAAJInInterceptor extends AbstractSoapInterceptor {
         }
     }
 
+    private static void applyEvents(List<XMLEvent> events, SOAPElement el) throws SOAPException {
+        if (events != null) {
+            for (XMLEvent ev : events) {
+                if (ev.isNamespace()) {
+                    el.addNamespaceDeclaration(((Namespace)ev).getPrefix(), ((Namespace)ev).getNamespaceURI());
+                } else if (ev.isAttribute()) {
+                    el.addAttribute(((Attribute)ev).getName(), ((Attribute)ev).getValue());
+                }
+            }
+        }
+    }
+
     public static void replaceHeaders(SOAPMessage soapMessage, SoapMessage message) throws SOAPException {
         SOAPHeader header = SAAJUtils.getHeader(soapMessage);
         if (header == null) {


[2/2] cxf git commit: Recording .gitmergeinfo Changes

Posted by as...@apache.org.
Recording .gitmergeinfo Changes


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/c65a7b71
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/c65a7b71
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/c65a7b71

Branch: refs/heads/3.0.x-fixes
Commit: c65a7b712f04769002c43968184cc039eb22530c
Parents: 5ae494d
Author: Alessio Soldano <as...@redhat.com>
Authored: Fri Mar 27 16:09:36 2015 +0100
Committer: Alessio Soldano <as...@redhat.com>
Committed: Fri Mar 27 16:09:36 2015 +0100

----------------------------------------------------------------------
 .gitmergeinfo | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/c65a7b71/.gitmergeinfo
----------------------------------------------------------------------
diff --git a/.gitmergeinfo b/.gitmergeinfo
index c8b6c9e..d571d16 100644
--- a/.gitmergeinfo
+++ b/.gitmergeinfo
@@ -249,6 +249,7 @@ M 5e97d1e29e85d80f0679748cc4df0d8e0647ee16
 M 6129ec5f6735a986660a2d05c6b3b0c9230610d9
 M 6292346fb110f0517b791f91d03fd2515d575388
 M 64368a5ddad507fa5d7016cbd07f3e9b5b5fd594
+M 65654316c43ba94b97e9ad164224191561652f81
 M 67201fdde69488e511deb3d24794984afc01fe2d
 M 6e3224606ecf56b821dac537241f18a59b44e3e3
 M 717018e84f3ed41f0c9ca5ca550593c6c3352866