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 62d2b10 Add native support for Elasticsearch REST 62d2b10 is described below commit 62d2b10b24802a008419a8fcded4defe11db8c4c Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Wed Apr 29 13:12:23 2020 +0100 Add native support for Elasticsearch REST Fixes #896 --- .github/test-categories.yaml | 1 + .../pages/list-of-camel-quarkus-extensions.adoc | 6 +- .../rest/it/ElasticsearchRestResource.java | 51 ----------- extensions-jvm/pom.xml | 1 - .../elasticsearch-rest/deployment/pom.xml | 6 +- .../deployment/ElasticsearchRestProcessor.java | 18 ---- .../elasticsearch-rest/pom.xml | 3 +- .../elasticsearch-rest/runtime/pom.xml | 10 ++- .../main/resources/META-INF/quarkus-extension.yaml | 10 +-- extensions/pom.xml | 1 + .../elasticsearch-rest}/pom.xml | 55 +++++++++++- .../rest/it/ElasticsearchRestResource.java | 99 ++++++++++++++++++++++ .../rest/it/ElasticSearchTestResource.java | 70 +++++++++++++++ .../elasticsearch/rest/it/ElasticsearchRestIT.java | 17 +--- .../rest/it/ElasticsearchRestTest.java | 86 +++++++++++++++++++ integration-tests/pom.xml | 1 + pom.xml | 1 + poms/bom/pom.xml | 11 +++ .../quarkus/maven/UpdateDocExtensionsListMojo.java | 5 ++ 19 files changed, 351 insertions(+), 101 deletions(-) diff --git a/.github/test-categories.yaml b/.github/test-categories.yaml index b27fc0a..6f50383 100644 --- a/.github/test-categories.yaml +++ b/.github/test-categories.yaml @@ -22,6 +22,7 @@ categories: - aws2 - azure - consul + - elasticsearch-rest core: - core - core-impl diff --git a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc index f26e8a1..b2706df 100644 --- a/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc +++ b/docs/modules/ROOT/pages/list-of-camel-quarkus-extensions.adoc @@ -241,9 +241,9 @@ Level | Since | Description `dozer:name` | Native + Stable | 1.0.0-M1 | The dozer component provides the ability to map between Java beans using the Dozer mapping library. -| link:https://camel.apache.org/components/latest/elasticsearch-rest-component.html[Elastichsearch Rest] (camel-quarkus-elasticsearch-rest) + -`elasticsearch-rest:clusterName` | JVM + - Preview | 1.0.0-M6 | The elasticsearch component is used for interfacing with ElasticSearch server using REST API. +| link:https://camel.apache.org/components/latest/elasticsearch-rest-component.html[Elasticsearch Rest] (camel-quarkus-elasticsearch-rest) + +`elasticsearch-rest:clusterName` | Native + + Stable | 1.0.0-M6 | The elasticsearch component is used for interfacing with ElasticSearch server using REST API. | link:https://camel.apache.org/components/latest/exec-component.html[Exec] (camel-quarkus-exec) + `exec:executable` | Native + diff --git a/extensions-jvm/elasticsearch-rest/integration-test/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestResource.java b/extensions-jvm/elasticsearch-rest/integration-test/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestResource.java deleted file mode 100644 index eb55700..0000000 --- a/extensions-jvm/elasticsearch-rest/integration-test/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestResource.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.elasticsearch.rest.it; - -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import org.apache.camel.CamelContext; -import org.jboss.logging.Logger; - -@Path("/elasticsearch-rest") -@ApplicationScoped -public class ElasticsearchRestResource { - - private static final Logger LOG = Logger.getLogger(ElasticsearchRestResource.class); - - private static final String COMPONENT_ELASTICSEARCH_REST = "elasticsearch-rest"; - @Inject - CamelContext context; - - @Path("/load/component/elasticsearch-rest") - @GET - @Produces(MediaType.TEXT_PLAIN) - public Response loadComponentElasticsearchRest() throws Exception { - /* This is an autogenerated test */ - if (context.getComponent(COMPONENT_ELASTICSEARCH_REST) != null) { - return Response.ok().build(); - } - LOG.warnf("Could not load [%s] from the Camel context", COMPONENT_ELASTICSEARCH_REST); - return Response.status(500, COMPONENT_ELASTICSEARCH_REST + " could not be loaded from the Camel context").build(); - } -} diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml index b6d24dd..361b119 100644 --- a/extensions-jvm/pom.xml +++ b/extensions-jvm/pom.xml @@ -52,7 +52,6 @@ <module>debezium-mysql</module> <module>debezium-postgres</module> <module>debezium-sqlserver</module> - <module>elasticsearch-rest</module> <module>google-bigquery</module> <module>google-pubsub</module> <module>groovy</module> diff --git a/extensions-jvm/elasticsearch-rest/deployment/pom.xml b/extensions/elasticsearch-rest/deployment/pom.xml similarity index 92% rename from extensions-jvm/elasticsearch-rest/deployment/pom.xml rename to extensions/elasticsearch-rest/deployment/pom.xml index 09eae07..a20ab3a 100644 --- a/extensions-jvm/elasticsearch-rest/deployment/pom.xml +++ b/extensions/elasticsearch-rest/deployment/pom.xml @@ -27,7 +27,7 @@ </parent> <artifactId>camel-quarkus-elasticsearch-rest-deployment</artifactId> - <name>Camel Quarkus :: Elastichsearch Rest :: Deployment</name> + <name>Camel Quarkus :: Elasticsearch Rest :: Deployment</name> <dependencyManagement> <dependencies> @@ -43,6 +43,10 @@ <dependencies> <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-elasticsearch-rest-client-deployment</artifactId> + </dependency> + <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-core-deployment</artifactId> </dependency> diff --git a/extensions-jvm/elasticsearch-rest/deployment/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/deployment/ElasticsearchRestProcessor.java b/extensions/elasticsearch-rest/deployment/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/deployment/ElasticsearchRestProcessor.java similarity index 62% rename from extensions-jvm/elasticsearch-rest/deployment/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/deployment/ElasticsearchRestProcessor.java rename to extensions/elasticsearch-rest/deployment/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/deployment/ElasticsearchRestProcessor.java index 95ea08a..0684e1f 100644 --- a/extensions-jvm/elasticsearch-rest/deployment/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/deployment/ElasticsearchRestProcessor.java +++ b/extensions/elasticsearch-rest/deployment/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/deployment/ElasticsearchRestProcessor.java @@ -17,31 +17,13 @@ package org.apache.camel.quarkus.component.elasticsearch.rest.deployment; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.annotations.ExecutionTime; -import io.quarkus.deployment.annotations.Record; import io.quarkus.deployment.builditem.FeatureBuildItem; -import io.quarkus.deployment.pkg.steps.NativeBuild; -import org.apache.camel.quarkus.core.JvmOnlyRecorder; -import org.jboss.logging.Logger; class ElasticsearchRestProcessor { - private static final Logger LOG = Logger.getLogger(ElasticsearchRestProcessor.class); - private static final String FEATURE = "camel-elasticsearch-rest"; @BuildStep FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } - - /** - * Remove this once this extension starts supporting the native mode. - */ - @BuildStep(onlyIf = NativeBuild.class) - @Record(value = ExecutionTime.RUNTIME_INIT) - void warnJvmInNative(JvmOnlyRecorder recorder) { - JvmOnlyRecorder.warnJvmInNative(LOG, FEATURE); // warn at build time - recorder.warnJvmInNative(FEATURE); // warn at runtime - } - } diff --git a/extensions-jvm/elasticsearch-rest/pom.xml b/extensions/elasticsearch-rest/pom.xml similarity index 94% rename from extensions-jvm/elasticsearch-rest/pom.xml rename to extensions/elasticsearch-rest/pom.xml index 858280a..15f4fc6 100644 --- a/extensions-jvm/elasticsearch-rest/pom.xml +++ b/extensions/elasticsearch-rest/pom.xml @@ -27,12 +27,11 @@ </parent> <artifactId>camel-quarkus-elasticsearch-rest-parent</artifactId> - <name>Camel Quarkus :: Elastichsearch Rest</name> + <name>Camel Quarkus :: Elasticsearch Rest</name> <packaging>pom</packaging> <modules> <module>deployment</module> <module>runtime</module> - <module>integration-test</module> </modules> </project> diff --git a/extensions-jvm/elasticsearch-rest/runtime/pom.xml b/extensions/elasticsearch-rest/runtime/pom.xml similarity index 89% rename from extensions-jvm/elasticsearch-rest/runtime/pom.xml rename to extensions/elasticsearch-rest/runtime/pom.xml index 0fc558e..c7aac00 100644 --- a/extensions-jvm/elasticsearch-rest/runtime/pom.xml +++ b/extensions/elasticsearch-rest/runtime/pom.xml @@ -27,7 +27,7 @@ </parent> <artifactId>camel-quarkus-elasticsearch-rest</artifactId> - <name>Camel Quarkus :: Elastichsearch Rest :: Runtime</name> + <name>Camel Quarkus :: Elasticsearch Rest :: Runtime</name> <description>The elasticsearch component is used for interfacing with ElasticSearch server using REST API.</description> <properties> @@ -48,6 +48,14 @@ <dependencies> <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-elasticsearch-rest-client</artifactId> + </dependency> + <dependency> + <groupId>org.elasticsearch.client</groupId> + <artifactId>elasticsearch-rest-high-level-client</artifactId> + </dependency> + <dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-core</artifactId> </dependency> diff --git a/extensions-jvm/elasticsearch-rest/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/elasticsearch-rest/runtime/src/main/resources/META-INF/quarkus-extension.yaml similarity index 83% rename from extensions-jvm/elasticsearch-rest/runtime/src/main/resources/META-INF/quarkus-extension.yaml rename to extensions/elasticsearch-rest/runtime/src/main/resources/META-INF/quarkus-extension.yaml index 92f87a9..45f62d3 100644 --- a/extensions-jvm/elasticsearch-rest/runtime/src/main/resources/META-INF/quarkus-extension.yaml +++ b/extensions/elasticsearch-rest/runtime/src/main/resources/META-INF/quarkus-extension.yaml @@ -16,14 +16,12 @@ # --- -name: "Elastichsearch Rest" +name: "Elasticsearch Rest" description: "The elasticsearch component is used for interfacing with ElasticSearch server using REST API." metadata: - unlisted: true keywords: - - "monitoring" - - "search" - guide: "https://camel.apache.org/components/latest/elasticsearch-rest-component.html" + - "camel" + - "elasticsearch" + guide: "https://quarkus.io/guides/camel" categories: - "integration" - status: "preview" diff --git a/extensions/pom.xml b/extensions/pom.xml index 349a5cb..c3057c5 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -70,6 +70,7 @@ <module>dataformat</module> <module>direct</module> <module>dozer</module> + <module>elasticsearch-rest</module> <module>endpointdsl</module> <module>exec</module> <module>fhir</module> diff --git a/extensions-jvm/elasticsearch-rest/integration-test/pom.xml b/integration-tests/elasticsearch-rest/pom.xml similarity index 62% rename from extensions-jvm/elasticsearch-rest/integration-test/pom.xml rename to integration-tests/elasticsearch-rest/pom.xml index a68c5f8..58ce959 100644 --- a/extensions-jvm/elasticsearch-rest/integration-test/pom.xml +++ b/integration-tests/elasticsearch-rest/pom.xml @@ -21,13 +21,13 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.camel.quarkus</groupId> - <artifactId>camel-quarkus-elasticsearch-rest-parent</artifactId> + <artifactId>camel-quarkus-integration-tests</artifactId> <version>1.1.0-SNAPSHOT</version> </parent> - <artifactId>camel-quarkus-elasticsearch-rest-integration-test</artifactId> - <name>Camel Quarkus :: Elastichsearch Rest :: Integration Test</name> - <description>Integration tests for Camel Quarkus Elastichsearch Rest extension</description> + <artifactId>camel-quarkus-integration-test-elasticsearch-rest</artifactId> + <name>Camel Quarkus :: Integration Test :: Elasticsearch Rest</name> + <description>Integration tests for Camel Quarkus Elasticsearch Rest extension</description> <properties> <!-- mvnd, a.k.a. Maven Daemon: https://github.com/gnodet/mvnd --> @@ -39,6 +39,18 @@ <mvnd.builder.rule>camel-quarkus-elasticsearch-rest-deployment,camel-quarkus-support-policy-deployment</mvnd.builder.rule> </properties> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-bom-test</artifactId> + <version>${project.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + <dependencies> <dependency> <groupId>org.apache.camel.quarkus</groupId> @@ -60,6 +72,11 @@ <artifactId>rest-assured</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-integration-testcontainers-support</artifactId> + <scope>test</scope> + </dependency> </dependencies> <build> @@ -77,4 +94,34 @@ </plugin> </plugins> </build> + + <profiles> + <profile> + <id>native</id> + <activation> + <property> + <name>native</name> + </property> + </activation> + <properties> + <quarkus.package.type>native</quarkus.package.type> + </properties> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> </project> diff --git a/integration-tests/elasticsearch-rest/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestResource.java b/integration-tests/elasticsearch-rest/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestResource.java new file mode 100644 index 0000000..9d2b1b3 --- /dev/null +++ b/integration-tests/elasticsearch-rest/src/main/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestResource.java @@ -0,0 +1,99 @@ +/* + * 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.elasticsearch.rest.it; + +import java.net.URI; +import java.util.HashMap; +import java.util.Map; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PATCH; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.elasticsearch.ElasticsearchConstants; +import org.elasticsearch.action.get.GetResponse; + +@Path("/elasticsearch-rest") +@ApplicationScoped +public class ElasticsearchRestResource { + + @Inject + ProducerTemplate producerTemplate; + + @Path("/get") + @GET + @Produces(MediaType.TEXT_PLAIN) + public Response getData(@QueryParam("indexId") String indexId) throws Exception { + GetResponse response = producerTemplate + .requestBody("elasticsearch-rest://elasticsearch?operation=GetById&indexName=test", indexId, GetResponse.class); + + if (response.getSource() == null) { + return Response.status(404).build(); + } + return Response.ok().entity(response.getSource().get("test-key")).build(); + } + + @Path("/index") + @POST + @Produces(MediaType.TEXT_PLAIN) + public Response indexData(String indexValue) throws Exception { + Map<String, String> data = createIndexedData(indexValue); + String indexId = producerTemplate.requestBody("elasticsearch-rest://elasticsearch?operation=Index&indexName=test", data, + String.class); + return Response + .created(new URI("https://camel.apache.org/")) + .entity(indexId) + .build(); + } + + @Path("/update") + @PATCH + @Produces(MediaType.TEXT_PLAIN) + public Response updateData(@QueryParam("indexId") String indexId, String indexValue) throws Exception { + Map<String, String> data = createIndexedData(indexValue); + Map<String, Object> headers = new HashMap<>(); + headers.put(ElasticsearchConstants.PARAM_INDEX_ID, indexId); + + producerTemplate.requestBodyAndHeaders("elasticsearch-rest://elasticsearch?operation=Update&indexName=test", data, + headers); + return Response.ok().build(); + } + + @Path("/delete") + @DELETE + @Produces(MediaType.TEXT_PLAIN) + public Response deleteData(@QueryParam("indexId") String indexId) throws Exception { + producerTemplate.requestBody("elasticsearch-rest://elasticsearch?operation=Delete&indexName=test", indexId); + return Response.noContent().build(); + } + + private Map<String, String> createIndexedData(String indexValue) { + Map<String, String> map = new HashMap<>(); + map.put("test-key", indexValue); + return map; + } + +} diff --git a/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticSearchTestResource.java b/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticSearchTestResource.java new file mode 100644 index 0000000..e2b42ee --- /dev/null +++ b/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticSearchTestResource.java @@ -0,0 +1,70 @@ +/* + * 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.elasticsearch.rest.it; + +import java.util.Map; + +import io.quarkus.test.common.QuarkusTestResourceLifecycleManager; +import org.apache.camel.util.CollectionHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.TestcontainersConfiguration; + +public class ElasticSearchTestResource implements QuarkusTestResourceLifecycleManager { + + private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchTestResource.class); + private static final String ELASTICSEARCH_IMAGE = "elasticsearch:7.6.1"; + private static final int ELASTICSEARCH_PORT = 9200; + + private GenericContainer container; + + @Override + public Map<String, String> start() { + LOGGER.info(TestcontainersConfiguration.getInstance().toString()); + + try { + container = new GenericContainer(ELASTICSEARCH_IMAGE) + .withExposedPorts(ELASTICSEARCH_PORT) + .withLogConsumer(new Slf4jLogConsumer(LOGGER)) + .withEnv("discovery.type", "single-node") + .waitingFor(Wait.forListeningPort()); + + container.start(); + + return CollectionHelper.mapOf( + "camel.component.elasticsearch-rest.host-addresses", + String.format("localhost:%s", container.getMappedPort(ELASTICSEARCH_PORT))); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void stop() { + try { + if (container != null) { + container.stop(); + } + } catch (Exception e) { + // Ignored + } + } +} diff --git a/extensions-jvm/elasticsearch-rest/integration-test/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestTest.java b/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestIT.java similarity index 68% rename from extensions-jvm/elasticsearch-rest/integration-test/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestTest.java rename to integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestIT.java index 5d47065..688634c 100644 --- a/extensions-jvm/elasticsearch-rest/integration-test/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestTest.java +++ b/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestIT.java @@ -16,19 +16,8 @@ */ package org.apache.camel.quarkus.component.elasticsearch.rest.it; -import io.quarkus.test.junit.QuarkusTest; -import io.restassured.RestAssured; -import org.junit.jupiter.api.Test; - -@QuarkusTest -class ElasticsearchRestTest { - - @Test - public void loadComponentElasticsearchRest() { - /* A simple autogenerated test */ - RestAssured.get("/elasticsearch-rest/load/component/elasticsearch-rest") - .then() - .statusCode(200); - } +import io.quarkus.test.junit.NativeImageTest; +@NativeImageTest +class ElasticsearchRestIT extends ElasticsearchRestTest { } diff --git a/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestTest.java b/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestTest.java new file mode 100644 index 0000000..ba1f296 --- /dev/null +++ b/integration-tests/elasticsearch-rest/src/test/java/org/apache/camel/quarkus/component/elasticsearch/rest/it/ElasticsearchRestTest.java @@ -0,0 +1,86 @@ +/* + * 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.elasticsearch.rest.it; + +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; + +import static org.hamcrest.Matchers.is; + +@QuarkusTest +@QuarkusTestResource(ElasticSearchTestResource.class) +class ElasticsearchRestTest { + + @Test + public void loadComponentElasticsearchRest() { + String message = "Hello Camel Quarkus Elasticsearch"; + + // Index data + String indexId = RestAssured.given() + .contentType(ContentType.TEXT) + .body(message) + .post("/elasticsearch-rest/index") + .then() + .statusCode(201) + .extract() + .body() + .asString(); + + // Retrieve indexed data + RestAssured.given() + .queryParam("indexId", indexId) + .get("/elasticsearch-rest/get") + .then() + .statusCode(200) + .body(is(message)); + + // Update indexed data + String updatedMessage = message + " Updated"; + RestAssured.given() + .contentType(ContentType.TEXT) + .queryParam("indexId", indexId) + .body(updatedMessage) + .patch("/elasticsearch-rest/update") + .then() + .statusCode(200); + + // Verify updated data + RestAssured.given() + .queryParam("indexId", indexId) + .get("/elasticsearch-rest/get") + .then() + .statusCode(200) + .body(is(updatedMessage)); + + // Delete indexed data + RestAssured.given() + .queryParam("indexId", indexId) + .delete("/elasticsearch-rest/delete") + .then() + .statusCode(204); + + // Verify data deleted + RestAssured.given() + .queryParam("indexId", indexId) + .get("/elasticsearch-rest/get") + .then() + .statusCode(404); + } +} diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 1c182af..20d489a 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -74,6 +74,7 @@ <module>dataformat</module> <module>dataformats-json</module> <module>dozer</module> + <module>elasticsearch-rest</module> <module>exec</module> <module>fhir</module> <module>file</module> diff --git a/pom.xml b/pom.xml index 2981063..e015688 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ <awssdk1-swf-libs.version>1.11.22</awssdk1-swf-libs.version> <awssdk2.version>2.11.5</awssdk2.version> <camel.version>3.2.0</camel.version> + <elasticsearch.version>7.6.1</elasticsearch.version> <freemarker.version>2.3.30</freemarker.version> <github-api.version>1.111</github-api.version> <google-http-client.version>1.22.0</google-http-client.version> diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml index 44d29e7..0e1d047 100644 --- a/poms/bom/pom.xml +++ b/poms/bom/pom.xml @@ -455,6 +455,12 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-elasticsearch-rest</artifactId> <version>${camel.version}</version> + <exclusions> + <exclusion> + <groupId>org.elasticsearch.client</groupId> + <artifactId>*</artifactId> + </exclusion> + </exclusions> </dependency> <dependency> <groupId>org.apache.camel</groupId> @@ -2063,6 +2069,11 @@ <version>${stax2.version}</version> </dependency> <dependency> + <groupId>org.elasticsearch.client</groupId> + <artifactId>elasticsearch-rest-high-level-client</artifactId> + <version>${elasticsearch.version}</version> + </dependency> + <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>${javassist.version}</version> diff --git a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java index d49004d..9e17590 100644 --- a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java +++ b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java @@ -127,6 +127,11 @@ public class UpdateDocExtensionsListMojo extends AbstractMojo { final DataFormatModel delegate = (DataFormatModel) m.delegate; delegate.setName("bindy"); } + // TODO: Fix typo in ES REST metadata. Remove for Camel 3.3.0. + if (m.delegate.getName().equals("elasticsearch-rest")) { + final ComponentModel delegate = (ComponentModel) m.delegate; + delegate.setTitle("Elasticsearch Rest"); + } }) .sorted() .collect(Collectors.toList());