Author: davsclaus
Date: Fri Aug 13 13:35:50 2010
New Revision: 985192

URL: http://svn.apache.org/viewvc?rev=985192&view=rev
Log:
CAMEL-3053: validate component now throws validation exception for non well 
formed XML. Thanks to Edward Dale for patch.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidatingProcessorTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java?rev=985192&r1=985191&r2=985192&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
 Fri Aug 13 13:35:50 2010
@@ -19,6 +19,7 @@ package org.apache.camel.processor.valid
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.util.Collections;
 
 import javax.xml.XMLConstants;
 import javax.xml.transform.Result;
@@ -32,6 +33,7 @@ import javax.xml.validation.SchemaFactor
 import javax.xml.validation.Validator;
 
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -82,7 +84,15 @@ public class ValidatingProcessor impleme
         ValidatorErrorHandler handler = errorHandler.getClass().newInstance();
         validator.setErrorHandler(handler);
 
-        validator.validate(source, result);
+        try {
+            validator.validate(source, result);
+        } catch (SAXParseException e) {
+            // can be thrown for non well formed XML
+            throw new SchemaValidationException(exchange, schema, 
+                                                Collections.singletonList(e), 
+                                                
Collections.<SAXParseException>emptyList(), 
+                                                
Collections.<SAXParseException>emptyList());
+        }
 
         handler.handleErrors(exchange, schema, result);
     }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidatingProcessorTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidatingProcessorTest.java?rev=985192&r1=985191&r2=985192&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidatingProcessorTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/ValidatingProcessorTest.java
 Fri Aug 13 13:35:50 2010
@@ -93,6 +93,26 @@ public class ValidatingProcessorTest ext
         assertMockEndpointsSatisfied();
     }
 
+    public void testNonWellFormedXml() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:invalid");
+        mock.expectedMessageCount(1);
+
+        String xml = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"
+            + "user xmlns=\"http://foo.com/bar\";>"
+            + "  <id>1</id>"
+            + "  <username>davsclaus</username>";
+
+        try {
+            template.sendBody("direct:start", xml);
+            fail("Should have thrown a RuntimeCamelException");
+        } catch (RuntimeCamelException e) {
+            assertTrue(e.getCause() instanceof SchemaValidationException);
+            // expected
+        }
+
+        assertMockEndpointsSatisfied();
+    }
+
     public void testNoXMLBody() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:invalid");
         mock.expectedMessageCount(1);
@@ -137,4 +157,4 @@ public class ValidatingProcessorTest ext
             }
         };
     }
-}
\ No newline at end of file
+}


Reply via email to