You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/06/05 08:17:30 UTC
[1/4] camel git commit: Handling resources loading in OSGI environment
Repository: camel
Updated Branches:
refs/heads/camel-2.15.x 88e6aac8a -> bab41b7bf
refs/heads/master 1486d2827 -> 88e99af67
Handling resources loading in OSGI environment
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/491288ec
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/491288ec
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/491288ec
Branch: refs/heads/master
Commit: 491288ec161cc455490c7aec23805809d2cab0f8
Parents: 1486d28
Author: Ayache Khettar <ay...@zotix-consulting.co.uk>
Authored: Tue Jun 2 09:18:07 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jun 5 08:16:57 2015 +0200
----------------------------------------------------------------------
.../schematron/SchematronEndpoint.java | 37 ++++++++++++++++----
.../schematron/constant/Constants.java | 3 ++
.../processor/ClassPathURIResolver.java | 4 ++-
.../schematron/processor/TemplatesFactory.java | 27 ++++----------
.../schematron/SchematronProducerTest.java | 18 ++++++----
.../processor/SchematronProcessorTest.java | 10 ++++--
.../processor/TemplatesFactoryTest.java | 10 +++---
7 files changed, 67 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
index 3c5a7ae..e58b8d6 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
@@ -19,11 +19,14 @@ package org.apache.camel.component.schematron;
import java.io.File;
import java.io.InputStream;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
+import org.apache.camel.component.schematron.constant.Constants;
import org.apache.camel.component.schematron.exception.SchematronConfigException;
+import org.apache.camel.component.schematron.processor.ClassPathURIResolver;
import org.apache.camel.component.schematron.processor.TemplatesFactory;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.spi.Metadata;
@@ -34,6 +37,9 @@ import org.apache.camel.util.ResourceHelper;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.camel.component.schematron.constant.Constants.LINE_NUMBERING;
+import static org.apache.camel.component.schematron.constant.Constants.SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
+
/**
* Schematron Endpoint.
@@ -41,7 +47,9 @@ import org.slf4j.LoggerFactory;
@UriEndpoint(scheme = "schematron", title = "Schematron", syntax = "schematron:path", producerOnly = true, label = "validation")
public class SchematronEndpoint extends DefaultEndpoint {
- private Logger logger = LoggerFactory.getLogger(SchematronEndpoint.class);
+ private Logger LOG = LoggerFactory.getLogger(SchematronEndpoint.class);
+
+ private TransformerFactory transformerFactory;
@UriPath @Metadata(required = "true")
private String path;
@@ -111,25 +119,40 @@ public class SchematronEndpoint extends DefaultEndpoint {
protected void doStart() throws Exception {
super.doStart();
+
+ if (transformerFactory == null) {
+ createTransformerFactory();
+ }
+
if (rules == null) {
try {
// Attempt to read the schematron rules from the class path first.
- logger.debug("Reading schematron rules from class path {}", path);
+ LOG.debug("Reading schematron rules from class path {}", path);
InputStream schRules = ResourceHelper.resolveMandatoryResourceAsInputStream(getCamelContext().getClassResolver(), path);
- rules = TemplatesFactory.newInstance().newTemplates(schRules);
+ rules = TemplatesFactory.newInstance().getTemplates(schRules, transformerFactory);
} catch (Exception e) {
// Attempts from the file system.
- logger.debug("Schamatron rules not found in class path, attempting file system {}", path);
+ LOG.debug("Schamatron rules not found in class path, attempting file system {}", path);
InputStream schRules = FileUtils.openInputStream(new File(path));
- rules = TemplatesFactory.newInstance().newTemplates(schRules);
+ rules = TemplatesFactory.newInstance().getTemplates(schRules, transformerFactory);
}
// rules not found in class path nor in file system.
if (rules == null) {
- logger.warn("Schematron rules not found {}", path);
- throw new SchematronConfigException("Failed to load rules: " + path);
+ LOG.error("Failed to load schematron rules {}", path);
+ throw new SchematronConfigException("Failed to load schematron rules: " + path);
}
}
+
}
+ private void createTransformerFactory() throws ClassNotFoundException {
+ // provide the class loader of this component to work in OSGi environments
+ Class<?> factoryClass = getCamelContext().getClassResolver().resolveMandatoryClass(SAXON_TRANSFORMER_FACTORY_CLASS_NAME,
+ SchematronComponent.class.getClassLoader());
+ LOG.debug("Using TransformerFactoryClass {}", factoryClass);
+ transformerFactory = (TransformerFactory) getCamelContext().getInjector().newInstance(factoryClass);
+ transformerFactory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ transformerFactory.setAttribute(LINE_NUMBERING, true);
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
index bd3f07a..75e9a7e 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
@@ -29,6 +29,9 @@ public final class Constants {
public static final String FAILED = "FAILED";
public static final String SUCCESS = "SUCCESS";
public static final String SCHEMATRON_TEMPLATES_ROOT_DIR = "iso-schematron-xslt2";
+ public static final String SAXON_TRANSFORMER_FACTORY_CLASS_NAME = "net.sf.saxon.TransformerFactoryImpl";
+ public static final String LINE_NUMBERING = "http://saxon.sf.net/feature/linenumbering";
+
private Constants() {
throw new IllegalStateException("Utility class should not be instantiated");
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
index 6fa2941..135026b 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
@@ -20,6 +20,7 @@ import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;
+import java.io.*;
/**
@@ -40,6 +41,7 @@ public class ClassPathURIResolver implements URIResolver {
@Override
public Source resolve(String href, String base) throws TransformerException {
- return new StreamSource(ClassLoader.getSystemResourceAsStream(rulesDir.concat("/").concat(href)));
+ return new StreamSource(ClassPathURIResolver.class.getClassLoader()
+ .getResourceAsStream(rulesDir.concat(File.separator).concat(href)));
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
index 3e47150..6a9aab3 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
@@ -16,7 +16,7 @@
*/
package org.apache.camel.component.schematron.processor;
-import java.io.File;
+
import java.io.InputStream;
import javax.xml.transform.Source;
@@ -35,13 +35,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
/**
* Class generating Templates for a given schematron rules
*/
public final class TemplatesFactory {
- private static final String LINE_NUMBERING = "http://saxon.sf.net/feature/linenumbering";
+
private static final TemplatesFactory INSTANCE = new TemplatesFactory();
private static final String[] PIPELINE = new String[]{"iso_dsdl_include.xsl", "iso_abstract_expand.xsl", "iso_svrl_for_xslt2.xsl"};
private Logger logger = LoggerFactory.getLogger(TemplatesFactory.class);
@@ -57,34 +56,22 @@ public final class TemplatesFactory {
}
/**
- * Returns an instance of compiled schematron templates.
- *
- * @return
- */
- public Templates newTemplates(final InputStream rules) {
-
- TransformerFactory fac = TransformerFactory.newInstance();
- fac.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
- fac.setAttribute(LINE_NUMBERING, true);
- return getTemplates(rules, fac);
- }
-
- /**
* Generate the schematron template for given rule.
*
* @param rules the schematron rules
* @param fac the transformer factory.
* @return schematron template.
*/
- private Templates getTemplates(InputStream rules, TransformerFactory fac) {
+ public Templates getTemplates(final InputStream rules, final TransformerFactory fac) {
Node node = null;
Source source = new StreamSource(rules);
try {
for (String template : PIPELINE) {
- Source xsl = new StreamSource(ClassLoader.getSystemResourceAsStream(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR
- .concat("/").concat(template)));
- Transformer t = fac.newTransformer(xsl);
+ String path = Constants.SCHEMATRON_TEMPLATES_ROOT_DIR
+ .concat("/").concat(template);
+ InputStream xsl = this.getClass().getClassLoader().getResourceAsStream(path);
+ Transformer t = fac.newTransformer(new StreamSource(xsl));
DOMResult result = new DOMResult();
t.transform(source, result);
source = new DOMSource(node = result.getNode());
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
index 6694503..925d334 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
@@ -17,10 +17,13 @@
package org.apache.camel.component.schematron;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
+import net.sf.saxon.TransformerFactoryImpl;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.component.schematron.constant.Constants;
+import org.apache.camel.component.schematron.processor.ClassPathURIResolver;
import org.apache.camel.component.schematron.processor.TemplatesFactory;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.test.junit4.CamelTestSupport;
@@ -29,7 +32,7 @@ import org.junit.Test;
/**
* Schematron Producer Unit Test.
- *
+ *
*/
public class SchematronProducerTest extends CamelTestSupport {
@@ -38,8 +41,10 @@ public class SchematronProducerTest extends CamelTestSupport {
@BeforeClass
public static void setUP() {
SchematronEndpoint endpoint = new SchematronEndpoint();
- Templates templates = TemplatesFactory.newInstance().newTemplates(ClassLoader.
- getSystemResourceAsStream("sch/schematron-1.sch"));
+ TransformerFactory fac = new TransformerFactoryImpl();
+ fac.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ Templates templates = TemplatesFactory.newInstance().getTemplates(ClassLoader.
+ getSystemResourceAsStream("sch/schematron-1.sch"), fac);
endpoint.setRules(templates);
producer = new SchematronProducer(endpoint);
}
@@ -54,20 +59,19 @@ public class SchematronProducerTest extends CamelTestSupport {
// assert
assertTrue(exc.getOut().getHeader(Constants.VALIDATION_STATUS).equals(Constants.SUCCESS));
- assertNotNull("We should get the report here.", exc.getOut().getHeader(Constants.VALIDATION_REPORT));
}
@Test
public void testProcessInValidXML() throws Exception {
- Exchange exc = new DefaultExchange(context, ExchangePattern.InOnly);
+ Exchange exc = new DefaultExchange(context, ExchangePattern.InOut);
exc.getIn().setBody(ClassLoader.getSystemResourceAsStream("xml/article-2.xml"));
// process xml payload
producer.process(exc);
// assert
- assertTrue("The validation status should be failed.", exc.getIn().getHeader(Constants.VALIDATION_STATUS).equals(Constants.FAILED));
- assertNotNull("We should get the report here.", exc.getIn().getHeader(Constants.VALIDATION_REPORT));
+ assertTrue(exc.getOut().getHeader(Constants.VALIDATION_STATUS).equals(Constants.FAILED));
+
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
index 78b42d7..a0b551d 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
@@ -17,7 +17,10 @@
package org.apache.camel.component.schematron.processor;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
+import net.sf.saxon.TransformerFactoryImpl;
+import org.apache.camel.component.schematron.constant.Constants;
import org.apache.camel.component.schematron.util.Utils;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
@@ -38,7 +41,7 @@ public class SchematronProcessorTest {
String payload = IOUtils.toString(ClassLoader.getSystemResourceAsStream("xml/article-1.xml"));
logger.info("Validating payload: {}", payload);
-
+
// validate
String result = getProcessor("sch/schematron-1.sch").validate(payload);
logger.info("Schematron Report: {}", result);
@@ -59,7 +62,6 @@ public class SchematronProcessorTest {
assertEquals("A chapter should have a title", Utils.evaluate("//svrl:failed-assert/svrl:text", result));
assertEquals("'chapter' element has more than one title present", Utils.evaluate("//svrl:successful-report/svrl:text", result).trim());
-
}
/**
@@ -69,7 +71,9 @@ public class SchematronProcessorTest {
* @return
*/
private SchematronProcessor getProcessor(final String schematron) {
- Templates rules = TemplatesFactory.newInstance().newTemplates(ClassLoader.getSystemResourceAsStream(schematron));
+ TransformerFactory factory = new TransformerFactoryImpl();
+ factory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ Templates rules = TemplatesFactory.newInstance().getTemplates(ClassLoader.getSystemResourceAsStream(schematron), factory);
return SchematronProcessorFactory.newScehamtronEngine(rules);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/491288ec/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
index e302740..a8e1271 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
@@ -17,7 +17,10 @@
package org.apache.camel.component.schematron.processor;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
+import net.sf.saxon.TransformerFactoryImpl;
+import org.apache.camel.component.schematron.constant.Constants;
import org.junit.Assert;
import org.junit.Test;
@@ -31,12 +34,11 @@ public class TemplatesFactoryTest {
@Test
public void testInstantiateAnInstanceOfTemplates() throws Exception {
-
-
TemplatesFactory fac = TemplatesFactory.newInstance();
- Templates templates = fac.newTemplates(ClassLoader.getSystemResourceAsStream(rules));
+ TransformerFactory factory = new TransformerFactoryImpl();
+ factory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ Templates templates = fac.getTemplates(ClassLoader.getSystemResourceAsStream(rules), factory);
Assert.assertNotNull(templates);
-
}
}
[2/4] camel git commit: Fixed CS
Posted by da...@apache.org.
Fixed CS
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/88e99af6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/88e99af6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/88e99af6
Branch: refs/heads/master
Commit: 88e99af67dfa1661eafb98293839fd17e2afb84a
Parents: 491288e
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Jun 5 08:21:02 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jun 5 08:21:02 2015 +0200
----------------------------------------------------------------------
.../component/schematron/SchematronEndpoint.java | 14 +++++++-------
.../schematron/processor/ClassPathURIResolver.java | 7 ++-----
2 files changed, 9 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/88e99af6/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
index e58b8d6..bc63b8e 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
@@ -37,17 +37,17 @@ import org.apache.camel.util.ResourceHelper;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import static org.apache.camel.component.schematron.constant.Constants.LINE_NUMBERING;
import static org.apache.camel.component.schematron.constant.Constants.SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
-
/**
* Schematron Endpoint.
*/
@UriEndpoint(scheme = "schematron", title = "Schematron", syntax = "schematron:path", producerOnly = true, label = "validation")
public class SchematronEndpoint extends DefaultEndpoint {
- private Logger LOG = LoggerFactory.getLogger(SchematronEndpoint.class);
+ private static final Logger LOG = LoggerFactory.getLogger(SchematronEndpoint.class);
private TransformerFactory transformerFactory;
@@ -119,7 +119,6 @@ public class SchematronEndpoint extends DefaultEndpoint {
protected void doStart() throws Exception {
super.doStart();
-
if (transformerFactory == null) {
createTransformerFactory();
}
@@ -143,16 +142,17 @@ public class SchematronEndpoint extends DefaultEndpoint {
throw new SchematronConfigException("Failed to load schematron rules: " + path);
}
}
-
}
private void createTransformerFactory() throws ClassNotFoundException {
// provide the class loader of this component to work in OSGi environments
- Class<?> factoryClass = getCamelContext().getClassResolver().resolveMandatoryClass(SAXON_TRANSFORMER_FACTORY_CLASS_NAME,
- SchematronComponent.class.getClassLoader());
+ Class<TransformerFactory> factoryClass = getCamelContext().getClassResolver().resolveMandatoryClass(SAXON_TRANSFORMER_FACTORY_CLASS_NAME,
+ TransformerFactory.class, SchematronComponent.class.getClassLoader());
+
LOG.debug("Using TransformerFactoryClass {}", factoryClass);
- transformerFactory = (TransformerFactory) getCamelContext().getInjector().newInstance(factoryClass);
+ transformerFactory = getCamelContext().getInjector().newInstance(factoryClass);
transformerFactory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
transformerFactory.setAttribute(LINE_NUMBERING, true);
}
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/88e99af6/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
index 135026b..1fc8a9a 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
@@ -16,24 +16,21 @@
*/
package org.apache.camel.component.schematron.processor;
+import java.io.File;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;
-import java.io.*;
-
/**
* Class path resolver for schematron templates
- *
*/
public class ClassPathURIResolver implements URIResolver {
- private String rulesDir;
+ private final String rulesDir;
/**
* Constructor setter for rules directory path.
- * @param rulesDir
*/
public ClassPathURIResolver(final String rulesDir) {
this.rulesDir = rulesDir;
[4/4] camel git commit: Fixed CS
Posted by da...@apache.org.
Fixed CS
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bab41b7b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bab41b7b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bab41b7b
Branch: refs/heads/camel-2.15.x
Commit: bab41b7bfd001991adc4ae76b70e2edfd64acc67
Parents: a840245
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Jun 5 08:21:02 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jun 5 08:22:09 2015 +0200
----------------------------------------------------------------------
.../camel/component/schematron/SchematronEndpoint.java | 13 +++++++------
.../schematron/processor/ClassPathURIResolver.java | 7 ++-----
2 files changed, 9 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/bab41b7b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
index 8af4b13..868cc75 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
@@ -37,17 +37,17 @@ import org.apache.camel.util.ResourceHelper;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import static org.apache.camel.component.schematron.constant.Constants.LINE_NUMBERING;
import static org.apache.camel.component.schematron.constant.Constants.SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
-
/**
* Schematron Endpoint.
*/
@UriEndpoint(scheme = "schematron", title = "Schematron", syntax = "schematron:path", producerOnly = true, label = "validation")
public class SchematronEndpoint extends DefaultEndpoint {
- private Logger LOG = LoggerFactory.getLogger(SchematronEndpoint.class);
+ private static final Logger LOG = LoggerFactory.getLogger(SchematronEndpoint.class);
private TransformerFactory transformerFactory;
@@ -116,7 +116,6 @@ public class SchematronEndpoint extends DefaultEndpoint {
protected void doStart() throws Exception {
super.doStart();
-
if (transformerFactory == null) {
createTransformerFactory();
}
@@ -144,11 +143,13 @@ public class SchematronEndpoint extends DefaultEndpoint {
private void createTransformerFactory() throws ClassNotFoundException {
// provide the class loader of this component to work in OSGi environments
- Class<?> factoryClass = getCamelContext().getClassResolver().resolveMandatoryClass(SAXON_TRANSFORMER_FACTORY_CLASS_NAME,
- SchematronComponent.class.getClassLoader());
+ Class<TransformerFactory> factoryClass = getCamelContext().getClassResolver().resolveMandatoryClass(SAXON_TRANSFORMER_FACTORY_CLASS_NAME,
+ TransformerFactory.class, SchematronComponent.class.getClassLoader());
+
LOG.debug("Using TransformerFactoryClass {}", factoryClass);
- transformerFactory = (TransformerFactory) getCamelContext().getInjector().newInstance(factoryClass);
+ transformerFactory = getCamelContext().getInjector().newInstance(factoryClass);
transformerFactory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
transformerFactory.setAttribute(LINE_NUMBERING, true);
}
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/bab41b7b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
index 135026b..1fc8a9a 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
@@ -16,24 +16,21 @@
*/
package org.apache.camel.component.schematron.processor;
+import java.io.File;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;
-import java.io.*;
-
/**
* Class path resolver for schematron templates
- *
*/
public class ClassPathURIResolver implements URIResolver {
- private String rulesDir;
+ private final String rulesDir;
/**
* Constructor setter for rules directory path.
- * @param rulesDir
*/
public ClassPathURIResolver(final String rulesDir) {
this.rulesDir = rulesDir;
[3/4] camel git commit: Handling resources loading in OSGI environment
Posted by da...@apache.org.
Handling resources loading in OSGI environment
Conflicts:
components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a840245a
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a840245a
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a840245a
Branch: refs/heads/camel-2.15.x
Commit: a840245a2c20a79edbe7a7629106be8c355cb974
Parents: 88e6aac
Author: Ayache Khettar <ay...@zotix-consulting.co.uk>
Authored: Tue Jun 2 09:18:07 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jun 5 08:21:59 2015 +0200
----------------------------------------------------------------------
.../schematron/SchematronEndpoint.java | 36 ++++++++++++++++----
.../schematron/constant/Constants.java | 3 ++
.../processor/ClassPathURIResolver.java | 4 ++-
.../schematron/processor/TemplatesFactory.java | 27 ++++-----------
.../schematron/SchematronProducerTest.java | 18 ++++++----
.../processor/SchematronProcessorTest.java | 10 ++++--
.../processor/TemplatesFactoryTest.java | 10 +++---
7 files changed, 66 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
index 9c2a213..8af4b13 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/SchematronEndpoint.java
@@ -19,11 +19,14 @@ package org.apache.camel.component.schematron;
import java.io.File;
import java.io.InputStream;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
+import org.apache.camel.component.schematron.constant.Constants;
import org.apache.camel.component.schematron.exception.SchematronConfigException;
+import org.apache.camel.component.schematron.processor.ClassPathURIResolver;
import org.apache.camel.component.schematron.processor.TemplatesFactory;
import org.apache.camel.impl.DefaultEndpoint;
import org.apache.camel.spi.Metadata;
@@ -34,6 +37,9 @@ import org.apache.camel.util.ResourceHelper;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.camel.component.schematron.constant.Constants.LINE_NUMBERING;
+import static org.apache.camel.component.schematron.constant.Constants.SAXON_TRANSFORMER_FACTORY_CLASS_NAME;
+
/**
* Schematron Endpoint.
@@ -41,7 +47,9 @@ import org.slf4j.LoggerFactory;
@UriEndpoint(scheme = "schematron", title = "Schematron", syntax = "schematron:path", producerOnly = true, label = "validation")
public class SchematronEndpoint extends DefaultEndpoint {
- private Logger logger = LoggerFactory.getLogger(SchematronEndpoint.class);
+ private Logger LOG = LoggerFactory.getLogger(SchematronEndpoint.class);
+
+ private TransformerFactory transformerFactory;
@UriPath @Metadata(required = "true")
private String path;
@@ -108,25 +116,39 @@ public class SchematronEndpoint extends DefaultEndpoint {
protected void doStart() throws Exception {
super.doStart();
+
+ if (transformerFactory == null) {
+ createTransformerFactory();
+ }
+
if (rules == null) {
try {
// Attempt to read the schematron rules from the class path first.
- logger.debug("Reading schematron rules from class path {}", path);
+ LOG.debug("Reading schematron rules from class path {}", path);
InputStream schRules = ResourceHelper.resolveMandatoryResourceAsInputStream(getCamelContext().getClassResolver(), path);
- rules = TemplatesFactory.newInstance().newTemplates(schRules);
+ rules = TemplatesFactory.newInstance().getTemplates(schRules, transformerFactory);
} catch (Exception e) {
// Attempts from the file system.
- logger.debug("Schamatron rules not found in class path, attempting file system {}", path);
+ LOG.debug("Schamatron rules not found in class path, attempting file system {}", path);
InputStream schRules = FileUtils.openInputStream(new File(path));
- rules = TemplatesFactory.newInstance().newTemplates(schRules);
+ rules = TemplatesFactory.newInstance().getTemplates(schRules, transformerFactory);
}
// rules not found in class path nor in file system.
if (rules == null) {
- logger.warn("Schematron rules not found {}", path);
- throw new SchematronConfigException("Failed to load rules: " + path);
+ LOG.error("Failed to load schematron rules {}", path);
+ throw new SchematronConfigException("Failed to load schematron rules: " + path);
}
}
+ }
+ private void createTransformerFactory() throws ClassNotFoundException {
+ // provide the class loader of this component to work in OSGi environments
+ Class<?> factoryClass = getCamelContext().getClassResolver().resolveMandatoryClass(SAXON_TRANSFORMER_FACTORY_CLASS_NAME,
+ SchematronComponent.class.getClassLoader());
+ LOG.debug("Using TransformerFactoryClass {}", factoryClass);
+ transformerFactory = (TransformerFactory) getCamelContext().getInjector().newInstance(factoryClass);
+ transformerFactory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ transformerFactory.setAttribute(LINE_NUMBERING, true);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
index bd3f07a..75e9a7e 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/constant/Constants.java
@@ -29,6 +29,9 @@ public final class Constants {
public static final String FAILED = "FAILED";
public static final String SUCCESS = "SUCCESS";
public static final String SCHEMATRON_TEMPLATES_ROOT_DIR = "iso-schematron-xslt2";
+ public static final String SAXON_TRANSFORMER_FACTORY_CLASS_NAME = "net.sf.saxon.TransformerFactoryImpl";
+ public static final String LINE_NUMBERING = "http://saxon.sf.net/feature/linenumbering";
+
private Constants() {
throw new IllegalStateException("Utility class should not be instantiated");
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
index 6fa2941..135026b 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/ClassPathURIResolver.java
@@ -20,6 +20,7 @@ import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.stream.StreamSource;
+import java.io.*;
/**
@@ -40,6 +41,7 @@ public class ClassPathURIResolver implements URIResolver {
@Override
public Source resolve(String href, String base) throws TransformerException {
- return new StreamSource(ClassLoader.getSystemResourceAsStream(rulesDir.concat("/").concat(href)));
+ return new StreamSource(ClassPathURIResolver.class.getClassLoader()
+ .getResourceAsStream(rulesDir.concat(File.separator).concat(href)));
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
index 3e47150..6a9aab3 100644
--- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
+++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/TemplatesFactory.java
@@ -16,7 +16,7 @@
*/
package org.apache.camel.component.schematron.processor;
-import java.io.File;
+
import java.io.InputStream;
import javax.xml.transform.Source;
@@ -35,13 +35,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
/**
* Class generating Templates for a given schematron rules
*/
public final class TemplatesFactory {
- private static final String LINE_NUMBERING = "http://saxon.sf.net/feature/linenumbering";
+
private static final TemplatesFactory INSTANCE = new TemplatesFactory();
private static final String[] PIPELINE = new String[]{"iso_dsdl_include.xsl", "iso_abstract_expand.xsl", "iso_svrl_for_xslt2.xsl"};
private Logger logger = LoggerFactory.getLogger(TemplatesFactory.class);
@@ -57,34 +56,22 @@ public final class TemplatesFactory {
}
/**
- * Returns an instance of compiled schematron templates.
- *
- * @return
- */
- public Templates newTemplates(final InputStream rules) {
-
- TransformerFactory fac = TransformerFactory.newInstance();
- fac.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
- fac.setAttribute(LINE_NUMBERING, true);
- return getTemplates(rules, fac);
- }
-
- /**
* Generate the schematron template for given rule.
*
* @param rules the schematron rules
* @param fac the transformer factory.
* @return schematron template.
*/
- private Templates getTemplates(InputStream rules, TransformerFactory fac) {
+ public Templates getTemplates(final InputStream rules, final TransformerFactory fac) {
Node node = null;
Source source = new StreamSource(rules);
try {
for (String template : PIPELINE) {
- Source xsl = new StreamSource(ClassLoader.getSystemResourceAsStream(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR
- .concat("/").concat(template)));
- Transformer t = fac.newTransformer(xsl);
+ String path = Constants.SCHEMATRON_TEMPLATES_ROOT_DIR
+ .concat("/").concat(template);
+ InputStream xsl = this.getClass().getClassLoader().getResourceAsStream(path);
+ Transformer t = fac.newTransformer(new StreamSource(xsl));
DOMResult result = new DOMResult();
t.transform(source, result);
source = new DOMSource(node = result.getNode());
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
index 6694503..925d334 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/SchematronProducerTest.java
@@ -17,10 +17,13 @@
package org.apache.camel.component.schematron;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
+import net.sf.saxon.TransformerFactoryImpl;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.component.schematron.constant.Constants;
+import org.apache.camel.component.schematron.processor.ClassPathURIResolver;
import org.apache.camel.component.schematron.processor.TemplatesFactory;
import org.apache.camel.impl.DefaultExchange;
import org.apache.camel.test.junit4.CamelTestSupport;
@@ -29,7 +32,7 @@ import org.junit.Test;
/**
* Schematron Producer Unit Test.
- *
+ *
*/
public class SchematronProducerTest extends CamelTestSupport {
@@ -38,8 +41,10 @@ public class SchematronProducerTest extends CamelTestSupport {
@BeforeClass
public static void setUP() {
SchematronEndpoint endpoint = new SchematronEndpoint();
- Templates templates = TemplatesFactory.newInstance().newTemplates(ClassLoader.
- getSystemResourceAsStream("sch/schematron-1.sch"));
+ TransformerFactory fac = new TransformerFactoryImpl();
+ fac.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ Templates templates = TemplatesFactory.newInstance().getTemplates(ClassLoader.
+ getSystemResourceAsStream("sch/schematron-1.sch"), fac);
endpoint.setRules(templates);
producer = new SchematronProducer(endpoint);
}
@@ -54,20 +59,19 @@ public class SchematronProducerTest extends CamelTestSupport {
// assert
assertTrue(exc.getOut().getHeader(Constants.VALIDATION_STATUS).equals(Constants.SUCCESS));
- assertNotNull("We should get the report here.", exc.getOut().getHeader(Constants.VALIDATION_REPORT));
}
@Test
public void testProcessInValidXML() throws Exception {
- Exchange exc = new DefaultExchange(context, ExchangePattern.InOnly);
+ Exchange exc = new DefaultExchange(context, ExchangePattern.InOut);
exc.getIn().setBody(ClassLoader.getSystemResourceAsStream("xml/article-2.xml"));
// process xml payload
producer.process(exc);
// assert
- assertTrue("The validation status should be failed.", exc.getIn().getHeader(Constants.VALIDATION_STATUS).equals(Constants.FAILED));
- assertNotNull("We should get the report here.", exc.getIn().getHeader(Constants.VALIDATION_REPORT));
+ assertTrue(exc.getOut().getHeader(Constants.VALIDATION_STATUS).equals(Constants.FAILED));
+
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
index 78b42d7..a0b551d 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/SchematronProcessorTest.java
@@ -17,7 +17,10 @@
package org.apache.camel.component.schematron.processor;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
+import net.sf.saxon.TransformerFactoryImpl;
+import org.apache.camel.component.schematron.constant.Constants;
import org.apache.camel.component.schematron.util.Utils;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
@@ -38,7 +41,7 @@ public class SchematronProcessorTest {
String payload = IOUtils.toString(ClassLoader.getSystemResourceAsStream("xml/article-1.xml"));
logger.info("Validating payload: {}", payload);
-
+
// validate
String result = getProcessor("sch/schematron-1.sch").validate(payload);
logger.info("Schematron Report: {}", result);
@@ -59,7 +62,6 @@ public class SchematronProcessorTest {
assertEquals("A chapter should have a title", Utils.evaluate("//svrl:failed-assert/svrl:text", result));
assertEquals("'chapter' element has more than one title present", Utils.evaluate("//svrl:successful-report/svrl:text", result).trim());
-
}
/**
@@ -69,7 +71,9 @@ public class SchematronProcessorTest {
* @return
*/
private SchematronProcessor getProcessor(final String schematron) {
- Templates rules = TemplatesFactory.newInstance().newTemplates(ClassLoader.getSystemResourceAsStream(schematron));
+ TransformerFactory factory = new TransformerFactoryImpl();
+ factory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ Templates rules = TemplatesFactory.newInstance().getTemplates(ClassLoader.getSystemResourceAsStream(schematron), factory);
return SchematronProcessorFactory.newScehamtronEngine(rules);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/a840245a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
----------------------------------------------------------------------
diff --git a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
index e302740..a8e1271 100644
--- a/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
+++ b/components/camel-schematron/src/test/java/org/apache/camel/component/schematron/processor/TemplatesFactoryTest.java
@@ -17,7 +17,10 @@
package org.apache.camel.component.schematron.processor;
import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerFactory;
+import net.sf.saxon.TransformerFactoryImpl;
+import org.apache.camel.component.schematron.constant.Constants;
import org.junit.Assert;
import org.junit.Test;
@@ -31,12 +34,11 @@ public class TemplatesFactoryTest {
@Test
public void testInstantiateAnInstanceOfTemplates() throws Exception {
-
-
TemplatesFactory fac = TemplatesFactory.newInstance();
- Templates templates = fac.newTemplates(ClassLoader.getSystemResourceAsStream(rules));
+ TransformerFactory factory = new TransformerFactoryImpl();
+ factory.setURIResolver(new ClassPathURIResolver(Constants.SCHEMATRON_TEMPLATES_ROOT_DIR));
+ Templates templates = fac.getTemplates(ClassLoader.getSystemResourceAsStream(rules), factory);
Assert.assertNotNull(templates);
-
}
}