[jboss-svn-commits] JBL Code SVN: r29867 - in labs/jbossesb/trunk/product/rosetta: tests/src/org/jboss/soa/esb/actions/validation and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 29 10:01:33 EDT 2009


Author: tfennelly
Date: 2009-10-29 10:01:33 -0400 (Thu, 29 Oct 2009)
New Revision: 29867

Added:
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/validation/JBESB_2916_UnitTest.java
Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/validation/ValidationException.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2916
Schema Validation - Non-conforming messages are not properly handled

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/validation/ValidationException.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/validation/ValidationException.java	2009-10-29 13:52:44 UTC (rev 29866)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/actions/validation/ValidationException.java	2009-10-29 14:01:33 UTC (rev 29867)
@@ -1,9 +1,17 @@
 package org.jboss.soa.esb.actions.validation;
 
 import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.stream.StreamResult;
 
 import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.dom.YADOMUtil;
+import org.jboss.soa.esb.ConfigurationException;
+import org.w3c.dom.Node;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
 
+import java.io.*;
+
 /**
  * Validation exception extends ActionProcessingExcption and
  * adds a constructor that takes a {@link DOMResult}.
@@ -13,19 +21,46 @@
 public class ValidationException extends ActionProcessingException
 {
     private static final long serialVersionUID = 1L;
+    private int resultType;
+    private String domString;
 
-    private DOMResult domResult;
-
     public ValidationException(final String message, final Throwable cause, final DOMResult domResult)
     {
         super(message, cause);
-        this.domResult = domResult;
+
+        // Need to serilaize the DOM to make it Serializable...
+        if(domResult != null) {
+            Node node = domResult.getNode();
+            StringWriter writer = new StringWriter();
+
+            try {
+                YADOMUtil.serialize(node, new StreamResult(writer));
+                this.domString = writer.toString();
+            } catch (ConfigurationException e) {
+                throw new RuntimeException("Unexpected error.  Unable to serialize DOM.", e);
+            }
+            resultType = node.getNodeType();
+        }
     }
 
     public DOMResult getDomResult()
     {
-        return domResult;
+        if(domString != null) {
+            DOMResult domResult = new DOMResult();
+            try {
+                Document domDoc = YADOMUtil.parse(domString);
+
+                if(resultType == Node.DOCUMENT_NODE) {
+                    domResult.setNode(domDoc);
+                } else {
+                    domResult.setNode(domDoc.getDocumentElement());
+                }
+            } catch (Exception e) {
+                throw new RuntimeException("Unexpected error.  Unable to serialize DOM.", e);
+            }
+            return domResult;
+        } else {
+            return null;
+        }
     }
-
-
 }

Added: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/validation/JBESB_2916_UnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/validation/JBESB_2916_UnitTest.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/actions/validation/JBESB_2916_UnitTest.java	2009-10-29 14:01:33 UTC (rev 29867)
@@ -0,0 +1,113 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.actions.validation;
+
+import junit.framework.TestCase;
+import org.jboss.soa.esb.testutils.AbstractTestRunner;
+import org.jboss.soa.esb.client.ServiceInvoker;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.actions.ResponseAction;
+import org.jboss.soa.esb.couriers.FaultMessageException;
+import org.jboss.soa.esb.util.FileUtil;
+import org.jboss.internal.soa.esb.util.StreamUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.dom.DOMResult;
+import java.io.*;
+
+/**
+ * https://jira.jboss.org/jira/browse/JBESB-2916
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class JBESB_2916_UnitTest extends TestCase {
+
+    public void test_serializeValidationException_ElementResult() throws ParserConfigurationException, IOException, ClassNotFoundException {
+        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+        DOMResult domInResult = new DOMResult(doc.createElement("xxxElement"));
+        Exception cause = new Exception("an exception");
+        ValidationException exception = new ValidationException("ValidationException", cause, domInResult);
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(bos);
+
+        try {
+            oos.writeObject(exception);
+        } finally {
+            oos.close();
+        }
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+        ObjectInputStream ois = new ObjectInputStream(bis);
+
+        ValidationException exceptionOut;
+        try {
+            exceptionOut = (ValidationException) ois.readObject();
+        } finally {
+            ois.close();
+        }
+
+        DOMResult domOutResult = exceptionOut.getDomResult();
+
+        assertTrue(domInResult != domOutResult);
+        assertTrue(domInResult.getNode() != domOutResult.getNode());
+        assertTrue(domInResult.getNode() instanceof Element);
+        assertEquals("xxxElement", domOutResult.getNode().getNodeName());
+    }
+
+    public void test_serializeValidationException_DocumentResult() throws ParserConfigurationException, IOException, ClassNotFoundException {
+        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+        DOMResult domInResult = new DOMResult(doc);
+
+        doc.appendChild(doc.createElement("xxxElement"));
+
+        Exception cause = new Exception("an exception");
+        ValidationException exception = new ValidationException("ValidationException", cause, domInResult);
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(bos);
+
+        try {
+            oos.writeObject(exception);
+        } finally {
+            oos.close();
+        }
+
+        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+        ObjectInputStream ois = new ObjectInputStream(bis);
+
+        ValidationException exceptionOut;
+        try {
+            exceptionOut = (ValidationException) ois.readObject();
+        } finally {
+            ois.close();
+        }
+
+        DOMResult domOutResult = exceptionOut.getDomResult();
+
+        assertTrue(domInResult != domOutResult);
+        assertTrue(domInResult.getNode() != domOutResult.getNode());
+        assertTrue(domInResult.getNode() instanceof Document);
+        assertEquals("xxxElement", ((Document)domOutResult.getNode()).getDocumentElement().getNodeName());
+    }
+}



More information about the jboss-svn-commits mailing list