You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/03/18 09:51:57 UTC
[camel-quarkus] branch master updated: Register classes with Solr
Field annotations for reflection
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push:
new da8bcc7 Register classes with Solr Field annotations for reflection
da8bcc7 is described below
commit da8bcc7aa2bde499b3483b8e61f326f68b331d83
Author: James Netherton <ja...@gmail.com>
AuthorDate: Wed Mar 17 14:51:06 2021 +0000
Register classes with Solr Field annotations for reflection
Fixes #2341
---
.../component/solr/deployment/SolrProcessor.java | 32 ++++++++++++++-
.../component/solr/it/SolrCommonResource.java | 18 +++++++--
.../camel/quarkus/component/solr/it/bean/Item.java | 2 +-
.../camel/quarkus/component/solr/it/SolrTest.java | 47 +++++++++-------------
4 files changed, 64 insertions(+), 35 deletions(-)
diff --git a/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java b/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java
index 403ee2e..1f9734f 100644
--- a/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java
+++ b/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java
@@ -16,15 +16,20 @@
*/
package org.apache.camel.quarkus.component.solr.deployment;
+import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
-import org.jboss.logging.Logger;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.jboss.jandex.AnnotationTarget;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.DotName;
class SolrProcessor {
- private static final Logger LOG = Logger.getLogger(SolrProcessor.class);
private static final String FEATURE = "camel-solr";
+ private static final DotName FIELD_DOT_NAME = DotName.createSimple("org.apache.solr.client.solrj.beans.Field");
@BuildStep
FeatureBuildItem feature() {
@@ -35,4 +40,27 @@ class SolrProcessor {
ExtensionSslNativeSupportBuildItem activateSslNativeSupport() {
return new ExtensionSslNativeSupportBuildItem(FEATURE);
}
+
+ @BuildStep
+ void registerForReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass, CombinedIndexBuildItem combinedIndex) {
+ // Register any classes within the application archive that contain the Solr Field annotation
+ combinedIndex.getIndex()
+ .getAnnotations(FIELD_DOT_NAME)
+ .stream()
+ .map(annotationInstance -> {
+ AnnotationTarget target = annotationInstance.target();
+ AnnotationTarget.Kind kind = target.kind();
+ if (kind.equals(AnnotationTarget.Kind.FIELD)) {
+ ClassInfo classInfo = target.asField().declaringClass();
+ return new ReflectiveClassBuildItem(false, true, classInfo.name().toString());
+ } else if (kind.equals(AnnotationTarget.Kind.METHOD)) {
+ ClassInfo classInfo = target.asMethod().declaringClass();
+ return new ReflectiveClassBuildItem(true, false, classInfo.name().toString());
+ } else {
+ throw new RuntimeException(
+ FIELD_DOT_NAME.toString() + " cannot be applied to " + target.kind().toString());
+ }
+ })
+ .forEach(reflectiveClass::produce);
+ }
}
diff --git a/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCommonResource.java b/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCommonResource.java
index ef4a1b0..16a1446 100644
--- a/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCommonResource.java
+++ b/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCommonResource.java
@@ -19,6 +19,7 @@ package org.apache.camel.quarkus.component.solr.it;
import java.io.IOException;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.ws.rs.DELETE;
@@ -64,7 +65,8 @@ public abstract class SolrCommonResource {
@PUT
@Path("bean")
- public Response addBean(Item bean) {
+ public Response addBean(String name) {
+ Item bean = createItem(name);
producerTemplate.sendBodyAndHeader(solrComponentURI, bean, SolrConstants.OPERATION, SolrConstants.OPERATION_ADD_BEAN);
solrCommit();
return Response.accepted().build();
@@ -72,7 +74,8 @@ public abstract class SolrCommonResource {
@PUT
@Path("beans")
- public Response addBeans(List<Item> beans) {
+ public Response addBeans(List<String> names) {
+ List<Item> beans = names.stream().map(this::createItem).collect(Collectors.toList());
producerTemplate.sendBodyAndHeader(solrComponentURI, beans, SolrConstants.OPERATION, SolrConstants.OPERATION_ADD_BEANS);
solrCommit();
return Response.accepted().build();
@@ -165,12 +168,19 @@ public abstract class SolrCommonResource {
@GET
@Path("bean/{id}")
- public Item getBeanById(@PathParam("id") String id) throws IOException, SolrServerException {
+ public String getBeanById(@PathParam("id") String id) throws IOException, SolrServerException {
SolrQuery solrQuery = new SolrQuery();
solrQuery.set("q", "id:" + id);
QueryRequest queryRequest = new QueryRequest(solrQuery);
QueryResponse response = queryRequest.process(solrClient);
List<Item> responses = response.getBeans(Item.class);
- return responses.size() != 0 ? responses.get(0) : new Item();
+ return responses.size() != 0 ? responses.get(0).getId() : "";
+ }
+
+ private Item createItem(String id) {
+ Item item = new Item();
+ item.setId(id);
+ item.setCategories(new String[] { "aaa", "bbb", "ccc" });
+ return item;
}
}
diff --git a/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/bean/Item.java b/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/bean/Item.java
index 80103cb..114b96b 100644
--- a/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/bean/Item.java
+++ b/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/bean/Item.java
@@ -20,7 +20,6 @@ import org.apache.solr.client.solrj.beans.Field;
public class Item {
- @Field
String id;
@Field("cat")
@@ -33,6 +32,7 @@ public class Item {
return id;
}
+ @Field
public void setId(String id) {
this.id = id;
}
diff --git a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
index 5e29775..e317ac1 100644
--- a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
+++ b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
@@ -25,7 +25,6 @@ import java.util.stream.Stream;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.http.ContentType;
-import org.apache.camel.quarkus.component.solr.it.bean.Item;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;
@@ -50,10 +49,9 @@ public class SolrTest {
@MethodSource("resources")
public void testSingleBean(String resource) {
// create a bean item
- Item item = createItem("test1");
given()
.contentType(ContentType.JSON)
- .body(item)
+ .body("test1")
.put(resource + "/bean")
.then()
.statusCode(202);
@@ -61,7 +59,7 @@ public class SolrTest {
given()
.get(resource + "/bean/test1")
.then()
- .body("id", equalTo("test1"));
+ .body(equalTo("test1"));
// delete bean by id
given()
@@ -74,21 +72,21 @@ public class SolrTest {
given()
.get(resource + "/bean/test1")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
}
@ParameterizedTest
@MethodSource("resources")
public void testMultipleBeans(String resource) {
// create list of beans
- List<Item> beans = new ArrayList<>();
- beans.add(createItem("bean1"));
- beans.add(createItem("bean2"));
+ List<String> beanNames = new ArrayList<>();
+ beanNames.add("bean1");
+ beanNames.add("bean2");
// add beans with camel
given()
.contentType(ContentType.JSON)
- .body(beans)
+ .body(beanNames)
.put(resource + "/beans")
.then()
.statusCode(202);
@@ -97,11 +95,11 @@ public class SolrTest {
given()
.get(resource + "/bean/bean1")
.then()
- .body("id", equalTo("bean1"));
+ .body(equalTo("bean1"));
given()
.get(resource + "/bean/bean2")
.then()
- .body("id", equalTo("bean2"));
+ .body(equalTo("bean2"));
// delete all beans that has id begins with bean
given()
@@ -115,11 +113,11 @@ public class SolrTest {
given()
.get(resource + "/bean/bean1")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
given()
.get(resource + "/bean/bean2")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
}
@ParameterizedTest
@@ -140,7 +138,7 @@ public class SolrTest {
given()
.get(resource + "/bean/id1")
.then()
- .body("id", equalTo("id1"));
+ .body(equalTo("id1"));
}
@@ -160,7 +158,7 @@ public class SolrTest {
given()
.get(resource + "/bean/opt1")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
// optimize
given()
.get(resource + "/optimize")
@@ -170,7 +168,7 @@ public class SolrTest {
given()
.get(resource + "/bean/opt1")
.then()
- .body("id", equalTo("opt1"));
+ .body(equalTo("opt1"));
}
@@ -191,7 +189,7 @@ public class SolrTest {
given()
.get(resource + "/bean/roll1")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
// rollback
given()
.get(resource + "/rollback")
@@ -206,7 +204,7 @@ public class SolrTest {
given()
.get(resource + "/bean/roll1")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
}
@ParameterizedTest
@@ -225,7 +223,7 @@ public class SolrTest {
given()
.get(resource + "/bean/com1")
.then()
- .body("id", emptyOrNullString());
+ .body(emptyOrNullString());
// soft commit
given()
.get(resource + "/softcommit")
@@ -235,7 +233,7 @@ public class SolrTest {
given()
.get(resource + "/bean/com1")
.then()
- .body("id", equalTo("com1"));
+ .body(equalTo("com1"));
}
@ParameterizedTest
@@ -260,13 +258,6 @@ public class SolrTest {
given()
.get(resource + "/bean/stream1")
.then()
- .body("id", equalTo("stream1"));
- }
-
- private Item createItem(String id) {
- Item item = new Item();
- item.setId(id);
- item.setCategories(new String[] { "aaa", "bbb", "ccc" });
- return item;
+ .body(equalTo("stream1"));
}
}