Repository: camel Updated Branches: refs/heads/master e86aa1e75 -> b70c4189c
CAMEL-7744: xslt allow to configure custom error listener. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b70c4189 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b70c4189 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b70c4189 Branch: refs/heads/master Commit: b70c4189c61bd5f9b87e40c93f19fa98b74e3620 Parents: fd97b75 Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Aug 25 14:56:05 2014 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Aug 25 14:56:35 2014 +0200 ---------------------------------------------------------------------- .../camel/component/xslt/XsltComponent.java | 2 +- .../xslt/XsltCustomErrorListenerTest.java | 98 ++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/b70c4189/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java b/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java index 095cdb2..7f4b0ad 100644 --- a/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java +++ b/camel-core/src/main/java/org/apache/camel/component/xslt/XsltComponent.java @@ -133,7 +133,7 @@ public class XsltComponent extends UriEndpointComponent { Integer cs = getAndRemoveParameter(parameters, "transformerCacheSize", Integer.class, 0); xslt.transformerCacheSize(cs); - ErrorListener errorListener = getAndRemoveParameter(parameters, "errorListener", ErrorListener.class); + ErrorListener errorListener = resolveAndRemoveReferenceParameter(parameters, "errorListener", ErrorListener.class); if (errorListener != null) { xslt.errorListener(errorListener); } http://git-wip-us.apache.org/repos/asf/camel/blob/b70c4189/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomErrorListenerTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomErrorListenerTest.java b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomErrorListenerTest.java new file mode 100644 index 0000000..07f2d09 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/component/xslt/XsltCustomErrorListenerTest.java @@ -0,0 +1,98 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.xslt; + +import javax.xml.transform.ErrorListener; +import javax.xml.transform.TransformerException; + +import org.apache.camel.CamelContext; +import org.apache.camel.FailedToCreateRouteException; +import org.apache.camel.TestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.impl.SimpleRegistry; + +/** + * + */ +public class XsltCustomErrorListenerTest extends TestSupport { + + private MyErrorListener listener = new MyErrorListener(); + + private class MyErrorListener implements ErrorListener { + + private boolean warning; + private boolean error; + private boolean fatalError; + + @Override + public void warning(TransformerException exception) throws TransformerException { + warning = true; + } + + @Override + public void error(TransformerException exception) throws TransformerException { + error = true; + } + + @Override + public void fatalError(TransformerException exception) throws TransformerException { + fatalError = true; + } + + public boolean isWarning() { + return warning; + } + + public boolean isError() { + return error; + } + + public boolean isFatalError() { + return fatalError; + } + } + + public void testErrorListener() throws Exception { + try { + SimpleRegistry registry = new SimpleRegistry(); + registry.put("myListener", listener); + + RouteBuilder builder = createRouteBuilder(); + CamelContext context = new DefaultCamelContext(registry); + context.addRoutes(builder); + context.start(); + + fail("Should have thrown an exception due XSLT file not found"); + } catch (FailedToCreateRouteException e) { + // expected + } + + assertFalse(listener.isWarning()); + assertTrue("My error listener should been invoked", listener.isError()); + assertTrue("My error listener should been invoked", listener.isFatalError()); + } + + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + public void configure() throws Exception { + from("seda:a").to("xslt:org/apache/camel/builder/xml/example-with-errors.xsl?errorListener=#myListener"); + } + }; + } + +}