This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch xslt in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9e9d6cb9186ea5ff42901bc3d2aaacc1c3d7f35f Author: Claus Ibsen <[email protected]> AuthorDate: Mon Dec 29 07:39:57 2025 +0100 CAMEL-22783: camel-xslt - Add option to set xpathTotalOpLimit on component --- .../org/apache/camel/catalog/components/xj.json | 3 +- .../camel/catalog/components/xslt-saxon.json | 3 +- .../org/apache/camel/catalog/components/xslt.json | 3 +- .../META-INF/org/apache/camel/component/xj/xj.json | 3 +- .../camel/component/xslt/saxon/xslt-saxon.json | 3 +- .../component/xslt/XsltComponentConfigurer.java | 6 +++ .../org/apache/camel/component/xslt/xslt.json | 3 +- .../apache/camel/component/xslt/XsltComponent.java | 35 ++++++++++++- .../camel/component/xslt/ZXsltTotalOpsTest.java | 59 ++++++++++++++++++++++ 9 files changed, 111 insertions(+), 7 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json index 30102c4006b8..d699e93005c1 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xj.json @@ -35,7 +35,8 @@ "transformerFactoryClass": { "index": 8, "kind": "property", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, "transformerFactoryConfigurationStrategy": { "index": 9, "kind": "property", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, "uriResolver": { "index": 10, "kind": "property", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'." }, - "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." } + "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." }, + "xpathTotalOpLimit": { "index": 12, "kind": "property", "displayName": "Xpath Total Op Limit", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit" } }, "headers": { "CamelXsltFileName": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The XSLT file name", "constantName": "org.apache.camel.component.xj.XJConstants#XSLT_FILE_NAME" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json index 0c824c004bb5..dc6f6eec5b58 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt-saxon.json @@ -35,7 +35,8 @@ "transformerFactoryClass": { "index": 8, "kind": "property", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, "transformerFactoryConfigurationStrategy": { "index": 9, "kind": "property", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, "uriResolver": { "index": 10, "kind": "property", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'." }, - "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." } + "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." }, + "xpathTotalOpLimit": { "index": 12, "kind": "property", "displayName": "Xpath Total Op Limit", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit" } }, "headers": { "CamelXsltResourceUri": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A URI for the template resource to load and use instead of the endpoint configured.", "constantName": "org.apache.camel.component.xslt.XsltConstants#XSLT_RESOURCE_URI" }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json index 6565bd787743..356c169ace80 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/xslt.json @@ -31,7 +31,8 @@ "transformerFactoryClass": { "index": 4, "kind": "property", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, "transformerFactoryConfigurationStrategy": { "index": 5, "kind": "property", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, "uriResolver": { "index": 6, "kind": "property", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'." }, - "uriResolverFactory": { "index": 7, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." } + "uriResolverFactory": { "index": 7, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." }, + "xpathTotalOpLimit": { "index": 8, "kind": "property", "displayName": "Xpath Total Op Limit", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit" } }, "headers": { "CamelXsltResourceUri": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A URI for the template resource to load and use instead of the endpoint configured.", "constantName": "org.apache.camel.component.xslt.XsltConstants#XSLT_RESOURCE_URI" }, diff --git a/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json b/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json index 30102c4006b8..d699e93005c1 100644 --- a/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json +++ b/components/camel-xj/src/generated/resources/META-INF/org/apache/camel/component/xj/xj.json @@ -35,7 +35,8 @@ "transformerFactoryClass": { "index": 8, "kind": "property", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, "transformerFactoryConfigurationStrategy": { "index": 9, "kind": "property", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, "uriResolver": { "index": 10, "kind": "property", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'." }, - "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." } + "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." }, + "xpathTotalOpLimit": { "index": 12, "kind": "property", "displayName": "Xpath Total Op Limit", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit" } }, "headers": { "CamelXsltFileName": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The XSLT file name", "constantName": "org.apache.camel.component.xj.XJConstants#XSLT_FILE_NAME" }, diff --git a/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json b/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json index 0c824c004bb5..dc6f6eec5b58 100644 --- a/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json +++ b/components/camel-xslt-saxon/src/generated/resources/META-INF/org/apache/camel/component/xslt/saxon/xslt-saxon.json @@ -35,7 +35,8 @@ "transformerFactoryClass": { "index": 8, "kind": "property", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, "transformerFactoryConfigurationStrategy": { "index": 9, "kind": "property", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, "uriResolver": { "index": 10, "kind": "property", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'." }, - "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." } + "uriResolverFactory": { "index": 11, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." }, + "xpathTotalOpLimit": { "index": 12, "kind": "property", "displayName": "Xpath Total Op Limit", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit" } }, "headers": { "CamelXsltResourceUri": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A URI for the template resource to load and use instead of the endpoint configured.", "constantName": "org.apache.camel.component.xslt.XsltConstants#XSLT_RESOURCE_URI" }, diff --git a/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltComponentConfigurer.java b/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltComponentConfigurer.java index b39cca92f77b..14dea08d8b6b 100644 --- a/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltComponentConfigurer.java +++ b/components/camel-xslt/src/generated/java/org/apache/camel/component/xslt/XsltComponentConfigurer.java @@ -39,6 +39,8 @@ public class XsltComponentConfigurer extends PropertyConfigurerSupport implement case "uriResolver": target.setUriResolver(property(camelContext, javax.xml.transform.URIResolver.class, value)); return true; case "uriresolverfactory": case "uriResolverFactory": target.setUriResolverFactory(property(camelContext, org.apache.camel.component.xslt.XsltUriResolverFactory.class, value)); return true; + case "xpathtotaloplimit": + case "xpathTotalOpLimit": target.setXpathTotalOpLimit(property(camelContext, int.class, value)); return true; default: return false; } } @@ -62,6 +64,8 @@ public class XsltComponentConfigurer extends PropertyConfigurerSupport implement case "uriResolver": return javax.xml.transform.URIResolver.class; case "uriresolverfactory": case "uriResolverFactory": return org.apache.camel.component.xslt.XsltUriResolverFactory.class; + case "xpathtotaloplimit": + case "xpathTotalOpLimit": return int.class; default: return null; } } @@ -86,6 +90,8 @@ public class XsltComponentConfigurer extends PropertyConfigurerSupport implement case "uriResolver": return target.getUriResolver(); case "uriresolverfactory": case "uriResolverFactory": return target.getUriResolverFactory(); + case "xpathtotaloplimit": + case "xpathTotalOpLimit": return target.getXpathTotalOpLimit(); default: return null; } } diff --git a/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json b/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json index 6565bd787743..356c169ace80 100644 --- a/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json +++ b/components/camel-xslt/src/generated/resources/META-INF/org/apache/camel/component/xslt/xslt.json @@ -31,7 +31,8 @@ "transformerFactoryClass": { "index": 4, "kind": "property", "displayName": "Transformer Factory Class", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom XSLT transformer factory, specified as a FQN class name" }, "transformerFactoryConfigurationStrategy": { "index": 5, "kind": "property", "displayName": "Transformer Factory Configuration Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A configuration strategy to apply on freshly created instances of TransformerFactory." }, "uriResolver": { "index": 6, "kind": "property", "displayName": "Uri Resolver", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.xml.transform.URIResolver", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver. Should not be used together with the option 'uriResolverFactory'." }, - "uriResolverFactory": { "index": 7, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." } + "uriResolverFactory": { "index": 7, "kind": "property", "displayName": "Uri Resolver Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.xslt.XsltUriResolverFactory", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom UriResolver which depends on a dynamic endpoint resource URI. Should not be used together with the option 'uriResolver'." }, + "xpathTotalOpLimit": { "index": 8, "kind": "property", "displayName": "Xpath Total Op Limit", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit" } }, "headers": { "CamelXsltResourceUri": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A URI for the template resource to load and use instead of the endpoint configured.", "constantName": "org.apache.camel.component.xslt.XsltConstants#XSLT_RESOURCE_URI" }, diff --git a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java index 385800353a7c..2acc227e95e4 100644 --- a/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java +++ b/components/camel-xslt/src/main/java/org/apache/camel/component/xslt/XsltComponent.java @@ -36,6 +36,8 @@ public class XsltComponent extends DefaultComponent { private static final Logger LOG = LoggerFactory.getLogger(XsltComponent.class); + private static final String XPATH_TOTAL_OP_LIMIT = "jdk.xml.xpathTotalOpLimit"; + @Metadata(label = "advanced") private URIResolver uriResolver; @Metadata(label = "advanced") @@ -48,6 +50,8 @@ public class XsltComponent extends DefaultComponent { private TransformerFactoryConfigurationStrategy transformerFactoryConfigurationStrategy; @Metadata(label = "advanced") private String transformerFactoryClass; + @Metadata(label = "advanced") + private int xpathTotalOpLimit; public XsltComponent() { } @@ -125,11 +129,40 @@ public class XsltComponent extends DefaultComponent { this.transformerFactoryClass = transformerFactoryClass; } + public int getXpathTotalOpLimit() { + return xpathTotalOpLimit; + } + + /** + * Limits the total number of XPath operators in an XSL Stylesheet. The default (from JDK) is 10000. + * + * Configuring this corresponds to setting JVM system property: jdk.xml.xpathTotalOpLimit + */ + public void setXpathTotalOpLimit(int xpathTotalOpLimit) { + this.xpathTotalOpLimit = xpathTotalOpLimit; + } + + @Override + protected void doInit() throws Exception { + super.doInit(); + if (xpathTotalOpLimit > 0) { + LOG.info("XsltComponent is setting JVM system property: jdk.xml.xpathTotalOpLimit=" + xpathTotalOpLimit); + System.setProperty(XPATH_TOTAL_OP_LIMIT, "" + xpathTotalOpLimit); + } + } + + @Override + protected void doShutdown() throws Exception { + super.doShutdown(); + if (xpathTotalOpLimit > 0) { + System.clearProperty(XPATH_TOTAL_OP_LIMIT); + } + } + @Override protected Endpoint createEndpoint(String uri, final String remaining, Map<String, Object> parameters) throws Exception { XsltEndpoint endpoint = createXsltEndpoint(uri); configureEndpoint(endpoint, remaining, parameters); - return endpoint; } diff --git a/core/camel-core/src/test/java/org/apache/camel/component/xslt/ZXsltTotalOpsTest.java b/core/camel-core/src/test/java/org/apache/camel/component/xslt/ZXsltTotalOpsTest.java new file mode 100644 index 000000000000..9fce2915c6fc --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/component/xslt/ZXsltTotalOpsTest.java @@ -0,0 +1,59 @@ +/* + * 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.TransformerConfigurationException; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.parallel.Isolated; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +@Isolated +public class ZXsltTotalOpsTest extends ContextTestSupport { + + @Override + public boolean isUseRouteBuilder() { + return false; + } + + @Test + public void testXsltTotalOps() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + XsltComponent xslt = context.getComponent("xslt", XsltComponent.class); + xslt.setXpathTotalOpLimit(1); + + from("direct:start") + .to("xslt:org/apache/camel/component/xslt/example.xsl?output=bytes").to("mock:result"); + } + }); + try { + context.start(); + fail("Should fail due to low total ops"); + } catch (Exception e) { + TransformerConfigurationException tce + = assertIsInstanceOf(TransformerConfigurationException.class, e.getCause().getCause().getCause()); + assertTrue(tce.getMessage().endsWith("operators that exceeds the '1' limit set by 'system property'.")); + } + } + +}
