Author: rr
Date: Mon Feb 15 16:55:34 2010
New Revision: 910262

URL: http://svn.apache.org/viewvc?rev=910262&view=rev
Log:
ODE-768: SOAP headers are not copied in JBI layer (fix)

Modified:
    
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/msgmap/ServiceMixMapper.java
    
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java

Modified: 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/msgmap/ServiceMixMapper.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/msgmap/ServiceMixMapper.java?rev=910262&r1=910261&r2=910262&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/msgmap/ServiceMixMapper.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/jbi/src/main/java/org/apache/ode/jbi/msgmap/ServiceMixMapper.java
 Mon Feb 15 16:55:34 2010
@@ -20,6 +20,8 @@
 package org.apache.ode.jbi.msgmap;
 
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 import javax.jbi.messaging.MessagingException;
@@ -33,7 +35,9 @@
 import org.apache.ode.bpel.iapi.Message;
 import org.apache.ode.utils.DOMUtils;
 import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 /**
  * Message mapper for dealing with the degenerate messages that servicemix 
components such as servicemix-http provide. These
@@ -117,6 +121,29 @@
             MessageTranslationException {
         if (msgdef == null)
             throw new NullPointerException("msdef must not be null.");
+        
+        Map<String, Node> headers = odeMsg.getHeaderParts();
+        if (headers != null) {
+            for (String header : headers.keySet()) {
+                if (__log.isDebugEnabled()) {
+                    __log.debug("toNMS() header " + header + " := " + 
DOMUtils.domToString(headers.get(header)) );
+                }
+                
+                Map<QName, DocumentFragment> headers2 = (Map<QName, 
DocumentFragment>) nmsMsg.getProperty("org.apache.servicemix.soap.headers");
+                if (headers2 == null) {
+                    headers2 = new HashMap<QName, DocumentFragment>();
+                    nmsMsg.setProperty("org.apache.servicemix.soap.headers", 
headers2);
+                }
+                
+                Node v = headers.get(header);
+                DocumentFragment f = 
v.getOwnerDocument().createDocumentFragment();
+                f.appendChild(v);
+                headers2.put(QName.valueOf(header), f);
+            }
+        }
+
+        
+        
         Element ode = odeMsg == null ? null : odeMsg.getMessage();
         Element part = ode == null ? null : DOMUtils.getFirstChildElement(ode);
         Element firstPartEl = part == null ? null : 
DOMUtils.getFirstChildElement(part);
@@ -220,6 +247,20 @@
             }
             odeMsg.setMessage(nms);
         }
+        
+        Map<QName, DocumentFragment> headers = (Map<QName, DocumentFragment>) 
nmsMsg.getProperty("org.apache.servicemix.soap.headers");
+        if (headers != null) {
+            for (QName header : headers.keySet()) {
+                if (__log.isDebugEnabled()) {
+                    __log.debug("toODE() header " + header + " := " + 
DOMUtils.domToString(headers.get(header)) );
+                }
+                try {
+                    odeMsg.setHeaderPart(header.getLocalPart(), 
DOMUtils.stringToDOM(DOMUtils.domToString(headers.get(header))));
+                } catch (Exception e) {
+                    __log.error("Can't copy input header " + header);
+                }
+            }
+        }
     }
 
     public Fault toFaultType(javax.jbi.messaging.Fault jbiFlt, 
Collection<Fault> faults) throws MessageTranslationException {

Modified: 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
URL: 
http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java?rev=910262&r1=910261&r2=910262&view=diff
==============================================================================
--- 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
 (original)
+++ 
ode/branches/APACHE_ODE_1.X/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
 Mon Feb 15 16:55:34 2010
@@ -422,7 +422,7 @@
 
         String value = null;
         short nodeType = node.getNodeType();
-        if (nodeType == Node.ELEMENT_NODE || nodeType == Node.DOCUMENT_NODE) {
+        if (nodeType == Node.ELEMENT_NODE || nodeType == Node.DOCUMENT_NODE || 
nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
             // serializer doesn't handle Node type well, only Element
             DOMSerializerImpl ser = new DOMSerializerImpl();
             ser.setParameter(Constants.DOM_NAMESPACES, Boolean.TRUE);


Reply via email to