This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 181d86bf89c6835a308f77e6b6d3801e72dcbea5 Author: Peter Palaga <[email protected]> AuthorDate: Fri Nov 20 11:39:58 2020 +0100 Protobuf dataformat native support #789 --- .../ROOT/pages/reference/extensions/protobuf.adoc | 37 +++++++++-- .../partials/reference/dataformats/protobuf.adoc | 6 +- extensions-jvm/pom.xml | 1 - extensions/pom.xml | 1 + .../protobuf/deployment/pom.xml | 6 ++ .../protobuf/deployment/ProtobufProcessor.java | 35 +++++++---- {extensions-jvm => extensions}/protobuf/pom.xml | 1 - .../protobuf/runtime/pom.xml | 2 +- .../runtime/src/main/doc/configuration.adoc | 25 ++++++++ .../main/resources/META-INF/quarkus-extension.yaml | 0 integration-tests/pom.xml | 1 + .../protobuf}/pom.xml | 73 +++++++++++----------- .../component/protobuf/it/ProtobufResource.java | 0 .../component/protobuf/it/ProtobufRoute.java | 0 .../protobuf}/src/main/proto/addressbook.proto | 0 .../quarkus/component/protobuf/it/ProtobufIT.java | 17 +---- .../component/protobuf/it/ProtobufTest.java | 0 tooling/scripts/test-categories.yaml | 1 + 18 files changed, 134 insertions(+), 72 deletions(-) diff --git a/docs/modules/ROOT/pages/reference/extensions/protobuf.adoc b/docs/modules/ROOT/pages/reference/extensions/protobuf.adoc index 01cba4b..78c4894 100644 --- a/docs/modules/ROOT/pages/reference/extensions/protobuf.adoc +++ b/docs/modules/ROOT/pages/reference/extensions/protobuf.adoc @@ -3,15 +3,15 @@ = Protobuf :page-aliases: extensions/protobuf.adoc :cq-artifact-id: camel-quarkus-protobuf -:cq-native-supported: false -:cq-status: Preview +:cq-native-supported: true +:cq-status: Stable :cq-description: Serialize and deserialize Java objects using Google's Protocol buffers. :cq-deprecated: false :cq-jvm-since: 1.0.0 -:cq-native-since: 1.0.0 +:cq-native-since: 1.5.0 [.badges] -[.badge-key]##JVM since##[.badge-supported]##1.0.0## [.badge-key]##Native##[.badge-unsupported]##unsupported## +[.badge-key]##JVM since##[.badge-supported]##1.0.0## [.badge-key]##Native since##[.badge-supported]##1.5.0## Serialize and deserialize Java objects using Google's Protocol buffers. @@ -32,3 +32,32 @@ Please refer to the above link for usage and configuration details. ---- Check the xref:user-guide/index.adoc[User guide] for more information about writing Camel Quarkus applications. + +== Additional Camel Quarkus configuration + +Use the `generate-code` goal of `quarkus-maven-plugin` to generate Java classes from your `*.proto` +service and message definitions stored in the `src/main/proto` directory: + +[source,xml] +---- +<build> + <plugins> + <plugin> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>generate-code</goal> + <goal>build</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> +</build> +---- + +You may want to check the https://github.com/apache/camel-quarkus/tree/master/integration-tests/protobuf[integration test] +in our source tree as an example. + diff --git a/docs/modules/ROOT/partials/reference/dataformats/protobuf.adoc b/docs/modules/ROOT/partials/reference/dataformats/protobuf.adoc index d18a245..7910b92 100644 --- a/docs/modules/ROOT/partials/reference/dataformats/protobuf.adoc +++ b/docs/modules/ROOT/partials/reference/dataformats/protobuf.adoc @@ -2,11 +2,11 @@ // This file was generated by camel-quarkus-maven-plugin:update-extension-doc-page :cq-artifact-id: camel-quarkus-protobuf :cq-artifact-id-base: protobuf -:cq-native-supported: false -:cq-status: Preview +:cq-native-supported: true +:cq-status: Stable :cq-deprecated: false :cq-jvm-since: 1.0.0 -:cq-native-since: 1.0.0 +:cq-native-since: 1.5.0 :cq-camel-part-name: protobuf :cq-camel-part-title: Protobuf :cq-camel-part-description: Serialize and deserialize Java objects using Google's Protocol buffers. diff --git a/extensions-jvm/pom.xml b/extensions-jvm/pom.xml index 094e3db..7c524d1 100644 --- a/extensions-jvm/pom.xml +++ b/extensions-jvm/pom.xml @@ -111,7 +111,6 @@ <module>openstack</module> <module>optaplanner</module> <module>printer</module> - <module>protobuf</module> <module>pubnub</module> <module>pulsar</module> <module>quickfix</module> diff --git a/extensions/pom.xml b/extensions/pom.xml index 5a26abe..4a4e92e 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -167,6 +167,7 @@ <module>pg-replication-slot</module> <module>pgevent</module> <module>platform-http</module> + <module>protobuf</module> <module>quartz</module> <module>qute</module> <module>rabbitmq</module> diff --git a/extensions-jvm/protobuf/deployment/pom.xml b/extensions/protobuf/deployment/pom.xml similarity index 94% rename from extensions-jvm/protobuf/deployment/pom.xml rename to extensions/protobuf/deployment/pom.xml index 9c5f686..4fb6c5b 100644 --- a/extensions-jvm/protobuf/deployment/pom.xml +++ b/extensions/protobuf/deployment/pom.xml @@ -38,6 +38,12 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-protobuf</artifactId> </dependency> + + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-grpc-codegen</artifactId> + </dependency> + </dependencies> <build> diff --git a/extensions-jvm/protobuf/deployment/src/main/java/org/apache/camel/quarkus/component/protobuf/deployment/ProtobufProcessor.java b/extensions/protobuf/deployment/src/main/java/org/apache/camel/quarkus/component/protobuf/deployment/ProtobufProcessor.java similarity index 53% rename from extensions-jvm/protobuf/deployment/src/main/java/org/apache/camel/quarkus/component/protobuf/deployment/ProtobufProcessor.java rename to extensions/protobuf/deployment/src/main/java/org/apache/camel/quarkus/component/protobuf/deployment/ProtobufProcessor.java index 0d0e1ae..ed00faf 100644 --- a/extensions-jvm/protobuf/deployment/src/main/java/org/apache/camel/quarkus/component/protobuf/deployment/ProtobufProcessor.java +++ b/extensions/protobuf/deployment/src/main/java/org/apache/camel/quarkus/component/protobuf/deployment/ProtobufProcessor.java @@ -16,31 +16,42 @@ */ package org.apache.camel.quarkus.component.protobuf.deployment; +import com.google.protobuf.GeneratedMessage; +import com.google.protobuf.GeneratedMessageV3; +import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.annotations.ExecutionTime; -import io.quarkus.deployment.annotations.Record; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; -import io.quarkus.deployment.pkg.steps.NativeBuild; -import org.apache.camel.quarkus.core.JvmOnlyRecorder; +import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import org.jboss.jandex.DotName; +import org.jboss.jandex.IndexView; import org.jboss.logging.Logger; class ProtobufProcessor { private static final Logger LOG = Logger.getLogger(ProtobufProcessor.class); private static final String FEATURE = "camel-protobuf"; + private static final DotName[] MESSAGE_CLASS_DOT_NAMES = new DotName[] { + DotName.createSimple(GeneratedMessageV3.class.getName()), + DotName.createSimple(GeneratedMessage.class.getName()) + }; @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 + @BuildStep + void reflectiveClasses(BuildProducer<ReflectiveClassBuildItem> reflectiveClasses, + CombinedIndexBuildItem combinedIndexBuildItem) { + + IndexView index = combinedIndexBuildItem.getIndex(); + for (DotName dotName : MESSAGE_CLASS_DOT_NAMES) { + index.getAllKnownSubclasses(dotName) + .stream() + .map(classInfo -> new ReflectiveClassBuildItem(true, false, classInfo.name().toString())) + .forEach(reflectiveClasses::produce); + } } + } diff --git a/extensions-jvm/protobuf/pom.xml b/extensions/protobuf/pom.xml similarity index 97% rename from extensions-jvm/protobuf/pom.xml rename to extensions/protobuf/pom.xml index 2380dad..b3f63dd 100644 --- a/extensions-jvm/protobuf/pom.xml +++ b/extensions/protobuf/pom.xml @@ -33,6 +33,5 @@ <modules> <module>deployment</module> <module>runtime</module> - <module>integration-test</module> </modules> </project> diff --git a/extensions-jvm/protobuf/runtime/pom.xml b/extensions/protobuf/runtime/pom.xml similarity index 98% rename from extensions-jvm/protobuf/runtime/pom.xml rename to extensions/protobuf/runtime/pom.xml index df3e512..c7e7b0d 100644 --- a/extensions-jvm/protobuf/runtime/pom.xml +++ b/extensions/protobuf/runtime/pom.xml @@ -31,7 +31,7 @@ <properties> <camel.quarkus.jvmSince>1.0.0</camel.quarkus.jvmSince> - <camel.quarkus.nativeSince>1.0.0</camel.quarkus.nativeSince> + <camel.quarkus.nativeSince>1.5.0</camel.quarkus.nativeSince> </properties> <dependencyManagement> diff --git a/extensions/protobuf/runtime/src/main/doc/configuration.adoc b/extensions/protobuf/runtime/src/main/doc/configuration.adoc new file mode 100644 index 0000000..9cb9285 --- /dev/null +++ b/extensions/protobuf/runtime/src/main/doc/configuration.adoc @@ -0,0 +1,25 @@ +Use the `generate-code` goal of `quarkus-maven-plugin` to generate Java classes from your `*.proto` +service and message definitions stored in the `src/main/proto` directory: + +[source,xml] +---- +<build> + <plugins> + <plugin> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>generate-code</goal> + <goal>build</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> +</build> +---- + +You may want to check the https://github.com/apache/camel-quarkus/tree/master/integration-tests/protobuf[integration test] +in our source tree as an example. diff --git a/extensions-jvm/protobuf/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/extensions/protobuf/runtime/src/main/resources/META-INF/quarkus-extension.yaml similarity index 100% rename from extensions-jvm/protobuf/runtime/src/main/resources/META-INF/quarkus-extension.yaml rename to extensions/protobuf/runtime/src/main/resources/META-INF/quarkus-extension.yaml diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 6ed7d39..9f83fb6 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -141,6 +141,7 @@ <module>pgevent</module> <module>platform-http</module> <module>platform-http-engine</module> + <module>protobuf</module> <module>quartz</module> <module>qute</module> <module>rabbitmq</module> diff --git a/extensions-jvm/protobuf/integration-test/pom.xml b/integration-tests/protobuf/pom.xml similarity index 56% rename from extensions-jvm/protobuf/integration-test/pom.xml rename to integration-tests/protobuf/pom.xml index 4051b16..99d5b3a 100644 --- a/extensions-jvm/protobuf/integration-test/pom.xml +++ b/integration-tests/protobuf/pom.xml @@ -21,25 +21,14 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.camel.quarkus</groupId> - <artifactId>camel-quarkus-build-parent-it</artifactId> + <artifactId>camel-quarkus-integration-tests</artifactId> <version>1.5.0-SNAPSHOT</version> - <relativePath>../../../poms/build-parent-it/pom.xml</relativePath> </parent> - <artifactId>camel-quarkus-protobuf-integration-test</artifactId> - <name>Camel Quarkus :: Protobuf :: Integration Test</name> + <artifactId>camel-quarkus-integration-test-protobuf</artifactId> + <name>Camel Quarkus :: Integration Tests :: Protobuf</name> <description>Integration tests for Camel Quarkus Protobuf extension</description> - <properties> - <!-- mvnd, a.k.a. Maven Daemon: https://github.com/mvndaemon/mvnd --> - <!-- The following rule tells mvnd to build the listed deployment modules before this module. --> - <!-- This is important because mvnd builds modules in parallel by default. The deployment modules are not --> - <!-- explicit dependencies of this module in the Maven sense, although they are required by the Quarkus Maven plugin. --> - <!-- Please update the rule whenever you change the dependencies of this module by running --> - <!-- mvn process-resources -Pformat from the root directory --> - <mvnd.builder.rule>camel-quarkus-protobuf-deployment</mvnd.builder.rule> - </properties> - <dependencies> <dependency> <groupId>org.apache.camel.quarkus</groupId> @@ -70,36 +59,48 @@ <build> <plugins> <plugin> - <groupId>kr.motd.maven</groupId> - <artifactId>os-maven-plugin</artifactId> - <executions> - <execution> - <phase>initialize</phase> - <goals> - <goal>detect</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.xolstice.maven.plugins</groupId> - <artifactId>protobuf-maven-plugin</artifactId> - <extensions>true</extensions> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> + <id>quarkus-generate-code</id> <goals> - <goal>compile</goal> + <goal>generate-code</goal> </goals> <phase>generate-sources</phase> - <configuration> - <protocArtifact> - com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} - </protocArtifact> - <checkStaleness>true</checkStaleness> - </configuration> </execution> </executions> </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/extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufResource.java b/integration-tests/protobuf/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufResource.java similarity index 100% rename from extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufResource.java rename to integration-tests/protobuf/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufResource.java diff --git a/extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java b/integration-tests/protobuf/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java similarity index 100% copy from extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java copy to integration-tests/protobuf/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java diff --git a/extensions-jvm/protobuf/integration-test/src/main/proto/addressbook.proto b/integration-tests/protobuf/src/main/proto/addressbook.proto similarity index 100% rename from extensions-jvm/protobuf/integration-test/src/main/proto/addressbook.proto rename to integration-tests/protobuf/src/main/proto/addressbook.proto diff --git a/extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java b/integration-tests/protobuf/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufIT.java similarity index 63% rename from extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java rename to integration-tests/protobuf/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufIT.java index f74d60e..9f84c2a 100644 --- a/extensions-jvm/protobuf/integration-test/src/main/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufRoute.java +++ b/integration-tests/protobuf/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufIT.java @@ -16,20 +16,9 @@ */ package org.apache.camel.quarkus.component.protobuf.it; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.quarkus.component.protobuf.it.model.AddressBookProtos.Person; +import io.quarkus.test.junit.NativeImageTest; -public class ProtobufRoute extends RouteBuilder { +@NativeImageTest +class ProtobufIT extends ProtobufTest { - @Override - public void configure() throws Exception { - from("direct:protobuf-marshal") - .marshal() - .protobuf(Person.class.getName()); - - from("direct:protobuf-unmarshal") - .unmarshal() - .protobuf(Person.class.getName()); - - } } diff --git a/extensions-jvm/protobuf/integration-test/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufTest.java b/integration-tests/protobuf/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufTest.java similarity index 100% rename from extensions-jvm/protobuf/integration-test/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufTest.java rename to integration-tests/protobuf/src/test/java/org/apache/camel/quarkus/component/protobuf/it/ProtobufTest.java diff --git a/tooling/scripts/test-categories.yaml b/tooling/scripts/test-categories.yaml index 3355be6..b60127d 100644 --- a/tooling/scripts/test-categories.yaml +++ b/tooling/scripts/test-categories.yaml @@ -26,6 +26,7 @@ cloud: - consul - elasticsearch-rest - grpc + - protobuf - smallrye-reactive-messaging core-main-validation: - core
