You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2008/05/20 00:55:14 UTC

svn commit: r658020 [2/2] - in /ode/trunk: axis2-war/src/test/java/org/apache/ode/axis2/ axis2-war/src/test/java/org/apache/ode/axis2/management/ axis2-war/src/test/resources/ axis2-war/src/test/resources/TestSoapHeader/ axis2-war/src/test/resources/Te...

Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java Mon May 19 15:55:12 2008
@@ -23,6 +23,7 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import org.w3c.dom.Document;
 
 import javax.wsdl.Binding;
 import javax.wsdl.BindingInput;
@@ -42,6 +43,7 @@
 import javax.wsdl.extensions.soap.SOAPHeader;
 import javax.wsdl.extensions.soap.SOAPOperation;
 import javax.xml.namespace.QName;
+import java.util.*;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
@@ -68,8 +70,6 @@
 /**
  * SOAP/ODE Message converter. Uses WSDL binding information to convert the protocol-neutral ODE representation into a SOAP
  * representation and vice versa.
- *
- * @author Maciej Szefler ( m s z e f l e r (at) g m a i l . c o m )
  */
 public class SoapMessageConverter {
 
@@ -77,12 +77,6 @@
 
     private static final Log __log = LogFactory.getLog(SoapMessageConverter.class);
 
-    /** Namespace (in the ODE <message>) for received parts that are in the header but not in the payload. */
-    private static final QName FOREIGN_HEADER_IN = new QName("urn:ode.apache.org/axis2-il/headers/","in");
-
-    /** Namespace (in the ODE <message>) for headers that should be sent but are not in the payload. */
-    private static final QName FOREIGN_HEADER_OUT = new QName("urn:ode.apache.org/axis2-il/headers/","out");
-
     SOAPFactory _soapFactory;
 
     Definition _def;
@@ -101,8 +95,7 @@
 
     private SOAPBinding _soapBinding;
 
-    public SoapMessageConverter(Definition def, QName serviceName, String portName,
-            boolean replicateEmptyNS) throws AxisFault {
+    public SoapMessageConverter(Definition def, QName serviceName, String portName) throws AxisFault {
         if (def == null)
             throw new NullPointerException("Null wsdl def.");
         if (serviceName == null)
@@ -132,7 +125,7 @@
             throw new OdeFault(__msgs.msgMultipleSoapBindingsForPort(_portName));
         }
 
-        _soapBinding = (SOAPBinding) soapBindings.iterator().next();
+        _soapBinding = soapBindings.iterator().next();
         String style = _soapBinding.getStyle();
         _isRPC = style != null && style.equals("rpc");
 
@@ -146,7 +139,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public void createSoapRequest(MessageContext msgCtx, Element message, Operation op) throws AxisFault {
+    public void createSoapRequest(MessageContext msgCtx, org.apache.ode.bpel.iapi.Message message, Operation op) throws AxisFault {
         if (op == null)
             throw new NullPointerException("Null operation");
         // The message can be null if the input message has no part
@@ -170,21 +163,17 @@
             msgCtx.setEnvelope(soapEnv);
         }
 
-        List<SOAPHeader> soapHeaders = getSOAPHeaders(bi);
-        for (SOAPHeader sh : soapHeaders)
-            createSoapHeader(soapEnv, sh, op.getInput().getMessage(), message);
+        createSoapHeaders(soapEnv, getSOAPHeaders(bi), op.getInput().getMessage(), message.getHeaderParts());
 
         SOAPBody soapBody = getSOAPBody(bi);
         if (soapBody != null) {
-            org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ?
-                    _soapFactory.createSOAPBody(soapEnv)
-                    : soapEnv.getBody();
-            createSoapBody(sb, soapBody, op.getInput().getMessage(), message, op.getName());
+            org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ? _soapFactory.createSOAPBody(soapEnv) : soapEnv.getBody();
+            createSoapBody(sb, soapBody, op.getInput().getMessage(), message.getMessage(), op.getName());
         }
 
     }
 
-    public void createSoapResponse(MessageContext msgCtx, Element message, Operation op) throws AxisFault {
+    public void createSoapResponse(MessageContext msgCtx, org.apache.ode.bpel.iapi.Message message, Operation op) throws AxisFault {
         if (op == null)
             throw new NullPointerException("Null operation");
         if (message == null)
@@ -206,49 +195,48 @@
             soapEnv = _soapFactory.getDefaultEnvelope();
             msgCtx.setEnvelope(soapEnv);
         }
-        List<SOAPHeader> soapHeaders = getSOAPHeaders(bo);
-        for (SOAPHeader sh : soapHeaders)
-            createSoapHeader(soapEnv, sh, op.getOutput().getMessage(), message);
+
+        if (message.getHeaderParts().size() > 0 || getSOAPHeaders(bo).size() > 0)
+            createSoapHeaders(soapEnv, getSOAPHeaders(bo), op.getInput().getMessage(), message.getHeaderParts());
 
         SOAPBody soapBody = getSOAPBody(bo);
         if (soapBody != null) {
             org.apache.axiom.soap.SOAPBody sb = soapEnv.getBody() == null ? _soapFactory.createSOAPBody(soapEnv) : soapEnv.getBody();
-            createSoapBody(sb, soapBody, op.getOutput().getMessage(), message, op.getName() + "Response");
+            createSoapBody(sb, soapBody, op.getOutput().getMessage(), message.getMessage(), op.getName() + "Response");
         }
+    }
+
+    public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, Map<String,Element> headers) throws AxisFault {
+        for (SOAPHeader sh : headerDefs) handleSoapHeaderDef(soapEnv, sh, msgdef, headers);
 
+        org.apache.axiom.soap.SOAPHeader soaphdr = soapEnv.getHeader();
+        if (soaphdr == null) soaphdr = _soapFactory.createSOAPHeader(soapEnv);
 
+        for (Element headerElmt : headers.values())
+            if (soaphdr.getFirstChildWithName(new QName(headerElmt.getNamespaceURI(), headerElmt.getLocalName())) == null)
+                soaphdr.addChild(OMUtils.toOM(headerElmt, _soapFactory));
     }
 
     @SuppressWarnings("unchecked")
-    public void createSoapHeader(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Element message) throws AxisFault {
+    private void handleSoapHeaderDef(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Map<String,Element> headers) throws AxisFault {
         boolean payloadMessageHeader = headerdef.getMessage() == null || headerdef.getMessage().equals(msgdef.getQName());
 
-        if (headerdef.getPart() == null)
-            return;
+        if (headerdef.getPart() == null) return;
 
         if (payloadMessageHeader && msgdef.getPart(headerdef.getPart()) == null)
             throw new OdeFault(__msgs.msgSoapHeaderReferencesUnkownPart(headerdef.getPart()));
 
         Element srcPartEl = null;
-        // Message can be null if the operation message has no part
-        if (message != null) {
+        if (headers.size() > 0)
             if (payloadMessageHeader)
-                srcPartEl = DOMUtils.findChildByName(message, new QName(null, headerdef.getPart()));
-            else {
-                Element fho = DOMUtils.findChildByName(message, FOREIGN_HEADER_OUT);
-                if (fho != null) {
-                    srcPartEl = DOMUtils.findChildByName(fho, headerdef.getElementType());
-                }
-            }
-        }
+                srcPartEl = headers.get(headerdef.getPart());
 
         // We don't complain about missing header data unless they are part of the message payload. This is
         // because AXIS may be providing these headers.
         if (srcPartEl == null && payloadMessageHeader)
             throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(headerdef.getPart()));
 
-        if (srcPartEl == null)
-            return;
+        if (srcPartEl == null) return;
 
         org.apache.axiom.soap.SOAPHeader soaphdr = soapEnv.getHeader();
         if (soaphdr == null) {
@@ -258,7 +246,6 @@
         OMElement omPart = OMUtils.toOM(srcPartEl, _soapFactory);
         for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext();)
             soaphdr.addChild(i.next());
-
     }
 
     public SOAPFault createSoapFault(Element message, QName faultName, Operation op) throws AxisFault {
@@ -305,7 +292,7 @@
         return OMUtils.toOM(detail, _soapFactory);
     }
 
-    public void parseSoapRequest(Element odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
+    public void parseSoapRequest(org.apache.ode.bpel.iapi.Message odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
         BindingOperation bop = _binding.getBindingOperation(op.getName(), null, null);
 
         if (bop == null)
@@ -319,13 +306,12 @@
         if (soapBody != null)
             extractSoapBodyParts(odeMessage, envelope.getBody(), soapBody, op.getInput().getMessage(), op.getName());
 
-        List<SOAPHeader> soapHeaders = getSOAPHeaders(bi);
-        for (SOAPHeader sh : soapHeaders)
-            extractSoapHeaderPart(odeMessage, envelope.getHeader(), sh, op.getInput().getMessage());
-
+        if (envelope.getHeader() != null)
+            extractSoapHeaderParts(odeMessage, envelope.getHeader(), getSOAPHeaders(bi), op.getInput().getMessage());
     }
 
-    public void parseSoapResponse(Element odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
+    public void parseSoapResponse(org.apache.ode.bpel.iapi.Message odeMessage,
+                                  SOAPEnvelope envelope, Operation op) throws AxisFault {
         BindingOperation bop = _binding.getBindingOperation(op.getName(), null, null);
 
         if (bop == null)
@@ -337,27 +323,17 @@
 
         SOAPBody soapBody = getSOAPBody(bo);
         if (soapBody != null)
-            extractSoapBodyParts(odeMessage, envelope.getBody(), 
-                    soapBody, op.getOutput().getMessage(), op.getName() + "Response");
+             extractSoapBodyParts(odeMessage, envelope.getBody(), soapBody, op.getOutput().getMessage(), op.getName() + "Response");
 
-        List<SOAPHeader> soapHeaders = getSOAPHeaders(bo);
-        for (SOAPHeader sh : soapHeaders)
-            extractSoapHeaderPart(odeMessage, envelope.getHeader(), sh, op.getInput().getMessage());
+        if (envelope.getHeader() != null)
+            extractSoapHeaderParts(odeMessage, envelope.getHeader(), getSOAPHeaders(bo), op.getOutput().getMessage());
     }
 
     @SuppressWarnings("unchecked")
-    public void createSoapBody(org.apache.axiom.soap.SOAPBody sb,
-            SOAPBody soapBody,
-            Message msgDef,
-            Element message,
-            String rpcWrapper) throws AxisFault {
-
-        OMElement partHolder;
-        if (_isRPC) {
-            partHolder = _soapFactory.createOMElement(new QName(soapBody.getNamespaceURI(),rpcWrapper), sb);
-        } else
-            partHolder = sb;
 
+    public void createSoapBody(org.apache.axiom.soap.SOAPBody sb, SOAPBody soapBody, Message msgDef,
+                               Element message, String rpcWrapper) throws AxisFault {
+        OMElement partHolder = _isRPC ? _soapFactory.createOMElement(new QName(soapBody.getNamespaceURI(),rpcWrapper), sb) : sb;
         List<Part> parts = msgDef.getOrderedParts(soapBody.getParts());
 
         for (Part part : parts) {
@@ -366,12 +342,8 @@
                 throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(part.getName()));
 
             OMElement omPart = OMUtils.toOM(srcPartEl, _soapFactory);
-            if (_isRPC) {
-                partHolder.addChild(omPart);
-            } else {
-                for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext();)
-                    partHolder.addChild(i.next());
-            }
+            if (_isRPC) partHolder.addChild(omPart);
+            else for (Iterator<OMNode> i = omPart.getChildren(); i.hasNext();) partHolder.addChild(i.next());
         }
 
     }
@@ -379,8 +351,8 @@
     // public Element createODEMessage(SOAPEnvelope soapEnv,Operation op) throws AxisFault {
     // }
     @SuppressWarnings("unchecked")
-    public void extractSoapBodyParts(Element message, org.apache.axiom.soap.SOAPBody soapBody, SOAPBody bodyDef, Message msg,String rpcWrapper)
-            throws AxisFault {
+    public void extractSoapBodyParts(org.apache.ode.bpel.iapi.Message message, org.apache.axiom.soap.SOAPBody soapBody,
+                                     SOAPBody bodyDef, Message msg,String rpcWrapper) throws AxisFault {
 
         List<Part> bodyParts = msg.getOrderedParts(bodyDef.getParts());
 
@@ -396,7 +368,7 @@
                 OMElement srcPart = partWrapper.getFirstChildWithName(new QName(null, pdef.getName()));
                 if (srcPart == null)
                     throw new OdeFault(__msgs.msgSOAPBodyDoesNotContainRequiredPart(pdef.getName()));
-                message.appendChild(message.getOwnerDocument().importNode(OMUtils.toDOM(srcPart), true));
+                message.setPart(srcPart.getLocalName(), OMUtils.toDOM(srcPart));
             }
 
         } else {
@@ -412,18 +384,36 @@
                     throw new OdeFault(__msgs.msgBindingDefinesNonElementDocListParts());
                 if (!srcPart.getQName().equals(partDef.getElementName()))
                     throw new OdeFault(__msgs.msgUnexpectedElementInSOAPBody(srcPart.getQName(), partDef.getElementName()));
-                Element destPart = message.getOwnerDocument().createElementNS(null, partDef.getName());
-                message.appendChild(destPart);
-                destPart.appendChild(message.getOwnerDocument().importNode(OMUtils.toDOM(srcPart), true));
+                Document doc = DOMUtils.newDocument();
+                Element destPart = doc.createElementNS(null, partDef.getName());
+                destPart.appendChild(doc.importNode(OMUtils.toDOM(srcPart), true));
+                message.setPart(partDef.getName(), destPart);
             }
         }
     }
 
