Author: objectiser
Date: 2010-06-06 17:14:01 -0400 (Sun, 06 Jun 2010)
New Revision: 253
Added:
trunk/validators/jbossesb/src/test/
trunk/validators/jbossesb/src/test/java/
trunk/validators/jbossesb/src/test/java/org/
trunk/validators/jbossesb/src/test/java/org/jboss/
trunk/validators/jbossesb/src/test/java/org/jboss/savara/
trunk/validators/jbossesb/src/test/java/org/jboss/savara/validator/
trunk/validators/jbossesb/src/test/java/org/jboss/savara/validator/jbossesb/
trunk/validators/jbossesb/src/test/java/org/jboss/savara/validator/jbossesb/ESBUtilTest.java
trunk/validators/jbossesb/src/test/resources/
Modified:
trunk/validators/jbossesb/src/main/java/org/jboss/savara/validator/jbossesb/ESBUtil.java
Log:
SAVARA-67 - added support for extracting the body of a message from a SOAP envelope.
Modified:
trunk/validators/jbossesb/src/main/java/org/jboss/savara/validator/jbossesb/ESBUtil.java
===================================================================
---
trunk/validators/jbossesb/src/main/java/org/jboss/savara/validator/jbossesb/ESBUtil.java 2010-06-06
20:10:19 UTC (rev 252)
+++
trunk/validators/jbossesb/src/main/java/org/jboss/savara/validator/jbossesb/ESBUtil.java 2010-06-06
21:14:01 UTC (rev 253)
@@ -18,6 +18,9 @@
package org.jboss.savara.validator.jbossesb;
import org.apache.log4j.Logger;
+import org.pi4soa.common.util.NamesUtil;
+import org.pi4soa.common.xml.NameSpaceUtil;
+import org.pi4soa.common.xml.XMLUtils;
/**
* This class provides utility functions for processing
@@ -75,8 +78,56 @@
ret = new String((byte[])ret);
}
+ ret = getBody(ret);
+
return(ret);
}
+ public static java.io.Serializable getBody(java.io.Serializable value) {
+ java.io.Serializable ret=null;
+
+ if (value instanceof org.w3c.dom.Element &&
+ ((org.w3c.dom.Element)value).getLocalName().equals("Envelope") &&
+ ((org.w3c.dom.Element)value).getNamespaceURI().equals(
+ "http://www.w3.org/2001/12/soap-envelope")) {
+
+ org.w3c.dom.NodeList bodylist=((org.w3c.dom.Element)value).
+
getElementsByTagNameNS("http://www.w3.org/2001/12/soap-envelope",
"Body");
+
+ for (int i=0; ret == null && i < bodylist.getLength(); i++) {
+ if (bodylist.item(i) instanceof org.w3c.dom.Element &&
+ bodylist.item(i).getLocalName().equals("Body")) {
+ org.w3c.dom.NodeList
children=((org.w3c.dom.Element)bodylist.item(i)).getChildNodes();
+
+ for (int j=0; ret == null && j < children.getLength(); j++) {
+ if (children.item(j) instanceof org.w3c.dom.Element) {
+ ret = (java.io.Serializable)children.item(j);
+ }
+ }
+ }
+ }
+ } else if (value instanceof String) {
+
+ try {
+ org.w3c.dom.Node node=XMLUtils.getNode((String)value);
+
+ ret = getBody((java.io.Serializable)node);
+
+ // Convert to string
+ if (ret instanceof org.w3c.dom.Node) {
+ ret = XMLUtils.getText((org.w3c.dom.Node)ret);
+ }
+
+ } catch(Exception e) {
+ logger.warn("Failed to obtain message body from value: "+value);
+ }
+
+ } else {
+ ret = value;
+ }
+
+ return(ret);
+ }
+
private static Logger logger = Logger.getLogger(ESBUtil.class);
}
Added:
trunk/validators/jbossesb/src/test/java/org/jboss/savara/validator/jbossesb/ESBUtilTest.java
===================================================================
---
trunk/validators/jbossesb/src/test/java/org/jboss/savara/validator/jbossesb/ESBUtilTest.java
(rev 0)
+++
trunk/validators/jbossesb/src/test/java/org/jboss/savara/validator/jbossesb/ESBUtilTest.java 2010-06-06
21:14:01 UTC (rev 253)
@@ -0,0 +1,76 @@
+package org.jboss.savara.validator.jbossesb;
+
+import static org.junit.Assert.*;
+
+import org.pi4soa.common.xml.XMLUtils;
+
+public class ESBUtilTest {
+
+ @org.junit.Test
+ public void testGetBodyText() {
+
+ String mesg="<soap:Envelope
xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" >"+
+ "<soap:Header>"+
+ "<m:Trans
xmlns:m=\"http://www.w3schools.com/transaction/\"
"+
+ "soap:mustUnderstand=\"1\">234</m:Trans>"+
+ "</soap:Header>"+
+ "<soap:Body>"+
+ "<m:GetPrice
xmlns:m=\"http://www.w3schools.com/prices\">"+
+ "<m:Item>Apples</m:Item>"+
+ "</m:GetPrice>"+
+ "</soap:Body>"+
+ "</soap:Envelope>";
+
+ String expected="<m:GetPrice
xmlns:m=\"http://www.w3schools.com/prices\">"+
+ "<m:Item>Apples</m:Item>"+
+ "</m:GetPrice>";
+
+ java.io.Serializable result=ESBUtil.getBody(mesg);
+
+ if ((result instanceof String) == false) {
+ fail("Result should be a string");
+ }
+
+ if (result.equals(expected) == false) {
+ fail("Failed to match body");
+ }
+ }
+
+ @org.junit.Test
+ public void testGetBodyXML() {
+
+ String mesg="<soap:Envelope
xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" >"+
+ "<soap:Header>"+
+ "<m:Trans
xmlns:m=\"http://www.w3schools.com/transaction/\"
"+
+ "soap:mustUnderstand=\"1\">234</m:Trans>"+
+ "</soap:Header>"+
+ "<soap:Body>"+
+ "<m:GetPrice
xmlns:m=\"http://www.w3schools.com/prices\">"+
+ "<m:Item>Apples</m:Item>"+
+ "</m:GetPrice>"+
+ "</soap:Body>"+
+ "</soap:Envelope>";
+
+ try {
+ org.w3c.dom.Node mesgxml=XMLUtils.getNode(mesg);
+
+ String expected="<m:GetPrice
xmlns:m=\"http://www.w3schools.com/prices\">"+
+ "<m:Item>Apples</m:Item>"+
+ "</m:GetPrice>";
+
+ java.io.Serializable result=ESBUtil.getBody((java.io.Serializable)mesgxml);
+
+ if ((result instanceof org.w3c.dom.Node) == false) {
+ fail("Result should be a DOM Node");
+ }
+
+ String resulttext=XMLUtils.getText((org.w3c.dom.Node)result);
+
+ if (resulttext.equals(expected) == false) {
+ fail("Failed to match body");
+ }
+ } catch(Exception e) {
+ fail("Failed to get body from XML: "+e);
+ }
+ }
+}