Commit in servicemix/base/src/main/java/org/servicemix/components/validation on MAIN
ValidateComponent.java+17-51.4 -> 1.5
Fix SM-47 : ValidateComponent tries to validate a StreamSource - which is not allowed

servicemix/base/src/main/java/org/servicemix/components/validation
ValidateComponent.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- ValidateComponent.java	30 Aug 2005 11:29:52 -0000	1.4
+++ ValidateComponent.java	10 Oct 2005 09:23:33 -0000	1.5
@@ -18,9 +18,8 @@
 package org.servicemix.components.validation;
 
 import org.servicemix.components.util.TransformComponentSupport;
-import org.servicemix.components.util.MessageTransformer;
-import org.servicemix.components.util.CopyTransformer;
 import org.servicemix.jbi.FaultException;
+import org.servicemix.jbi.jaxp.SourceTransformer;
 import org.springframework.core.io.Resource;
 import org.xml.sax.SAXException;
 
@@ -29,7 +28,9 @@
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.MessagingException;
 import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Source;
+import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamSource;
@@ -43,7 +44,7 @@
  * and returning a fault if the document does not conform to the schema
  * otherwise the message is passed on its way.
  *
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
  */
 public class ValidateComponent extends TransformComponentSupport {
     private Schema schema;
@@ -114,7 +115,12 @@
         validator.setErrorHandler(errorHandler);
         DOMResult result = new DOMResult();
         try {
-            validator.validate(in.getContent(), result);
+        	// Only DOMSource and SAXSource are allowed for validating
+        	// See http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/Validator.html#validate(javax.xml.transform.Source,%20javax.xml.transform.Result)
+        	// As we expect a DOMResult as output, we must ensure that the input is a 
+        	// DOMSource
+        	Source src = "" SourceTransformer().toDOMSource(in.getContent());
+            validator.validate(src, result);
             if (errorHandler.hasErrors()) {
                 Fault fault = exchange.createFault();
                 fault.setProperty("org.servicemix.schema", schema);
@@ -131,6 +137,12 @@
         }
         catch (IOException e) {
             throw new MessagingException(e);
-        }
+        } 
+        catch (ParserConfigurationException e) {
+            throw new MessagingException(e);
+		} 
+        catch (TransformerException e) {
+            throw new MessagingException(e);
+		}
     }
 }
CVSspam 0.2.8



Reply via email to