[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