You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mi...@apache.org on 2008/07/08 23:53:17 UTC

svn commit: r674984 - in /ode/trunk: axis2/src/main/java/org/apache/ode/axis2/soapbinding/ axis2/src/test/java/org/apache/ode/axis2/httpbinding/ bpel-api/src/main/java/org/apache/ode/bpel/iapi/ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/ bpe...

Author: midon
Date: Tue Jul  8 14:53:17 2008
New Revision: 674984

URL: http://svn.apache.org/viewvc?rev=674984&view=rev
Log:
SOAP headers must be elements, but HTTP headers could be Text nodes: make header parts node friendly.

Modified:
    ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java
    ode/trunk/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpMethodConverterTest.java
    ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Message.java
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
    ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/runtime/ASSIGN.java
    ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
    ode/trunk/utils/src/main/java/org/apache/ode/utils/wsdl/Messages.java

Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java?rev=674984&r1=674983&r2=674984&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/soapbinding/SoapMessageConverter.java Tue Jul  8 14:53:17 2008
@@ -67,6 +67,7 @@
 import org.apache.ode.utils.wsdl.WsdlUtils;
 import org.apache.ode.utils.stl.CollectionsX;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 /**
  * SOAP/ODE Message converter. Uses WSDL binding information to convert the protocol-neutral ODE representation into a SOAP
@@ -196,19 +197,23 @@
         }
     }
 
-    public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, Map<String,Element> headers) throws AxisFault {
+    public void createSoapHeaders(SOAPEnvelope soapEnv, List<SOAPHeader> headerDefs, Message msgdef, Map<String,Node> 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));
+        for (Node headerNode : headers.values())
+            if (headerNode.getNodeType() == Node.ELEMENT_NODE) {
+                if (soaphdr.getFirstChildWithName(new QName(headerNode.getNamespaceURI(), headerNode.getLocalName())) == null)
+                    soaphdr.addChild(OMUtils.toOM((Element) headerNode, _soapFactory));
+            } else {
+                throw new OdeFault(__msgs.msgSoapHeaderMustBeAnElement(headerNode));
+            }
     }
 
     @SuppressWarnings("unchecked")
-    private void handleSoapHeaderDef(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Map<String,Element> headers) throws AxisFault {
+    private void handleSoapHeaderDef(SOAPEnvelope soapEnv, SOAPHeader headerdef, Message msgdef, Map<String, Node> headers) throws AxisFault {
         boolean payloadMessageHeader = headerdef.getMessage() == null || headerdef.getMessage().equals(msgdef.getQName());
 
         if (headerdef.getPart() == null) return;
@@ -217,9 +222,13 @@
             throw new OdeFault(__msgs.msgSoapHeaderReferencesUnkownPart(headerdef.getPart()));
 
         Element srcPartEl = null;
-        if (headers.size() > 0)
-            if (payloadMessageHeader)
-                srcPartEl = headers.get(headerdef.getPart());
+        if (headers.size() > 0 && payloadMessageHeader){
+            try {
+                srcPartEl = (Element) headers.get(headerdef.getPart());
+            } catch (ClassCastException e) {
+                throw new OdeFault(__msgs.msgSoapHeaderMustBeAnElement(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.

Modified: ode/trunk/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpMethodConverterTest.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpMethodConverterTest.java?rev=674984&r1=674983&r2=674984&view=diff
==============================================================================
--- ode/trunk/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpMethodConverterTest.java (original)
+++ ode/trunk/axis2/src/test/java/org/apache/ode/axis2/httpbinding/HttpMethodConverterTest.java Tue Jul  8 14:53:17 2008
@@ -204,7 +204,7 @@
             return null;
         }
 
-        public Map<String, Element> getHeaderParts() {
+        public Map<String, Node> getHeaderParts() {
             return null;
         }
 

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=674984&r1=674983&r2=674984&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 Tue Jul  8 14:53:17 2008
@@ -24,6 +24,7 @@
 import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 
 /**
@@ -79,7 +80,7 @@
      * Gets all header parts in the message.
      * @return
      */
