Hi Can you explain why you did this code change? It seems wrong to me to change the code to force using a byte[] where the existing code works fine, and is optimized for streams. And don't load the data into a 2nd byte[] which mean 2x the memory comsumption.
Also the option useSharedSchema=false is intended for a workaround in an old JDK6 bug. So ideally the option should not be used etc. On Thu, Jun 20, 2013 at 10:13 PM, <cmuel...@apache.org> wrote: > 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"); > } > }; > } > -- Claus Ibsen ----------------- www.camelone.org: The open source integration conference. Red Hat, Inc. FuseSource is now part of Red Hat Email: cib...@redhat.com Web: http://fusesource.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen