[savara-commits] savara SVN: r253 - in trunk/validators/jbossesb/src: main/java/org/jboss/savara/validator/jbossesb and 7 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sun Jun 6 17:14:02 EDT 2010


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



More information about the savara-commits mailing list