You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2013/09/17 01:35:11 UTC
git commit: ODE-380: Message#setHeaderPart should overwrite any
previous value Thanks to William McCusker for the patch.
Updated Branches:
refs/heads/master ed5f024d4 -> d548cc041
ODE-380: Message#setHeaderPart should overwrite any previous value
Thanks to William McCusker for the patch.
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/d548cc04
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/d548cc04
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/d548cc04
Branch: refs/heads/master
Commit: d548cc041b76bc0b9b2da91842b2f8c9c52a5963
Parents: ed5f024
Author: Tammo van Lessen <tv...@gmail.com>
Authored: Tue Sep 17 00:17:15 2013 +0200
Committer: Tammo van Lessen <tv...@gmail.com>
Committed: Tue Sep 17 01:34:46 2013 +0200
----------------------------------------------------------------------
.../org/apache/ode/bpel/engine/MessageImpl.java | 33 +++++-
.../org/apache/ode/bpel/engine/MessageTest.java | 105 +++++++++++++++++++
2 files changed, 133 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/d548cc04/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
index 4cb9895..cbc9ebb 100644
--- a/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
+++ b/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/MessageImpl.java
@@ -77,8 +77,7 @@ public class MessageImpl implements Message {
header = doc.createElement("header");
doc.appendChild(header);
}
- Element part = header.getOwnerDocument().createElement(name);
- header.appendChild(part);
+ Element part = replaceHeader(name, header);
part.appendChild(header.getOwnerDocument().importNode(content, true));
_dao.setHeader(header);
}
@@ -90,11 +89,33 @@ public class MessageImpl implements Message {
header = doc.createElement("header");
doc.appendChild(header);
}
- Element part = header.getOwnerDocument().createElement(name);
- header.appendChild(part);
+ Element part = replaceHeader(name, header);
part.setTextContent(content);
_dao.setHeader(header);
}
+
+ /**
+ * Removes any existing header parts with the given name then adds a new
+ * header part with the new content
+ *
+ * @param name
+ * @param content
+ * @param header
+ */
+ private Element replaceHeader(String name, Element header) {
+ NodeList nodeList = header.getChildNodes();
+ // remove existing header part
+ for (int index = 0; index < nodeList.getLength(); index++) {
+ Node node = nodeList.item(index);
+ if (node.getNodeType() == Node.ELEMENT_NODE && name.equals(node.getNodeName())) {
+ header.removeChild(node);
+ }
+ }
+ // add header
+ Element part = header.getOwnerDocument().createElement(name);
+ header.appendChild(part);
+ return part;
+ }
public void setMessage(Element msg) {
_dao.setData(msg);
@@ -130,7 +151,9 @@ public class MessageImpl implements Message {
Element part = (Element) children.item(m);
Node node = DOMUtils.findChildByType(part, Node.ELEMENT_NODE);
if (node == null) node = DOMUtils.findChildByType(part, Node.TEXT_NODE);
- l.put(part.getLocalName(), node);
+ // Element created with DOM level 1 method createElement(string)
+ // so getLocalName will alway return null
+ l.put(part.getNodeName(), node);
}
}
return l;
http://git-wip-us.apache.org/repos/asf/ode/blob/d548cc04/bpel-runtime/src/test/java/org/apache/ode/bpel/engine/MessageTest.java
----------------------------------------------------------------------
diff --git a/bpel-runtime/src/test/java/org/apache/ode/bpel/engine/MessageTest.java b/bpel-runtime/src/test/java/org/apache/ode/bpel/engine/MessageTest.java
new file mode 100644
index 0000000..2ba53d0
--- /dev/null
+++ b/bpel-runtime/src/test/java/org/apache/ode/bpel/engine/MessageTest.java
@@ -0,0 +1,105 @@
+package org.apache.ode.bpel.engine;
+
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.dao.MessageDAO;
+import org.apache.ode.bpel.dao.MessageExchangeDAO;
+import org.apache.ode.utils.DOMUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import junit.framework.TestCase;
+/**
+ * Tests for org.apache.ode.bpel.iapi.MessageImpl
+ */
+public class MessageTest extends TestCase {
+ /**
+ * Test that setting a header replaces existing header of same name
+ */
+ public void testSetHeaderPart() {
+ String headerName = "h1";
+ MessageDAOMock mock = new MessageDAOMock();
+ MessageImpl message = new MessageImpl(mock);
+ message.setHeaderPart(headerName, "hello");
+
+ // overwrite existing header
+ String expected = "bye";
+ message.setHeaderPart(headerName, expected);
+ assertHasHeaders(message, mock, 1, headerName, expected);
+
+ // try setting element content
+ Document doc = DOMUtils.newDocument();
+ Element content = doc.createElement("content");
+ content.setTextContent(expected);
+ message.setHeaderPart(headerName, content);
+ assertHasHeaders(message, mock, 1, headerName, expected);
+
+ // check children not removed
+ content.setTextContent(expected);
+ message.setHeaderPart("content", "testing");
+ assertHasHeaders(message, mock, 2, headerName, expected);
+ Element el = message.getHeaderPart(headerName);
+ assertTrue("Missing header content",el.getElementsByTagName("content").getLength() == 1);
+
+ // add new header
+ String newHeader = "h2";
+ String newExpected = "why";
+ message.setHeaderPart(newHeader, newExpected);
+ assertHasHeaders(message, mock, 3, newHeader, newExpected);
+ }
+
+ private static void assertHasHeaders(MessageImpl message, MessageDAOMock mock, int size, String name, String expected) {
+ Map<String, Node> headers = message.getHeaderParts();
+ assertTrue("Expected: "+size+" headers but found: "+headers.size(),headers.size() == size);
+ assertEquals("Expected header content: "+expected+" but found: "+headers.get(name).getTextContent(),headers.get(name).getTextContent(), expected);
+ // check underlying document to be sure
+ Element el = mock.getHeader();
+ NodeList list = el.getElementsByTagName(name);
+ assertTrue("There should only be 1 element in headers for name: "+name, list.getLength() == 1);
+ }
+
+ /**
+ * Mock MessageDAO to test simple Message operations
+ */
+ private class MessageDAOMock implements MessageDAO {
+ Document _doc = null;
+ Element _header = null;
+
+ public MessageDAOMock() {
+ _doc = DOMUtils.newDocument();
+ _header = _doc.createElement("header");
+ }
+
+ public Element getData() {
+ return null;
+ }
+
+ public Element getHeader() {
+ return _header;
+ }
+
+ public MessageExchangeDAO getMessageExchange() {
+ return null;
+ }
+
+ public QName getType() {
+ return null;
+ }
+
+ public void setData(Element value) {
+
+ }
+
+ public void setHeader(Element value) {
+ _header = value;
+ }
+
+ public void setType(QName type) {
+
+ }
+ }
+}