-    public void extractSoapHeaderPart(Element odeMessage, org.apache.axiom.soap.SOAPHeader header, SOAPHeader headerdef,
+    public void extractSoapHeaderParts(org.apache.ode.bpel.iapi.Message message,
+                                       org.apache.axiom.soap.SOAPHeader soapHeader,
+                                       List<SOAPHeader> headerDefs, Message msg) throws AxisFault {
+        // Checking that the definitions we have are at least there
+        for (SOAPHeader headerDef : headerDefs)
+            handleSoapHeaderPartDef(message, soapHeader, headerDef, msg);
+
+        // Extracting whatever header elements we find in the message, binding and abstract parts
+        // aren't reliable enough given what people do out there.
+        Iterator headersIter = soapHeader.getChildElements();
+        while (headersIter.hasNext()) {
+            OMElement header = (OMElement) headersIter.next();
+            String partName = findHeaderPartName(headerDefs, header.getQName());
+            message.setHeaderPart(partName, OMUtils.toDOM(header));
+        }
+    }
+
+    private void handleSoapHeaderPartDef(org.apache.ode.bpel.iapi.Message odeMessage, org.apache.axiom.soap.SOAPHeader header, SOAPHeader headerdef,
             Message msgType) throws AxisFault {
         // Is this header part of the "payload" messsage?
         boolean payloadMessageHeader = headerdef.getMessage() == null || headerdef.getMessage().equals(msgType.getQName());
-        boolean requiredHeader = payloadMessageHeader || (headerdef.getRequired() != null && headerdef.getRequired() == true);
+        boolean requiredHeader = payloadMessageHeader || (headerdef.getRequired() != null && headerdef.getRequired());
 
         if (requiredHeader && header == null)
             throw new OdeFault(__msgs.msgSoapHeaderMissingRequiredElement(headerdef.getElementType()));
@@ -442,32 +432,25 @@
         if (requiredHeader && headerEl == null)
             throw new OdeFault(__msgs.msgSoapHeaderMissingRequiredElement(headerdef.getElementType()));
 
-        if (headerEl == null)
-            return;
-
-        Element destPart = odeMessage.getOwnerDocument().createElementNS(null, p.getName());
-        odeMessage.appendChild(destPart);
-        destPart.appendChild(odeMessage.getOwnerDocument().importNode(OMUtils.toDOM(headerEl), true));
+        if (headerEl == null) return;
 
-        Element destPart1 = getForeignIn(odeMessage);
-        destPart1.appendChild(odeMessage.getOwnerDocument().importNode(OMUtils.toDOM(headerEl), true));
+        Element msgElmt = odeMessage.getMessage();
+        Element destPart = msgElmt.getOwnerDocument().createElementNS(null, p.getName());
+        msgElmt.appendChild(destPart);
+        destPart.appendChild(msgElmt.getOwnerDocument().importNode(OMUtils.toDOM(headerEl), true));
     }
 
-    /**
-     * Get the "FOREIGN_IN" message extension if it exists, otherwise create it.
-     * @param odeMessage
-     * @return the FOREING_IN extension element.
-     */
-    private Element getForeignIn(Element odeMessage) {
-        Element fi = DOMUtils.findChildByName(odeMessage, FOREIGN_HEADER_IN);
-        if (fi == null) {
-            fi = odeMessage.getOwnerDocument().createElementNS(FOREIGN_HEADER_IN.getNamespaceURI(),FOREIGN_HEADER_IN.getLocalPart());
-            odeMessage.appendChild(fi);
+    private String findHeaderPartName(List<SOAPHeader> headerDefs, QName elmtName) {
+        for (SOAPHeader headerDef : headerDefs) {
+            Message hdrMsg = _def.getMessage(headerDef.getMessage());
+            for (Object o : hdrMsg.getParts().values()) {
+                Part p = (Part) o;
+                if (p.getElementName().equals(elmtName)) return p.getName();
+            }
         }
-        return fi;
+        return elmtName.getLocalPart();
     }
 
-
     public static SOAPBody getSOAPBody(ElementExtensible ee) {
         return getFirstExtensibilityElement(ee, SOAPBody.class);
     }

Modified: ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java (original)
+++ ode/trunk/axis2/src/test/java/org/apache/ode/axis2/SoapMessageConverterTest.java Mon May 19 15:55:12 2008
@@ -37,29 +37,22 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.ode.axis2.util.SoapMessageConverter;
 import org.apache.ode.utils.DOMUtils;
+import org.apache.ode.bpel.engine.MessageImpl;
+import org.apache.ode.bpel.memdao.MessageDAOImpl;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 public class SoapMessageConverterTest extends TestCase {
 
     Definition wsdl1, wsdlHW;
-
     String wsdl1tns = "http://documentum.com/ws/2005/services";
-
     QName repoService = new QName(wsdl1tns, "RepoAccessorService");
-
     QName portTypeName = new QName(wsdl1tns, "RepoAccessor");
-
     String portName = "RepoAccessor";
-
     SoapMessageConverter portmapper;
-
     PortType portType, portTypeHW;
-
     Document req1bad;
-
     Document req1;
-
     private Operation op1, opHello;
 
     public SoapMessageConverterTest() throws Exception {
@@ -76,7 +69,7 @@
     }
 
     public void setUp() throws Exception {
-        portmapper = new SoapMessageConverter(wsdl1, repoService, portName, true);
+        portmapper = new SoapMessageConverter(wsdl1, repoService, portName);
     }
 
     public void tearDown() {
@@ -85,7 +78,7 @@
 
     public void testBadPortName() {
         try {
-            new SoapMessageConverter(wsdl1, repoService, "badPort", true);
+            new SoapMessageConverter(wsdl1, repoService, "badPort");
             fail("Should have thrown axis error.");
         } catch (AxisFault af) {
             ;// expected
@@ -94,7 +87,7 @@
 
     public void testBadServiceName() {
         try {
-            new SoapMessageConverter(wsdl1, new QName(wsdl1tns, "foobar"), portName, true);
+            new SoapMessageConverter(wsdl1, new QName(wsdl1tns, "foobar"), portName);
             fail("Should have thrown axis error.");
         } catch (AxisFault af) {
             ;// expected
@@ -103,7 +96,9 @@
 
     public void testCreateSOAPRequest() throws Exception {
         MessageContext msgCtx = new MessageContext();
-        portmapper.createSoapRequest(msgCtx, req1.getDocumentElement(), portType.getOperation("getObjectId", null, null));
+        MessageImpl odeMsg = new MessageImpl(new MessageDAOImpl(null));
+        odeMsg.setMessage(req1.getDocumentElement());
+        portmapper.createSoapRequest(msgCtx, odeMsg, portType.getOperation("getObjectId", null, null));
         SOAPEnvelope env = msgCtx.getEnvelope();
         System.out.println("testCreateSOAPRequest: " + env);
         QName elPartName = new QName(wsdl1tns, "getObjectId");
@@ -116,9 +111,10 @@
 
     public void testCreateSOAPRequestFail() throws Exception {
         MessageContext msgCtx = new MessageContext();
+        MessageImpl odeMsg = new MessageImpl(new MessageDAOImpl(null));
+        odeMsg.setMessage(req1bad.getDocumentElement());
         try {
-            portmapper.createSoapRequest(msgCtx, req1bad.getDocumentElement(), portType.getOperation("getObjectId", null,
-                    null));
+            portmapper.createSoapRequest(msgCtx, odeMsg, portType.getOperation("getObjectId", null, null));
             fail("Should have caused an ex");
         } catch (AxisFault af) {
             ; // expected
@@ -132,23 +128,34 @@
 
     public void testParseRequest() throws Exception {
         MessageContext msgCtx = new MessageContext();
-        portmapper.createSoapRequest(msgCtx, req1.getDocumentElement(), op1);
+        MessageImpl odeMsg1 = new MessageImpl(new MessageDAOImpl(null));
+        odeMsg1.setMessage(req1.getDocumentElement());
+        odeMsg1.setHeaderPart("DocumentumRequestHeader", DOMUtils.findChildByName(req1.getDocumentElement(),
+                new QName("http://documentum.com/ws/2005/services", "DocumentumSecurityToken")));
+        portmapper.createSoapRequest(msgCtx, odeMsg1, op1);
+        
         SOAPEnvelope env = msgCtx.getEnvelope();
         System.out.println("testParseRequest: " + env);
-        Element odeMsg = DOMUtils.stringToDOM("<message/>");
-        portmapper.parseSoapRequest(odeMsg, env, op1);
-        System.out.println("testParseRequest: " + DOMUtils.domToString(odeMsg));
-        Element params = DOMUtils.findChildByName(odeMsg, new QName(null, "parameters"));
+        Element odeMsgElmt = DOMUtils.stringToDOM("<message/>");
+        MessageImpl odeMsg2 = new MessageImpl(new MessageDAOImpl(null));
+        odeMsg1.setMessage(odeMsgElmt);
+        portmapper.parseSoapRequest(odeMsg2, env, op1);
+
+        Element params = DOMUtils.findChildByName(odeMsg2.getMessage(), new QName(null, "parameters"));
         assertNotNull(params);
-        Element hdr = DOMUtils.findChildByName(odeMsg, new QName("urn:ode.apache.org/axis2-il/header",
-                "DocumentumRequestHeader"));
-        assertNotNull(hdr);
+        assertNotNull(odeMsg2.getHeaderPart("DocumentumRequestHeader"));
+        Element hdrElmt = DOMUtils.findChildByName(odeMsg2.getHeaderPart("DocumentumRequestHeader"), new QName("http://documentum.com/ws/2005/services",
+                "DocumentumSecurityToken"));
+        assertNotNull(hdrElmt);
+        Element hdrBdyElmt = DOMUtils.findChildByName(odeMsg2.getPart("DocumentumRequestHeader"), new QName("http://documentum.com/ws/2005/services",
+                "DocumentumSecurityToken"));
+        assertNotNull(hdrBdyElmt);
     }
 
     /** Make sure hello world request parses correctly. */
     public void testHelloWorldRequest() throws Exception {
         SoapMessageConverter portmaper1 = new SoapMessageConverter(wsdlHW, new QName(wsdlHW
-                .getTargetNamespace(), "HelloService"), "HelloPort", false);
+                .getTargetNamespace(), "HelloService"), "HelloPort");
 
         XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(
                 getClass().getResourceAsStream("/HelloWorldRequest.soap"));
@@ -156,7 +163,9 @@
         SOAPEnvelope se = builder.getSOAPEnvelope();
 
         Element msg = DOMUtils.stringToDOM("<message/>");
-        portmaper1.parseSoapRequest(msg, se, opHello);
+        MessageImpl odeMsg = new MessageImpl(new MessageDAOImpl(null));
+        odeMsg.setMessage(msg);
+        portmaper1.parseSoapRequest(odeMsg, se, opHello);
         System.out.println(DOMUtils.domToString(msg));
     }
 

Modified: ode/trunk/axis2/src/test/resources/testRequest1.xml
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/test/resources/testRequest1.xml?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/axis2/src/test/resources/testRequest1.xml (original)
+++ ode/trunk/axis2/src/test/resources/testRequest1.xml Mon May 19 15:55:12 2008
@@ -24,8 +24,6 @@
       </getObjectId>
    </parameters>
    
-   <DocumentumRequestHeader xmlns="urn:ode.apache.org/axis2-il/header">
-   		<DocumentumSecurityToken xmlns="http://documentum.com/ws/2005/services"/>
-   </DocumentumRequestHeader>
-   
+    <DocumentumSecurityToken xmlns="http://documentum.com/ws/2005/services">SEKREET</DocumentumSecurityToken>
+
 </message>
\ No newline at end of file

Modified: ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java (original)
+++ ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java Mon May 19 15:55:12 2008
@@ -19,6 +19,7 @@
 package org.apache.ode.bpel.iapi;
 
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.namespace.QName;
 
@@ -28,47 +29,63 @@
 /**
  * A representation of a WSDL-typed message. The implementation of this 
  * interface is provided by the integration layer. 
- * 
- * TODO: flush this out WRT Sybase requirements.
- * TODO: should we provide meta-data through this interface or will that
- *       put an undue burden on the integration layer?
  */
 public interface Message {
 
-  /**
-   * Get the message type. 
-   * @return message type.
-   */
-  QName getType();
-  
-  List<String> getParts();
-  
-  /**
-   * Get a message part.
-   * @param partName name of the part
-   * @return named {@l
-   */
-  Element getPart(String partName);
-   
-  /**
-   * Set the message part.
-   * @param partName name of part
-   * @param content part content
-   */
-  void setMessagePart(String partName, Element content);
-
-  /**
-   * Set the message as an element. The name of the element is irrelevant,
-   * but it should have one child element for each message part.
-   * TODO: remove this, temporary hack.
-   */
-  void setMessage(Element msg);
-
-  /**
-   * Get the message as an element. The returned element will have one 
-   * child element corresponding (and named after) each part in the message.
-   * TODO: remove this, temporary hack.
-   */ 
-  Element getMessage();
-  
+    /**
+     * Get the message type.
+     * @return message type.
+     */
+    QName getType();
+
+    List<String> getParts();
+
+    /**
+     * Get a message part.
+     * @param partName name of the part
+     * @return named {@l
+     */
+    Element getPart(String partName);
+
+    /**
+     * Set the message part.
+     * @param partName name of part
+     * @param content part content
+     */
+    void setPart(String partName, Element content);
+
+    /**
+     * Get a header part.
+     * @param partName name of the header part
+     * @return named
+     */
+    Element getHeaderPart(String partName);
+
+    /**
+     * Set a header part element.
+     * @param name header part name
+     * @param content header part element
+     */
+    void setHeaderPart(String name, Element content);
+
+    /**
+     * Gets all header parts in the message.
+     * @return
+     */
+    Map<String, Element> getHeaderParts();
+
+    /**
+     * Set the message as an element. The name of the element is irrelevant,
+     * but it should have one child element for each message part.
+     * TODO: remove this, temporary hack.
+     */
+    void setMessage(Element msg);
+
+    /**
+     * Get the message as an element. The returned element will have one
+     * child element corresponding (and named after) each part in the message.
+     * TODO: remove this, temporary hack.
+     */
+    Element getMessage();
+
 }

Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/AssignGenerator.java Mon May 19 15:55:12 2008
@@ -128,8 +128,7 @@
         // If direct Message->Message copy
         if (ocopy.to instanceof OAssign.VariableRef && ((OAssign.VariableRef) ocopy.to).isMessageRef()
                 && ocopy.from instanceof OAssign.VariableRef && ((OAssign.VariableRef) ocopy.from).isMessageRef()) {
-            // Check that the LValue/RValue message types
-            // match up.
+            // Check that the LValue/RValue message types match up.
             String lvar = ((OAssign.VariableRef) ocopy.to).variable.name;
             String rvar = ((OAssign.VariableRef) ocopy.from).variable.name;
             QName tlvalue = ((OMessageVarType) ((OAssign.VariableRef) ocopy.to).variable.type).messageType;
@@ -202,6 +201,13 @@
                     if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
                         vref.location = _context.compileExpr(vv.getLocation());
                 }
+                if (vv.getHeader() != null) {
+                    vref.headerPart = _context.resolveHeaderPart(vref.variable, vv.getHeader());
+                    if (vref.headerPart == null)
+                        vref.headerPart = new OMessageVarType.Part(_context.getOProcess(), vv.getHeader(), null);
+                    if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
+                        vref.location = _context.compileExpr(vv.getLocation());
+                }
                 return vref;
             } else if (from.isPartnerLinkVal()) {
                 PartnerLinkVal plv = from.getAsPartnerLinkVal();
@@ -262,6 +268,13 @@
                     if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
                         vref.location = _context.compileExpr(vv.getLocation());
                 }
+                if (to.getAsVariableVal().getHeader() != null) {
+                    vref.headerPart = _context.resolveHeaderPart(vref.variable, vv.getHeader());
+                    if (vref.headerPart == null)
+                        vref.headerPart = new OMessageVarType.Part(_context.getOProcess(), to.getAsVariableVal().getHeader(), null);
+                    if (vv.getLocation() != null && vv.getLocation().getExpression() != null)
+                        vref.location = _context.compileExpr(vv.getLocation());
+                }
                 return vref;
             } else if (to.isPartnerLinkVal()) {
                 OAssign.PartnerLinkRef plref = new OAssign.PartnerLinkRef(_context.getOProcess());

Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java Mon May 19 15:55:12 2008
@@ -438,6 +438,13 @@
         return part;
     }
 
+    public OMessageVarType.Part resolveHeaderPart(OScope.Variable var, String partname) {
+        if (!(var.type instanceof OMessageVarType))
+            throw new CompilationException(__cmsgs.errMessageVariableRequired(var.name));
+        OMessageVarType msgVarType = (OMessageVarType) var.type;
+        return msgVarType.parts.get(partname);
+    }
+
     public PartnerLinkType resolvePartnerLinkType(QName partnerLinkType) {
 
         PartnerLinkType plinkType = _wsdlRegistry.getPartnerLinkType(partnerLinkType);

Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/api/CompilerContext.java Mon May 19 15:55:12 2008
@@ -92,6 +92,9 @@
     OMessageVarType.Part resolvePart(OScope.Variable variable, String partname)
             throws CompilationException;
 
+    OMessageVarType.Part resolveHeaderPart(OScope.Variable variable, String partname)
+            throws CompilationException;
+
     OActivity compile(Activity child)
             throws CompilationException;
 

Modified: ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java (original)
+++ ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/VariableVal.java Mon May 19 15:55:12 2008
@@ -39,13 +39,20 @@
 
     /**
      * Get the (optional) message part.
-     * 
      * @return name of the message part, or <code>null</code>
      */
     public String getPart() {
         return getAttribute("part", null);
     }
 
+    /**
+     * Get the (optional) header part.
+     * @return name of the header part, or <code>null</code>
+     */
+    public String getHeader() {
+        return getAttribute("header", null);
+    }
+
     public Expression getLocation() {
         return getFirstChild(Query.class);
     }

Modified: ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java (original)
+++ ode/trunk/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler/XPathTest.java Mon May 19 15:55:12 2008
@@ -276,4 +276,8 @@
 	public ExtensionValidator getExtensionValidator(QName extensionElementName) {
 		return null;
 	}
+
+    public Part resolveHeaderPart(Variable variable, String partname) throws CompilationException {
+        return null;
+    }
 }

Modified: ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java (original)
+++ ode/trunk/bpel-dao/src/main/java/org/apache/ode/bpel/dao/MessageDAO.java Mon May 19 15:55:12 2008
@@ -43,4 +43,10 @@
     /** Get the message data (content). */
     Element getData();
 
+    /** Set the message header (content). */
+    void setHeader(Element value);
+    
+    /** Get the message header (content). */
+    Element getHeader();
+ 
 }

Modified: ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java (original)
+++ ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OAssign.java Mon May 19 15:55:12 2008
@@ -212,6 +212,7 @@
         private static final long serialVersionUID = 1L;
         public OScope.Variable variable;
         public OMessageVarType.Part part;
+        public OMessageVarType.Part headerPart;
         public OExpression location;
 
         public VariableRef(OProcess owner) {
@@ -227,8 +228,7 @@
          * @return <code>true</code> if whole-message reference
          */
         public boolean isMessageRef() { 
-            return variable.type instanceof OMessageVarType && 
-            part == null && location == null;
+            return variable.type instanceof OMessageVarType && part == null && headerPart == null && location == null;
         }
         
         /**
@@ -236,10 +236,13 @@
          * @return <code>true</code> if reference to a message part
          */
         public boolean isPartRef() {
-            return variable.type instanceof OMessageVarType && 
-            part != null && location == null;
+            return variable.type instanceof OMessageVarType && part != null && location == null;
         }
         
+        public boolean isHeaderRef() {
+            return variable.type instanceof OMessageVarType && headerPart != null && location == null;
+        }
+
         public String toString() {
             return "{VarRef " + variable  +
                     (part==null ? "" : "." + part.name) +

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelRuntimeContextImpl.java Mon May 19 15:55:12 2008
@@ -101,6 +101,8 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Document;
 
 class BpelRuntimeContextImpl implements BpelRuntimeContext {
 
@@ -526,7 +528,7 @@
         MessageDAO message = myrolemex.createMessage(
                 operation.getOutput().getMessage()
                 .getQName());
-        message.setData(msg);
+        buildOutgoingMessage(message, msg);
 
         myrolemex.setResponse(message);
 
@@ -686,8 +688,8 @@
         MessageDAO message = mexDao.createMessage(operation.getInput().getMessage().getQName());
         mexDao.setRequest(message);
         mexDao.setTimeout(30000);
-        message.setData(outgoingMessage);
         message.setType(operation.getInput().getMessage().getQName());
+        buildOutgoingMessage(message, outgoingMessage);
 
         // prepare event
         ProcessMessageExchangeEvent evt = new ProcessMessageExchangeEvent();
@@ -697,14 +699,11 @@
         evt.setMexId(mexDao.getMessageExchangeId());
         sendEvent(evt);
 
-
         if (__log.isDebugEnabled()) {
             __log.debug("INVOKING PARTNER: partnerLink=" + partnerLink + ", op=" + operation.getName() + " channel="
                     + channel + ")");
         }
-
         _bpelProcess.invokePartner(mexDao);
-       
 
         // In case a response/fault was available right away, which will happen for BLOCKING/TRANSACTED invocations,
         // we need to inject a message on the response channel, so that the process continues.
@@ -720,7 +719,23 @@
         }
         
         return mexDao.getMessageExchangeId();
+    }
 
+    private void buildOutgoingMessage(MessageDAO message, Element outgoingElmt) {
+        if (outgoingElmt == null) return;
+        
+        Document doc = DOMUtils.newDocument();
+        Element header = doc.createElement("header");
+        NodeList parts = outgoingElmt.getChildNodes();
+        for (int m = 0; m < parts.getLength(); m++) {
+            Element part = (Element) parts.item(m);
+            if (part.getAttribute("headerPart") != null && part.getAttribute("headerPart").length() > 0) {
+                header.appendChild(doc.importNode(part, true));
+                outgoingElmt.removeChild(part);
+            }
+        }
+        message.setData(outgoingElmt);
+        message.setHeader(header);
     }
 
     void execute() {
@@ -990,7 +1005,7 @@
     }
 
     public Element getPartnerResponse(String mexId) {
-        return _getPartnerResponse(mexId).getData();
+        return mergeHeaders(_getPartnerResponse(mexId));
     }
 
     public Element getMyRequest(String mexId) {
@@ -1017,8 +1032,29 @@
             throw new BpelEngineException(msg);
         }
 
-        return request.getData();
+        return mergeHeaders(request);
+    }
+
+    private Element mergeHeaders(MessageDAO msg) {
+        // Merging header data, it's all stored in the same variable
+        Element data = msg.getData();
+        if (msg.getHeader() != null) {
+            if (data == null) {
+                Document doc = DOMUtils.newDocument();
+                data = doc.createElement("message");
+                doc.appendChild(data);
+            }
 
+            NodeList headerParts = msg.getHeader().getChildNodes();
+            for (int m = 0; m < headerParts.getLength(); m++) {
+                if (headerParts.item(m).getNodeType() == Node.ELEMENT_NODE) {
+                    Element headerPart = (Element) headerParts.item(m);
+                    headerPart.setAttribute("headerPart", "true");
+                    data.appendChild(data.getOwnerDocument().importNode(headerPart, true));
+                }
+            }
+        }
+        return data;
     }
 
     public QName getPartnerFault(String mexId) {

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/DbBackedMessageImpl.java Mon May 19 15:55:12 2008
@@ -25,7 +25,16 @@
 
     @Override
     public void setMessage(Element msg) {
-        
+        _dao.setData(msg);
     }
 
+    @Override
+    public Element getHeader() {
+        return _dao.getHeader();
+    }
+
+    @Override
+    public void setHeader(Element msg) {
+        _dao.setHeader(msg);
+    }
 }

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MemBackedMessageImpl.java Mon May 19 15:55:12 2008
@@ -13,14 +13,14 @@
 class MemBackedMessageImpl extends MessageImpl {
 
     private Element _msg;
+    private Element _header;
 
     private QName _type;
 
     MemBackedMessageImpl(Element msg, QName type, boolean ro) {
         _msg = msg;
         _type = type;
-        if (ro)
-            makeReadOnly();
+        if (ro) makeReadOnly();
     }
 
     @Override
@@ -29,14 +29,25 @@
     }
 
     @Override
+    public void setMessage(Element msg) {
+        checkWrite();
+        _msg = msg;
+    }
+
+    @Override
     public QName getType() {
         return _type;
     }
 
     @Override
-    public void setMessage(Element msg) {
+    public Element getHeader() {
+        return _header;
+    }
+    
+    @Override
+    public void setHeader(Element header) {
         checkWrite();
-        _msg = msg;
+        _header = header;
     }
 
 }

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java Mon May 19 15:55:12 2008
@@ -21,15 +21,19 @@
 
 import java.util.List;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Node;
+import org.w3c.dom.Document;
 
 import org.apache.ode.bpel.dao.MessageDAO;
 import org.apache.ode.bpel.iapi.Message;
+import org.apache.ode.utils.DOMUtils;
 
 /**
  * Implementation of the {@link Message} interface. 
@@ -43,22 +47,51 @@
     public Element getPart(String partName) {
         Element message = getMessage();
         NodeList eltList = message.getElementsByTagName(partName);
-        if (eltList.getLength() == 0)
-            return null;
-        else
-            return (Element) eltList.item(0);
+        if (eltList.getLength() == 0) return null;
+        else return (Element) eltList.item(0);
     }
 
-    public void setMessagePart(String partName, Element content) {
+    public void setPart(String partName, Element content) {
         Element message = getMessage();
+        if (message == null) {
+            Document doc = DOMUtils.newDocument();
+            message = doc.createElement("message");
+            doc.appendChild(message);
+        }
         message.appendChild(message.getOwnerDocument().importNode(content, true));
         setMessage(message);
     }
 
+    public Element getHeaderPart(String partName) {
+        Element header = getHeader();
+        if (header == null) return null;
+
+        NodeList eltList = header.getElementsByTagName(partName);
+        if (eltList.getLength() == 0) return null;
+        else return (Element) eltList.item(0);
+    }
+
+    public void setHeaderPart(String name, Element content) {
+        Element header =  getHeader();
+        if (header == null) {
+            Document doc = DOMUtils.newDocument();
+            header = doc.createElement("header");
+            doc.appendChild(header);
+        }
+        Element part = header.getOwnerDocument().createElement(name);
+        header.appendChild(part);
+        part.appendChild(header.getOwnerDocument().importNode(content, true));
+        setHeader(header);
+      }
+
     public abstract void setMessage(Element msg);
 
     public abstract Element getMessage();
 
+    public abstract void setHeader(Element msg);
+
+    public abstract Element getHeader();
+
     public abstract QName getType();
 
     public List<String> getParts() {
@@ -73,6 +106,19 @@
         return parts;
     }
 
+    public Map<String, Element> getHeaderParts() {
+        HashMap<String,Element> l = new HashMap<String,Element>();
+        Element header =  getHeader();
+        if (header != null) {
+            NodeList children = header.getChildNodes();
+            for (int m = 0; m < children.getLength(); m++)
+                if (children.item(m).getNodeType() == Node.ELEMENT_NODE) {
+                    Element part = (Element) children.item(m);
+                    l.put(part.getLocalName(), DOMUtils.getFirstChildElement(part));
+                }
+        }
+        return l;
+    }
     
     protected void makeReadOnly() {
         _readOnly = true;

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ProcessAndInstanceManagementImpl.java Mon May 19 15:55:12 2008
@@ -1132,7 +1132,7 @@
 
         // Name filter can be implemented using only the PIDs.
         if (filter != null && filter.getNameFilter() != null) {
-            final Pattern pattern = Pattern.compile(filter.getNameFilter().replace("*",".*"));
+            final Pattern pattern = Pattern.compile(filter.getNameFilter().replace("*",".*") + "(-\\d*)?");
             CollectionsX.remove_if(pids, new MemberOfFunction<QName>() {
                 @Override
                 public boolean isMember(QName o) {

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/memdao/MessageDAOImpl.java Mon May 19 15:55:12 2008
@@ -28,6 +28,7 @@
 public class MessageDAOImpl extends DaoBaseImpl implements MessageDAO {
 	private QName type;
 	private Element data;
+	private Element header;
 	
 	public MessageDAOImpl() {
 	}
@@ -45,11 +46,17 @@
 	}
 
 	public Element getData() {
-		if ( data == null ) {
-			data = DOMUtils.newDocument().getDocumentElement();
-		}
+		if ( data == null ) data = DOMUtils.newDocument().getDocumentElement();
 		return data;
 	}
 
-	
+ 	public void setHeader(Element value) {
+ 		this.header = value;
+ 	}
+
+ 	public Element getHeader() {
+ 		if ( header == null ) header = DOMUtils.newDocument().getDocumentElement();
+ 		return header;
+ 	}
+
 }

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java Mon May 19 15:55:12 2008
@@ -181,53 +181,39 @@
             OAssign.VariableRef varRef = (OAssign.VariableRef) from;
             sendVariableReadEvent(_scopeFrame.resolve(varRef.variable));
             Node data = fetchVariableData(_scopeFrame.resolve(varRef.variable), false);
-            retVal = evalQuery(data, varRef.part, varRef.location,
-                    getEvaluationContext());
+            retVal = evalQuery(data, varRef.part != null ? varRef.part : varRef.headerPart, varRef.location, getEvaluationContext());
         } else if (from instanceof OAssign.PropertyRef) {
             OAssign.PropertyRef propRef = (OAssign.PropertyRef) from;
             sendVariableReadEvent(_scopeFrame.resolve(propRef.variable));
             Node data = fetchVariableData(_scopeFrame.resolve(propRef.variable), false);
-
             retVal = evalQuery(data, propRef.propertyAlias.part,
                     propRef.propertyAlias.location, getEvaluationContext());
-
         } else if (from instanceof OAssign.PartnerLinkRef) {
             OAssign.PartnerLinkRef pLinkRef = (OAssign.PartnerLinkRef) from;
-            PartnerLinkInstance pLink = _scopeFrame
-                    .resolve(pLinkRef.partnerLink);
+            PartnerLinkInstance pLink = _scopeFrame.resolve(pLinkRef.partnerLink);
             Node tempVal =pLinkRef.isMyEndpointReference ?
                     getBpelRuntimeContext().fetchMyRoleEndpointReferenceData(pLink)
                     : getBpelRuntimeContext().fetchPartnerRoleEndpointReferenceData(pLink);
             if (__log.isDebugEnabled())
                 __log.debug("RValue is a partner link, corresponding endpoint "
-                        + tempVal.getClass().getName() + " has value "
-                        + DOMUtils.domToString(tempVal));
+                        + tempVal.getClass().getName() + " has value " + DOMUtils.domToString(tempVal));
             retVal = tempVal;
         } else if (from instanceof OAssign.Expression) {
             List<Node> l;
             OExpression expr = ((OAssign.Expression) from).expression;
 
-            l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr,
-                    getEvaluationContext());
+            l = getBpelRuntimeContext().getExpLangRuntime().evaluate(expr, getEvaluationContext());
 
             if (l.size() == 0) {
                 String msg = __msgs.msgRValueNoNodesSelected(expr.toString());
-                if (__log.isDebugEnabled())
-                    __log.debug(from + ": " + msg);
-                throw new FaultException(
-                        getOAsssign().getOwner().constants.qnSelectionFailure,
-                        msg);
-
+                if (__log.isDebugEnabled()) __log.debug(from + ": " + msg);
+                throw new FaultException(getOAsssign().getOwner().constants.qnSelectionFailure,msg);
             } else if (l.size() > 1) {
-                String msg = __msgs.msgRValueMultipleNodesSelected(expr
-                        .toString());
-                if (__log.isDebugEnabled())
-                    __log.debug(from + ": " + msg);
-                throw new FaultException(
-                        getOAsssign().getOwner().constants.qnSelectionFailure,
-                        msg);
+                String msg = __msgs.msgRValueMultipleNodesSelected(expr.toString());
+                if (__log.isDebugEnabled()) __log.debug(from + ": " + msg);
+                throw new FaultException(getOAsssign().getOwner().constants.qnSelectionFailure, msg);
             }
-            retVal = (Node) l.get(0);
+            retVal = l.get(0);
         } else if (from instanceof OAssign.Literal) {
             Element literalRoot = ((OAssign.Literal) from).getXmlLiteral().getDocumentElement();
             assert literalRoot.getLocalName().equals("literal");
@@ -372,7 +358,7 @@
 
             // Get a pointer within the lvalue.
             Node lvaluePtr = lvalue;
-
+            boolean headerAssign = false;
             if (ocopy.to instanceof OAssign.DirectRef) {
                 DirectRef dref = ((DirectRef) ocopy.to);
                 Element el = DOMUtils.findChildByName((Element)lvalue, dref.elName);
@@ -383,10 +369,8 @@
                 lvaluePtr = el;
             } else if (ocopy.to instanceof OAssign.VariableRef) {
                 VariableRef varRef = ((VariableRef) ocopy.to);
-                lvaluePtr = evalQuery(
-                        lvalue,
-                        varRef.part,
-                        varRef.location,
+                if (varRef.headerPart != null) headerAssign = true;
+                lvaluePtr = evalQuery(lvalue, varRef.part != null ? varRef.part : varRef.headerPart, varRef.location,
                         new EvaluationContextProxy(varRef.getVariable(), lvalue));
             } else if (ocopy.to instanceof OAssign.PropertyRef) {
                 PropertyRef propRef = ((PropertyRef) ocopy.to);
@@ -417,8 +401,9 @@
                         rvalue = ((Document)rvalue).getDocumentElement();
                 }
 
-                if (rvalue.getNodeType() == Node.ELEMENT_NODE
-                        && lvaluePtr.getNodeType() == Node.ELEMENT_NODE) {
+                if (headerAssign && lvaluePtr.getParentNode().getNodeName().equals("message")) {
+                    lvalue = copyInto((Element)lvalue, (Element) lvaluePtr, (Element) rvalue);
+                } else if (rvalue.getNodeType() == Node.ELEMENT_NODE && lvaluePtr.getNodeType() == Node.ELEMENT_NODE) {
                     lvalue = replaceElement((Element)lvalue, (Element) lvaluePtr, (Element) rvalue,
                             ocopy.keepSrcElementName);
                 } else {
@@ -482,6 +467,11 @@
         return (lval == ptr) ? replacement :  lval;
     }
 
+    private Element copyInto(Element lval, Element ptr, Element src) {
+        ptr.appendChild(ptr.getOwnerDocument().importNode(src, true));
+        return lval;
+    }
+
     /**
      * isInsert flag desginates this as an 'element' type insertion, which
      * requires insert the actual element value, rather than it's children
@@ -557,27 +547,37 @@
         return lvalue;
     }
 
-    private Node evalQuery(Node lvalue, OMessageVarType.Part part,
+    private Node evalQuery(Node data, OMessageVarType.Part part,
                            OExpression expression, EvaluationContext ec) throws FaultException {
-        assert lvalue != null;
+        assert data != null;
 
         if (part != null) {
             QName partName = new QName(null, part.name);
-            Node qualLVal = DOMUtils
-                    .findChildByName((Element) lvalue, partName);
+            Node qualLVal = DOMUtils.findChildByName((Element) data, partName);
             if (part.type instanceof OElementVarType) {
                 QName elName = ((OElementVarType) part.type).elementType;
                 qualLVal = DOMUtils.findChildByName((Element) qualLVal, elName);
+            } else if (part.type == null) {
+                // Special case of header parts never referenced in the WSDL def
+                if (qualLVal != null && qualLVal.getNodeType() == Node.ELEMENT_NODE
+                        && ((Element)qualLVal).getAttribute("headerPart") != null)
+                    qualLVal = DOMUtils.getFirstChildElement((Element) qualLVal);
+                // The needed part isn't there, dynamically creating it
+                if (qualLVal == null) {
+                    qualLVal = data.getOwnerDocument().createElementNS(null, part.name);
+                    ((Element)qualLVal).setAttribute("headerPart", "true");
+                    data.appendChild(qualLVal);
+                }
             }
-            lvalue = qualLVal;
+            data = qualLVal;
         }
 
         if (expression != null) {
             // Neat little trick....
-            lvalue = ec.evaluateQuery(lvalue, expression);
+            data = ec.evaluateQuery(data, expression);
         }
 
-        return lvalue;
+        return data;
     }
 
     private void invokeExtensionAssignOperation(OAssign.ExtensionAssignOperation eao) throws FaultException {

Modified: ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java (original)
+++ ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/PICK.java Mon May 19 15:55:12 2008
@@ -136,7 +136,7 @@
 
     /**
      * Calculate a duration offset from right now.
-     * 
+     *
      * @param duration
      *            the offset
      * @return the resulting date.
@@ -150,13 +150,11 @@
     @SuppressWarnings("unchecked")
     private void initVariable(String mexId, OPickReceive.OnMessage onMessage) {
         // This is allowed, if there is no parts in the message for example.
-        if (onMessage.variable == null)
-            return;
+        if (onMessage.variable == null) return;
 
         Element msgEl = getBpelRuntimeContext().getMyRequest(mexId);
-        Collection<String> partNames = (Collection<String>) onMessage.operation.getInput().getMessage().getParts()
-                .keySet();
-        
+        Collection<String> partNames = (Collection<String>) onMessage.operation.getInput().getMessage().getParts().keySet();
+
         // Let's do some sanity checks here so that we don't get weird errors in assignment later.
         // The engine should have checked to make sure that the messages that are  delivered conform 
         // to the correct format; but you know what they say, don't trust anyone.  
@@ -165,7 +163,7 @@
             __log.fatal(errmsg);
             throw new InvalidProcessException(errmsg);
         }
-        
+
         OMessageVarType vartype = (OMessageVarType) onMessage.variable.type;
 
         // Check that each part contains what we expect. 
@@ -210,7 +208,7 @@
         VariableInstance vinst = _scopeFrame.resolve(onMessage.variable);
         
         try {
-        initializeVariable(vinst, msgEl);
+            initializeVariable(vinst, msgEl);
         } catch (ExternalVariableModuleException e) {
         	__log.error("Exception while initializing external variable", e);
             _self.parent.failure(e.toString(), null);

Modified: ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java (original)
+++ ode/trunk/bpel-runtime/src/test/java/org/apache/ode/bpel/elang/xpath20/runtime/MockCompilerContext.java Mon May 19 15:55:12 2008
@@ -212,4 +212,9 @@
 	public ExtensionValidator getExtensionValidator(QName extensionElementName) {
 		return null;
 	}
+
+     public Part resolveHeaderPart(Variable variable, String partname) throws CompilationException {
+         return null;
+     }
+
 }

Modified: ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java (original)
+++ ode/trunk/bpel-test/src/main/java/org/apache/ode/test/MessageExchangeContextImpl.java Mon May 19 15:55:12 2008
@@ -84,7 +84,7 @@
 			elm2.setTextContent(cat);
             final Message response = prmx.createMessage(prmx.getOperation().getOutput().getMessage().getQName());
             response.setMessage(msg.getMessage());
-            response.setMessagePart("probeData", elm2);
+            response.setPart("probeData", elm2);
 			prmx.reply(response);
 		}
 	}

Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/MessageDaoImpl.java Mon May 19 15:55:12 2008
@@ -67,7 +67,25 @@
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
+    }
+
+    public void setHeader(Element value) {
+        if (value == null) return;
+        if (_hself.getHeader() != null)
+            _session.delete(_hself.getHeader());
+        HLargeData newdata = new HLargeData(DOMUtils.domToString(value));
+        _session.save(newdata);
+        _hself.setHeader(newdata);
+        update();
+    }
 
+    public Element getHeader() {
+        if (_hself.getHeader() == null) return null;
+        try {
+            return DOMUtils.stringToDOM(_hself.getHeader().getText());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
     }
 
 }

Modified: ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java (original)
+++ ode/trunk/dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/hobj/HMessage.java Mon May 19 15:55:12 2008
@@ -27,25 +27,35 @@
  */
 public class HMessage extends HObject {
 
-  private String _type;
-  private HLargeData _data;
-  
-  public void setType(String type) {
-    _type = type;
-  }
-
-  /** @hibernate.property column="TYPE" */
-  public String getType() {
-    return _type;
-  }
-
-  /** @hibernate.many-to-one column="DATA" */
-  public HLargeData getMessageData() {
-    return _data;
-  }
-
-  public void setMessageData(HLargeData data) {
-    _data = data;
-  }
+    private String _type;
+    private HLargeData _data;
+    private HLargeData _header;
+
+    public void setType(String type) {
+        _type = type;
+    }
+
+    /** @hibernate.property column="TYPE" */
+    public String getType() {
+        return _type;
+    }
+
+    /** @hibernate.many-to-one column="DATA" */
+    public HLargeData getMessageData() {
+        return _data;
+    }
+
+    public void setMessageData(HLargeData data) {
+        _data = data;
+    }
+
+    /** @hibernate.many-to-one column="HEADER" */
+    public HLargeData getHeader() {
+        return _header;
+    }
+
+    public void setHeader(HLargeData header) {
+        _header = header;
+    }
 
 }

Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MessageDAOImpl.java Mon May 19 15:55:12 2008
@@ -40,47 +40,68 @@
 @Table(name="ODE_MESSAGE")
 public class MessageDAOImpl implements MessageDAO {
 
-	@Id @Column(name="MESSAGE_ID") 
-	@GeneratedValue(strategy=GenerationType.AUTO)
-	private Long _id;
-	@Basic @Column(name="TYPE")
+    @Id @Column(name="MESSAGE_ID")
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    private Long _id;
+    @Basic @Column(name="TYPE")
     private String _type;
-	@Lob @Column(name="DATA")
+    @Lob @Column(name="DATA")
     private String _data;
-	@Transient
+    @Lob @Column(name="HEADER")
+    private String _header;
+    @Transient
     private Element _element;
+    @Transient
+    private Element _headerElement;
 
-	public MessageDAOImpl() {
-		
-	}
-	public MessageDAOImpl(QName type, MessageExchangeDAOImpl me) {
-		_type = type.toString();
-	}
-	
-	public Element getData() {
-		if ( _element == null && _data != null && !"".equals(_data) ) {
-			try {
-				_element = DOMUtils.stringToDOM(_data);
-			} catch (Exception e) {
-				throw new RuntimeException(e);
-			}
-		}
-		
-		return _element;
-	}
-
-	public QName getType() {
-		return _type == null ? null : QName.valueOf(_type);
-	}
+    public MessageDAOImpl() {
 
-	public void setData(Element value) {
+    }
+    public MessageDAOImpl(QName type, MessageExchangeDAOImpl me) {
+        _type = type.toString();
+    }
+
+    public Element getData() {
+        if ( _element == null && _data != null && !"".equals(_data) ) {
+            try {
+                _element = DOMUtils.stringToDOM(_data);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        return _element;
+    }
+
+    public QName getType() {
+        return _type == null ? null : QName.valueOf(_type);
+    }
+
+    public void setData(Element value) {
         if (value == null) return;
         _data = DOMUtils.domToString(value);
-		_element = value;
-	}
+        _element = value;
+    }
+
+    public void setType(QName type) {
+        _type = type.toString();
+    }
+
+    public Element getHeader() {
+        if ( _headerElement == null && _header != null ) {
+            try {
+                _headerElement = DOMUtils.stringToDOM(_header);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+        return _headerElement;
+    }
 
-	public void setType(QName type) {
-		_type = type.toString();
-	}
+    public void setHeader(Element value) {
+        if (value == null) return;
+        _header = DOMUtils.domToString(value);
+        _headerElement = value;
+    }
 
 }

Modified: ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java
URL: http://svn.apache.org/viewvc/ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java (original)
+++ ode/trunk/dao-jpa/src/main/java/org/apache/ode/dao/jpa/MexProperty.java Mon May 19 15:55:12 2008
@@ -42,7 +42,7 @@
     private Long _id;
     @Basic @Column(name="PROP_KEY")
     private String propertyKey;
-    @Basic @Column(name="PROP_VALUE")
+    @Basic @Column(name="PROP_VALUE", length=2000)
     private String propertyValue;
     @ManyToOne(fetch= FetchType.LAZY,cascade={CascadeType.PERSIST})
     @Column(name="MEX_ID")

Modified: ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel
URL: http://svn.apache.org/viewvc/ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel (original)
+++ ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/HelloWorld2.bpel Mon May 19 15:55:12 2008
@@ -18,9 +18,9 @@
   ~ under the License.
   -->
 <process name="HelloWorld2"
-         targetNamespace="urn:/HelloWorld2.bpel"
+         targetNamespace="urn:/HeaderTest.bpel"
          xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
-         xmlns:tns="urn:/HelloWorld2.bpel"
+         xmlns:tns="urn:/HeaderTest.bpel"
          xmlns:hello="urn:/HelloWorld2.wsdl"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 

Modified: ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml
URL: http://svn.apache.org/viewvc/ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml (original)
+++ ode/trunk/distro/src/examples-jbi/HelloWorld2/HelloWorld2-process/deploy.xml Mon May 19 15:55:12 2008
@@ -17,7 +17,7 @@
   ~ under the License.
   -->
 <deploy xmlns="http://www.apache.org/ode/schemas/dd/2007/03"
-        xmlns:pns="urn:/HelloWorld2.bpel"
+        xmlns:pns="urn:/HeaderTest.bpel"
         xmlns:sns="urn:/HelloWorld2.wsdl" >
 
 

Modified: ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java
URL: http://svn.apache.org/viewvc/ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java (original)
+++ ode/trunk/il-common/src/main/java/org/apache/ode/il/config/OdeConfigProperties.java Mon May 19 15:55:12 2008
@@ -73,8 +73,6 @@
 
     public static final String PROP_WORKING_DIR = "working.dir";
 
-    public static final String PROP_REPLICATE_EMPTYNS = "message.replicate.emptyns";
-
     public static final String PROP_EVENT_LISTENERS = "event.listeners";
 
     public static final String PROP_MEX_INTERCEPTORS = "mex.interceptors";
@@ -229,10 +227,6 @@
         return getProperty(OdeConfigProperties.PROP_TX_FACTORY_CLASS, "org.apache.ode.il.EmbeddedGeronimoFactory");
     }
 
-    public boolean isReplicateEmptyNS() {
-        return Boolean.valueOf(getProperty(OdeConfigProperties.PROP_REPLICATE_EMPTYNS, "true"));
-    }
-
     public String getEventListeners() {
         return getProperty(PROP_EVENT_LISTENERS);
     }

Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java
URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java?rev=658020&r1=658019&r2=658020&view=diff
==============================================================================
--- ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java (original)
+++ ode/trunk/utils/src/main/java/org/apache/ode/utils/SerializableUtils.java Mon May 19 15:55:12 2008
@@ -81,14 +81,13 @@
     try {
       ObjectInputStream ois = new ObjectInputStream(binaryStream) {
 
-        protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+      protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
           String name = desc.getName();
           try {
               return Class.forName(name, false, cl);
           } catch (ClassNotFoundException ex) {
               return super.resolveClass(desc);
           }
-        }
       };
       return ois.readObject();
     }