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