Updated Branches:
  refs/heads/master a52864dfc -> c5d5d6124

CAMEL-6317: Camel-validator not able to resolve schema when using 
useSharedSchema=false
Thanks David J. M. Karlsen for reporting it


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a2593990
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a2593990
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a2593990

Branch: refs/heads/master
Commit: a2593990d45ae9acac14778701cc8e0cce24f6f4
Parents: b21239f
Author: cmueller <cmuel...@apache.org>
Authored: Thu Jun 20 22:07:31 2013 +0200
Committer: cmueller <cmuel...@apache.org>
Committed: Thu Jun 20 22:08:01 2013 +0200

----------------------------------------------------------------------
 .../component/validator/ValidatorComponent.java | 19 +++++++++++--------
 .../validation/ValidatingProcessor.java         | 20 +++++++++++++++++++-
 .../component/validator/ValidatorRouteTest.java | 15 ++++++++++++---
 3 files changed, 42 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a2593990/camel-core/src/main/java/org/apache/camel/component/validator/ValidatorComponent.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/component/validator/ValidatorComponent.java
 
b/camel-core/src/main/java/org/apache/camel/component/validator/ValidatorComponent.java
index 58de3e7..f69a5b9 100644
--- 
a/camel-core/src/main/java/org/apache/camel/component/validator/ValidatorComponent.java
+++ 
b/camel-core/src/main/java/org/apache/camel/component/validator/ValidatorComponent.java
@@ -19,11 +19,8 @@ package org.apache.camel.component.validator;
 import java.io.InputStream;
 import java.util.Map;
 
-import javax.xml.transform.stream.StreamSource;
-
-import org.w3c.dom.ls.LSResourceResolver;
-
 import org.apache.camel.Endpoint;
+import org.apache.camel.converter.IOConverter;
 import org.apache.camel.impl.DefaultComponent;
 import org.apache.camel.impl.ProcessorEndpoint;
 import org.apache.camel.processor.validation.ValidatingProcessor;
@@ -31,6 +28,7 @@ import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ResourceHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.w3c.dom.ls.LSResourceResolver;
 
 /**
  * The <a href="http://camel.apache.org/validation.html";>Validator 
Component</a>
@@ -43,18 +41,23 @@ public class ValidatorComponent extends DefaultComponent {
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         final String resourceUri = remaining;
         InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(getCamelContext().getClassResolver(),
 resourceUri);
-        StreamSource source = new StreamSource(is);
+        byte[] bytes = null;
+        try {
+            bytes = IOConverter.toBytes(is);
+        } finally {
+            // and make sure to close the input stream after the schema has 
been loaded
+            IOHelper.close(is);
+        }
 
         ValidatingProcessor validator = new ValidatingProcessor();
-        validator.setSchemaSource(source);
+        validator.setSchemaAsByteArray(bytes);
+        //validator.setSchemaSource(source);
         LOG.debug("{} using schema resource: {}", this, resourceUri);
         configureValidator(validator, uri, remaining, parameters);
 
         // force loading of schema at create time otherwise concurrent
         // processing could cause thread safe issues for the 
javax.xml.validation.SchemaFactory
         validator.loadSchema();
-        // and make sure to close the input stream after the schema has been 
loaded
-        IOHelper.close(is);
 
         return new ProcessorEndpoint(uri, this, validator);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/a2593990/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
 
b/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
index f2922bc..bd9f783 100644
--- 
a/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
+++ 
b/camel-core/src/main/java/org/apache/camel/processor/validation/ValidatingProcessor.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.processor.validation;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -68,6 +69,7 @@ public class ValidatingProcessor implements AsyncProcessor {
     private SchemaFactory schemaFactory;
     private URL schemaUrl;
     private File schemaFile;
+    private byte[] schemaAsByteArray;
     private ValidatorErrorHandler errorHandler = new 
DefaultValidationErrorHandler();
     private boolean useDom;
     private boolean useSharedSchema = true;
@@ -235,6 +237,14 @@ public class ValidatingProcessor implements AsyncProcessor 
{
         this.schemaFile = schemaFile;
     }
 
+    public byte[] getSchemaAsByteArray() {
+        return schemaAsByteArray;
+    }
+
+    public void setSchemaAsByteArray(byte[] schemaAsByteArray) {
+        this.schemaAsByteArray = schemaAsByteArray;
+    }
+
     public SchemaFactory getSchemaFactory() {
         if (schemaFactory == null) {
             schemaFactory = createSchemaFactory();
@@ -331,11 +341,19 @@ public class ValidatingProcessor implements 
AsyncProcessor {
         if (url != null) {
             return factory.newSchema(url);
         }
+
         File file = getSchemaFile();
         if (file != null) {
             return factory.newSchema(file);
         }
-        return factory.newSchema(getSchemaSource());
+
+        byte[] bytes = getSchemaAsByteArray();
+        if (bytes != null) {
+            return factory.newSchema(new StreamSource(new 
ByteArrayInputStream(schemaAsByteArray)));
+        }
+
+        Source source = getSchemaSource();
+        return factory.newSchema(source);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/a2593990/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorRouteTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorRouteTest.java
 
b/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorRouteTest.java
index c3d1880..036704f 100644
--- 
a/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorRouteTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/component/validator/ValidatorRouteTest.java
@@ -24,9 +24,6 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.processor.validation.NoXmlHeaderValidationException;
 
-/**
- *
- */
 public class ValidatorRouteTest extends ContextTestSupport {
 
     protected MockEndpoint validEndpoint;
@@ -125,6 +122,14 @@ public class ValidatorRouteTest extends ContextTestSupport 
{
         MockEndpoint.assertIsSatisfied(validEndpoint, invalidEndpoint, 
finallyEndpoint);
     }
 
+    public void testUseNotASharedSchema() throws Exception {
+        validEndpoint.expectedMessageCount(1);
+
+        template.sendBody("direct:useNotASharedSchema", "<mail 
xmlns='http://foo.com/bar'><subject>Hey</subject><body>Hello 
world!</body></mail>");
+
+        MockEndpoint.assertIsSatisfied(validEndpoint, invalidEndpoint, 
finallyEndpoint);
+    }
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
@@ -166,6 +171,10 @@ public class ValidatorRouteTest extends ContextTestSupport 
{
                 from("direct:startNullHeaderNoFail")
                         
.to("validator:org/apache/camel/component/validator/schema.xsd?headerName=headerToValidate&failOnNullHeader=false")
                         .to("mock:valid");
+
+                from("direct:useNotASharedSchema")
+                    
.to("validator:org/apache/camel/component/validator/schema.xsd?useSharedSchema=false")
+                    .to("mock:valid");
             }
         };
     }

Reply via email to