-    Map<String, Element> getHeaderParts();
+    Map<String, Node> getHeaderParts();
 
     /**
      * Set the message as an element. The name of the element is irrelevant,

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=674984&r1=674983&r2=674984&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 Tue Jul  8 14:53:17 2008
@@ -119,15 +119,17 @@
         return parts;
     }
 
-    public Map<String, Element> getHeaderParts() {
-        HashMap<String,Element> l = new HashMap<String,Element>();
-        Element header =  getHeader();
+    public Map<String, Node> getHeaderParts() {
+        HashMap<String, Node> l = new HashMap<String, Node>();
+        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));
+                    Node node = DOMUtils.findChildByType(part, Node.ELEMENT_NODE);
+                    if (node == null) node = DOMUtils.findChildByType(part, Node.TEXT_NODE);
+                    l.put(part.getLocalName(), node);
                 }
         }
         return l;

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=674984&r1=674983&r2=674984&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 Tue Jul  8 14:53:17 2008
@@ -403,7 +403,7 @@
                 }
 
                 if (headerAssign && lvaluePtr.getParentNode().getNodeName().equals("message")) {
-                    lvalue = copyInto((Element)lvalue, (Element) lvaluePtr, (Element) rvalue);
+                    lvalue = copyInto((Element)lvalue, (Element) lvaluePtr, rvalue);
                 } else if (rvalue.getNodeType() == Node.ELEMENT_NODE && lvaluePtr.getNodeType() == Node.ELEMENT_NODE) {
                     lvalue = replaceElement((Element)lvalue, (Element) lvaluePtr, (Element) rvalue,
                             ocopy.keepSrcElementName);
@@ -469,7 +469,7 @@
         return (lval == ptr) ? replacement :  lval;
     }
 
-    private Element copyInto(Element lval, Element ptr, Element src) {
+    private Element copyInto(Element lval, Element ptr, Node src) {
         ptr.appendChild(ptr.getOwnerDocument().importNode(src, true));
         return lval;
     }

Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java
URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java?rev=674984&r1=674983&r2=674984&view=diff
==============================================================================
--- ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java (original)
+++ ode/trunk/utils/src/main/java/org/apache/ode/utils/DOMUtils.java Tue Jul  8 14:53:17 2008
@@ -208,13 +208,7 @@
      * @return the first child element.
      */
     public static Element getFirstChildElement(Element elem) {
-        if (elem == null)
-            throw new NullPointerException("elem parameter must not be null!");
-
-        for (Node n = elem.getFirstChild(); n != null; n = n.getNextSibling()) {
-            if (n.getNodeType() == Node.ELEMENT_NODE) { return (Element) n; }
-        }
-        return null;
+        return (Element) findChildByType(elem, Node.ELEMENT_NODE);
     }
 
     /**
@@ -772,6 +766,19 @@
         return null;
     }
 
+
+    public static Node findChildByType(Element elem, int type) {
+        if (elem == null)
+            throw new NullPointerException("elem parameter must not be null!");
+
+        for (Node n = elem.getFirstChild(); n != null; n = n.getNextSibling()) {
+            if (n.getNodeType() == type) {
+                return n;
+            }
+        }
+        return null;
+    }
+
     public static String getTextContent(Node node) {
         for (int m = 0; m < node.getChildNodes().getLength(); m++) {
             Node child = node.getChildNodes().item(m);

Modified: ode/trunk/utils/src/main/java/org/apache/ode/utils/wsdl/Messages.java
URL: http://svn.apache.org/viewvc/ode/trunk/utils/src/main/java/org/apache/ode/utils/wsdl/Messages.java?rev=674984&r1=674983&r2=674984&view=diff
==============================================================================
--- ode/trunk/utils/src/main/java/org/apache/ode/utils/wsdl/Messages.java (original)
+++ ode/trunk/utils/src/main/java/org/apache/ode/utils/wsdl/Messages.java Tue Jul  8 14:53:17 2008
@@ -19,6 +19,7 @@
 package org.apache.ode.utils.wsdl;
 
 import org.apache.ode.utils.msg.MessageBundle;
+import org.w3c.dom.Node;
 
 import javax.xml.namespace.QName;
 import java.util.Collection;
@@ -107,6 +108,11 @@
         return new IllegalArgumentException(s);
     }
 
+    public Throwable msgSoapHeaderMustBeAnElement(Node headerNode) {
+        String s = format("SOAP header must be an element: {0}.", headerNode);
+        return new IllegalArgumentException(s);
+    }
+
     public Throwable msgSoapHeaderMissingRequiredElement(QName elementType) {
         String s = format("SOAP header missing required element: {0}.", elementType);
         return new IllegalArgumentException(s);