This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 440f5b9 Expanded Saxon test coverage with XPath saxon tests and fixed related native issues #2702 440f5b9 is described below commit 440f5b9189249d2e9d95b2181ddd598755bc9cd8 Author: aldettinger <aldettin...@gmail.com> AuthorDate: Tue Jun 1 16:30:16 2021 +0200 Expanded Saxon test coverage with XPath saxon tests and fixed related native issues #2702 --- .../component/saxon/deployment/SaxonProcessor.java | 6 +++ ...{SaxonResource.java => SaxonXPathResource.java} | 44 ++++++----------- .../component/saxon/it/SaxonXPathRoutes.java | 46 +++++++++++++++++ ...SaxonResource.java => SaxonXQueryResource.java} | 2 +- .../{SaxonRoutes.java => SaxonXQueryRoutes.java} | 2 +- .../saxon/it/{SaxonIT.java => SaxonXPathIT.java} | 2 +- .../quarkus/component/saxon/it/SaxonXPathTest.java | 57 ++++++++++++++++++++++ .../saxon/it/{SaxonIT.java => SaxonXQueryIT.java} | 2 +- .../it/{SaxonTest.java => SaxonXQueryTest.java} | 2 +- 9 files changed, 128 insertions(+), 35 deletions(-) diff --git a/extensions/saxon/deployment/src/main/java/org/apache/camel/quarkus/component/saxon/deployment/SaxonProcessor.java b/extensions/saxon/deployment/src/main/java/org/apache/camel/quarkus/component/saxon/deployment/SaxonProcessor.java index 1d2afe0..7c36330 100644 --- a/extensions/saxon/deployment/src/main/java/org/apache/camel/quarkus/component/saxon/deployment/SaxonProcessor.java +++ b/extensions/saxon/deployment/src/main/java/org/apache/camel/quarkus/component/saxon/deployment/SaxonProcessor.java @@ -26,7 +26,9 @@ import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; import io.quarkus.deployment.builditem.IndexDependencyBuildItem; import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import net.sf.saxon.Configuration; import net.sf.saxon.functions.SystemFunction; +import net.sf.saxon.xpath.XPathFactoryImpl; import org.jboss.jandex.ClassInfo; import org.jboss.jandex.DotName; import org.jboss.logging.Logger; @@ -57,6 +59,10 @@ class SaxonProcessor { LOG.debugf("Registering saxon function '%s' as reflective", clazzName); reflectiveClasses.produce(clazz); }); + + // Needed for xpath expression with saxon + reflectiveClasses.produce(new ReflectiveClassBuildItem(false, false, Configuration.class)); + reflectiveClasses.produce(new ReflectiveClassBuildItem(false, false, XPathFactoryImpl.class)); } @BuildStep diff --git a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonResource.java b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathResource.java similarity index 60% copy from integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonResource.java copy to integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathResource.java index 73cbcc8..e51d025 100644 --- a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonResource.java +++ b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathResource.java @@ -26,58 +26,42 @@ import javax.ws.rs.core.MediaType; import org.apache.camel.ProducerTemplate; -@Path("/xquery") +@Path("/xpath") @ApplicationScoped -public class SaxonResource { +public class SaxonXPathResource { @Inject ProducerTemplate template; - @Path("/filter") + @Path("/factory") @GET @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) - public String filter(String xml) { - return template.requestBody("direct:filter", xml, String.class); + public String factory(String xml) { + return template.requestBody("direct:factory", xml, String.class); } - @Path("/transform") + @Path("/objectModel") @GET @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) - public String transform(String xml) { - return template.requestBody("direct:transform", xml, String.class); + public String objectModel(String xml) { + return template.requestBody("direct:object-model", xml, String.class); } - @Path("/resource") + @Path("/saxon") @GET @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) - public String resource(String xml) { - return template.requestBody("direct:resource", xml, String.class); + public String saxon(String xml) { + return template.requestBody("direct:saxon", xml, String.class); } - @Path("/produce") + @Path("/function") @GET @Consumes(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN) - public String produce(String xml) { - return template.requestBody("direct:produce", xml, String.class); - } - - @Path("/extension") - @GET - @Consumes(MediaType.TEXT_PLAIN) - @Produces(MediaType.TEXT_PLAIN) - public String extension(String xml) { - return template.requestBody("direct:extension", xml, String.class); - } - - @Path("/bean") - @GET - @Consumes(MediaType.TEXT_PLAIN) - @Produces(MediaType.TEXT_PLAIN) - public String bean(String xml) { - return template.requestBody("direct:bean", xml, String.class); + public String function(String xml) { + return template.requestBody("direct:function", xml, String.class); } } diff --git a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathRoutes.java b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathRoutes.java new file mode 100644 index 0000000..11ca998 --- /dev/null +++ b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathRoutes.java @@ -0,0 +1,46 @@ +/* + * 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.quarkus.component.saxon.it; + +import javax.enterprise.context.ApplicationScoped; + +import net.sf.saxon.xpath.XPathFactoryImpl; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.language.xpath.XPathBuilder; + +@ApplicationScoped +public class SaxonXPathRoutes extends RouteBuilder { + + @Override + public void configure() { + XPathBuilder builderViaFactory = XPathBuilder.xpath("/items/@count > 1").factory(new XPathFactoryImpl()); + from("direct:factory").choice().when(builderViaFactory).setBody(constant("Multiple items via factory option")); + + XPathBuilder builderViaObjectModel = XPathBuilder.xpath("/items/@count > 1") + .objectModel("http://saxon.sf.net/jaxp/xpath/om"); + from("direct:object-model").choice().when(builderViaObjectModel) + .setBody(constant("Multiple items via objectModel option")); + + XPathBuilder builderViaSaxon = XPathBuilder.xpath("/items/@count > 1").saxon(); + from("direct:saxon").choice().when(builderViaSaxon).setBody(constant("Multiple items via saxon option")); + + XPathBuilder builderWithFunction = XPathBuilder.xpath("sum(/items/item/@price) > 25").saxon(); + from("direct:function").choice().when(builderWithFunction).setBody(constant("Price sum > 25")).otherwise() + .setBody(constant("Price sum <= 25")); + } + +} diff --git a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonResource.java b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryResource.java similarity index 98% rename from integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonResource.java rename to integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryResource.java index 73cbcc8..aa8ff35 100644 --- a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonResource.java +++ b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryResource.java @@ -28,7 +28,7 @@ import org.apache.camel.ProducerTemplate; @Path("/xquery") @ApplicationScoped -public class SaxonResource { +public class SaxonXQueryResource { @Inject ProducerTemplate template; diff --git a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonRoutes.java b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryRoutes.java similarity index 97% rename from integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonRoutes.java rename to integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryRoutes.java index 79ee4b5..877a652 100644 --- a/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonRoutes.java +++ b/integration-tests/saxon/src/main/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryRoutes.java @@ -23,7 +23,7 @@ import net.sf.saxon.Configuration; import org.apache.camel.builder.RouteBuilder; @ApplicationScoped -public class SaxonRoutes extends RouteBuilder { +public class SaxonXQueryRoutes extends RouteBuilder { @Named("saxonConf") public Configuration loadConf() { diff --git a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonIT.java b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathIT.java similarity index 95% copy from integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonIT.java copy to integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathIT.java index 0a0a9b3..666bc20 100644 --- a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonIT.java +++ b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathIT.java @@ -19,6 +19,6 @@ package org.apache.camel.quarkus.component.saxon.it; import io.quarkus.test.junit.NativeImageTest; @NativeImageTest -class SaxonIT extends SaxonTest { +class SaxonXPathIT extends SaxonXPathTest { } diff --git a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathTest.java b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathTest.java new file mode 100644 index 0000000..b107d6d --- /dev/null +++ b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXPathTest.java @@ -0,0 +1,57 @@ +/* + * 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.quarkus.component.saxon.it; + +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.is; + +@QuarkusTest +class SaxonXPathTest { + + @Test + public void xpathOnboardingSaxonViaFactoryOptionShouldSucceed() { + String xml = "<items count='2'/>"; + given().body(xml).get("/xpath/factory").then().statusCode(200).body(is("Multiple items via factory option")); + } + + @Test + public void xpathOnboardingSaxonViaObjectModelOptionShouldSucceed() { + String xml = "<items count='3'/>"; + given().body(xml).get("/xpath/objectModel").then().statusCode(200).body(is("Multiple items via objectModel option")); + } + + @Test + public void xpathOnboardingSaxonViaSaxonOptionShouldSucceed() { + String xml = "<items count='4'/>"; + given().body(xml).get("/xpath/saxon").then().statusCode(200).body(is("Multiple items via saxon option")); + } + + @Test + public void saxonXpathWithFunctionShouldReturnPriceSumLessThan25() { + String xml = "<items><item price='1'/><item price='2'/><item price='3'/><item price='4'/></items>"; + given().body(xml).get("/xpath/function").then().statusCode(200).body(is("Price sum <= 25")); + } + + @Test + public void saxonXpathWithFunctionShouldReturnPriceSumGreaterThan25() { + String xml = "<items><item price='1'/><item price='2'/><item price='3'/><item price='40'/></items>"; + given().body(xml).get("/xpath/function").then().statusCode(200).body(is("Price sum > 25")); + } +} diff --git a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonIT.java b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryIT.java similarity index 95% rename from integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonIT.java rename to integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryIT.java index 0a0a9b3..bbfa2cd 100644 --- a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonIT.java +++ b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryIT.java @@ -19,6 +19,6 @@ package org.apache.camel.quarkus.component.saxon.it; import io.quarkus.test.junit.NativeImageTest; @NativeImageTest -class SaxonIT extends SaxonTest { +class SaxonXQueryIT extends SaxonXQueryTest { } diff --git a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonTest.java b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryTest.java similarity index 99% rename from integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonTest.java rename to integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryTest.java index 2744123..e9534bd 100644 --- a/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonTest.java +++ b/integration-tests/saxon/src/test/java/org/apache/camel/quarkus/component/saxon/it/SaxonXQueryTest.java @@ -27,7 +27,7 @@ import static org.apache.commons.io.IOUtils.resourceToString; import static org.hamcrest.Matchers.is; @QuarkusTest -class SaxonTest { +class SaxonXQueryTest { @Test public void xqueyrFilterShouldMatchJames() {