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);