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() {

Reply via email to