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 <[email protected]>
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() {