This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 084f689  Camel-avro-rpc introduction of SPI for the HTTP server (#5714)
084f689 is described below

commit 084f689827494bd8a6f89675ee8f6f3a89209109
Author: JiriOndrusek <ondrusek.j...@gmail.com>
AuthorDate: Tue Jun 22 06:21:17 2021 +0200

    Camel-avro-rpc introduction of SPI for the HTTP server (#5714)
---
 bom/camel-bom/pom.xml                              | 25 +++++++
 .../apache/camel/catalog/docs/avro-component.adoc  |  7 ++
 .../{ => camel-avro-rpc-component}/pom.xml         | 87 ++++++++++++++--------
 .../component/avro/AvroComponentConfigurer.java    |  0
 .../component/avro/AvroEndpointConfigurer.java     |  0
 .../component/avro/AvroEndpointUriFactory.java     |  0
 .../services/org/apache/camel/component.properties |  0
 .../services/org/apache/camel/component/avro       |  0
 .../org/apache/camel/configurer/avro-component     |  0
 .../org/apache/camel/configurer/avro-endpoint      |  0
 .../org/apache/camel/urifactory/avro-endpoint      |  0
 .../org/apache/camel/component/avro/avro.json      |  0
 .../src/main/docs/avro-component.adoc              |  7 ++
 .../apache/camel/component/avro/AvroComponent.java |  0
 .../component/avro/AvroComponentException.java     |  0
 .../camel/component/avro/AvroConfiguration.java    |  4 +-
 .../apache/camel/component/avro/AvroConstants.java |  0
 .../apache/camel/component/avro/AvroConsumer.java  |  0
 .../apache/camel/component/avro/AvroEndpoint.java  |  0
 .../camel/component/avro/AvroHttpEndpoint.java     |  0
 .../camel/component/avro/AvroHttpProducer.java     |  0
 .../apache/camel/component/avro/AvroListener.java  | 26 +++++--
 .../camel/component/avro/AvroNettyEndpoint.java    |  0
 .../camel/component/avro/AvroNettyProducer.java    |  0
 .../apache/camel/component/avro/AvroProducer.java  |  0
 .../camel/component/avro/AvroReflectRequestor.java |  0
 .../camel/component/avro/AvroReflectResponder.java |  0
 .../component/avro/AvroSpecificRequestor.java      |  0
 .../component/avro/AvroSpecificResponder.java      |  0
 .../apache/camel/component/avro/AvroTransport.java |  0
 .../src/test/avro/test.avpr                        |  0
 .../java/org/apache/camel/avro/generated/Key.java  |  0
 .../camel/avro/generated/KeyValueProtocol.java     |  0
 .../org/apache/camel/avro/generated/Value.java     |  0
 .../camel/avro/impl/KeyValueProtocolImpl.java      |  0
 .../java/org/apache/camel/avro/test/TestPojo.java  |  0
 .../org/apache/camel/avro/test/TestReflection.java |  0
 .../apache/camel/avro/test/TestReflectionImpl.java |  0
 .../component/avro/AvroConsumerTestSupport.java    |  0
 .../camel/component/avro/AvroHttpConsumerTest.java |  0
 .../camel/component/avro/AvroHttpProducerTest.java |  0
 .../component/avro/AvroHttpSpringProducerTest.java |  0
 .../component/avro/AvroNettyConsumerTest.java      |  0
 .../component/avro/AvroNettyProducerTest.java      |  0
 .../avro/AvroNettySpringConsumerTest.java          |  0
 .../avro/AvroNettySpringProducerTest.java          |  0
 .../component/avro/AvroProducerTestSupport.java    |  0
 .../camel/component/avro/AvroSettingsTest.java     |  0
 .../camel/component/avro/AvroTestSupport.java      |  0
 .../camel/component/avro/ConsumerRouteType.java    |  0
 .../camel/component/avro/ProducerRouteType.java    |  0
 .../component/avro/processors/GetProcessor.java    |  0
 .../component/avro/processors/PutProcessor.java    |  0
 .../avro/processors/ReflectionInOnlyProcessor.java |  0
 .../avro/processors/ReflectionInOutProcessor.java  |  0
 .../src/test/resources/log4j2.properties           |  0
 .../camel/component/avro/avro-http-consumer.xml    |  0
 .../camel/component/avro/avro-http-producer.xml    |  0
 .../camel/component/avro/avro-netty-producer.xml   |  0
 .../camel/component/avro/netty-consumer/base.xml   |  0
 .../component/avro/netty-consumer/reflect.xml      |  0
 .../component/avro/netty-consumer/specific.xml     |  0
 .../avro/netty-consumer/specificProcessor.xml      |  0
 .../avro/netty-consumer/specificProcessorWrong.xml |  0
 .../camel-avro-rpc/camel-avro-rpc-jetty/pom.xml    | 56 ++++++++++++++
 .../org/apache/camel/avro-rpc-http-server-factory  |  2 +
 .../services/org/apache/camel/other.properties     |  7 ++
 .../src/generated/resources/avro-rpc-jetty.json    | 14 ++++
 .../avro/spi/JettyHttpServerFactory.java}          | 27 ++++---
 .../camel-avro-rpc/camel-avro-rpc-spi/pom.xml      | 48 ++++++++++++
 .../services/org/apache/camel/other.properties     |  7 ++
 .../src/generated/resources/avro-rpc-spi.json      | 14 ++++
 .../avro/spi/AvroRpcHttpServerFactory.java}        | 24 +++---
 components/camel-avro-rpc/pom.xml                  | 84 +++------------------
 core/camel-allcomponents/pom.xml                   | 12 +++
 .../modules/ROOT/pages/avro-component.adoc         |  9 ++-
 parent/pom.xml                                     | 25 +++++++
 .../camel/maven/packaging/PrepareCatalogMojo.java  |  3 +
 78 files changed, 344 insertions(+), 144 deletions(-)

diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 8ad33f9..e963472 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -133,6 +133,31 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-rpc-component</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-rpc-jetty</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-rpc-parent</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-rpc-spi</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-spi</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-aws-parent</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/avro-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/avro-component.adoc
index 24265ef..7b75fe5 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/avro-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/avro-component.adoc
@@ -277,4 +277,11 @@ Value value filled as array contents.
 
 This component is not supported in Karaf.
 
+== Avro via HTTP SPI
+
+The Avro RPC component offers the 
`org.apache.camel.component.avro.spi.AvroRpcHttpServerFactory` service provider 
interface (SPI) so that various platforms can provide their own implementation 
based on their native HTTP server.
+
+The default implementation available in `org.apache.camel:camel-avro-jetty` is 
based on `org.apache.avro:avro-ipc-jetty`.
+
+
 include::{page-component-version}@camel-spring-boot::page$avro-starter.adoc[]
diff --git a/components/camel-avro-rpc/pom.xml 
b/components/camel-avro-rpc/camel-avro-rpc-component/pom.xml
similarity index 58%
copy from components/camel-avro-rpc/pom.xml
copy to components/camel-avro-rpc/camel-avro-rpc-component/pom.xml
index fe51e5e..126ac0b 100644
--- a/components/camel-avro-rpc/pom.xml
+++ b/components/camel-avro-rpc/camel-avro-rpc-component/pom.xml
@@ -24,7 +24,7 @@
 
     <parent>
         <groupId>org.apache.camel</groupId>
-        <artifactId>components</artifactId>
+        <artifactId>camel-avro-rpc-parent</artifactId>
         <version>3.11.0-SNAPSHOT</version>
     </parent>
 
@@ -33,34 +33,6 @@
     <name>Camel :: Avro RPC</name>
     <description>Camel Avro  RPC component</description>
 
-    <properties>
-    </properties>
-
-    <build>
-        <plugins>
-            <!--plugin>
-                <groupId>org.apache.avro</groupId>
-                <artifactId>avro-maven-plugin</artifactId>
-                <version>${avro-version}</version>
-                <executions>
-                    <execution>
-                        <id>schemas</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>schema</goal>
-                            <goal>protocol</goal>
-                            <goal>idl-protocol</goal>
-                        </goals>
-                        <configuration>
-                            
<sourceDirectory>${project.basedir}/src/test/avro/</sourceDirectory>
-                            
<outputDirectory>${project.basedir}/src/test/java/</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin-->
-        </plugins>
-    </build>
-
     <dependencies>
         <dependency>
             <groupId>org.apache.camel</groupId>
@@ -76,9 +48,8 @@
             <version>${avro-ipc-netty-version}</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.avro</groupId>
-            <artifactId>avro-ipc-jetty</artifactId>
-            <version>${avro-ipc-jetty-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-avro-rpc-jetty</artifactId>
         </dependency>
 
         <!-- testing -->
@@ -99,4 +70,56 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <!-- we need to generate additional configurer classes -->
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-configurer</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>generate-configurer</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>generate-test-protocol</id>
+            <activation>
+                <activeByDefault>false</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.avro</groupId>
+                        <artifactId>avro-maven-plugin</artifactId>
+                        <version>${avro-version}</version>
+                        <executions>
+                            <execution>
+                                <id>schemas</id>
+                                <phase>generate-sources</phase>
+                                <goals>
+                                    <goal>schema</goal>
+                                    <goal>protocol</goal>
+                                    <goal>idl-protocol</goal>
+                                </goals>
+                                <configuration>
+                                    
<sourceDirectory>${project.basedir}/src/test/avro/</sourceDirectory>
+                                    
<outputDirectory>${project.basedir}/src/test/java/</outputDirectory>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
 </project>
\ No newline at end of file
diff --git 
a/components/camel-avro-rpc/src/generated/java/org/apache/camel/component/avro/AvroComponentConfigurer.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/java/org/apache/camel/component/avro/AvroComponentConfigurer.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/java/org/apache/camel/component/avro/AvroComponentConfigurer.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/java/org/apache/camel/component/avro/AvroComponentConfigurer.java
diff --git 
a/components/camel-avro-rpc/src/generated/java/org/apache/camel/component/avro/AvroEndpointConfigurer.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/java/org/apache/camel/component/avro/AvroEndpointConfigurer.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/java/org/apache/camel/component/avro/AvroEndpointConfigurer.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/java/org/apache/camel/component/avro/AvroEndpointConfigurer.java
diff --git 
a/components/camel-avro-rpc/src/generated/java/org/apache/camel/component/avro/AvroEndpointUriFactory.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/java/org/apache/camel/component/avro/AvroEndpointUriFactory.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/java/org/apache/camel/component/avro/AvroEndpointUriFactory.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/java/org/apache/camel/component/avro/AvroEndpointUriFactory.java
diff --git 
a/components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/component.properties
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/component.properties
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/component.properties
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/component.properties
diff --git 
a/components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/component/avro
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/component/avro
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/component/avro
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/component/avro
diff --git 
a/components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-component
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-component
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-component
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-component
diff --git 
a/components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-endpoint
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-endpoint
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-endpoint
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/configurer/avro-endpoint
diff --git 
a/components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/urifactory/avro-endpoint
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/urifactory/avro-endpoint
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/resources/META-INF/services/org/apache/camel/urifactory/avro-endpoint
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/services/org/apache/camel/urifactory/avro-endpoint
diff --git 
a/components/camel-avro-rpc/src/generated/resources/org/apache/camel/component/avro/avro.json
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/org/apache/camel/component/avro/avro.json
similarity index 100%
rename from 
components/camel-avro-rpc/src/generated/resources/org/apache/camel/component/avro/avro.json
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/org/apache/camel/component/avro/avro.json
diff --git a/components/camel-avro-rpc/src/main/docs/avro-component.adoc 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
similarity index 97%
rename from components/camel-avro-rpc/src/main/docs/avro-component.adoc
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
index 24265ef..7b75fe5 100644
--- a/components/camel-avro-rpc/src/main/docs/avro-component.adoc
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
@@ -277,4 +277,11 @@ Value value filled as array contents.
 
 This component is not supported in Karaf.
 
+== Avro via HTTP SPI
+
+The Avro RPC component offers the 
`org.apache.camel.component.avro.spi.AvroRpcHttpServerFactory` service provider 
interface (SPI) so that various platforms can provide their own implementation 
based on their native HTTP server.
+
+The default implementation available in `org.apache.camel:camel-avro-jetty` is 
based on `org.apache.avro:avro-ipc-jetty`.
+
+
 include::{page-component-version}@camel-spring-boot::page$avro-starter.adoc[]
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroComponent.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroComponent.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroComponent.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroComponent.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroComponentException.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroComponentException.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroComponentException.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroComponentException.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConfiguration.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConfiguration.java
similarity index 97%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConfiguration.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConfiguration.java
index 56e010a..b9054b1 100644
--- 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConfiguration.java
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConfiguration.java
@@ -70,8 +70,8 @@ public class AvroConfiguration implements Cloneable {
         setHost(uri.getHost());
         setPort(uri.getPort());
 
-        if ((uri.getPath() != null)
-                && (StringUtils.indexOf(uri.getPath(), 
AVRO_MESSAGE_NAME_SEPARATOR) != -1)) {
+        if (uri.getPath() != null
+                && StringUtils.indexOf(uri.getPath(), 
AVRO_MESSAGE_NAME_SEPARATOR) != -1) {
             String path = StringUtils.substringAfter(uri.getPath(), 
AVRO_MESSAGE_NAME_SEPARATOR);
             if (!path.contains(AVRO_MESSAGE_NAME_SEPARATOR)) {
                 setMessageName(path);
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConstants.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConstants.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConstants.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConstants.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConsumer.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConsumer.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroConsumer.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConsumer.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroHttpEndpoint.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroHttpEndpoint.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroHttpEndpoint.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroHttpEndpoint.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroHttpProducer.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroHttpProducer.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroHttpProducer.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroHttpProducer.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroListener.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
similarity index 87%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroListener.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
index b38bed1..734fc0b 100644
--- 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroListener.java
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroListener.java
@@ -23,15 +23,19 @@ import java.util.concurrent.ConcurrentMap;
 import org.apache.avro.Protocol;
 import org.apache.avro.Schema;
 import org.apache.avro.ipc.Server;
-import org.apache.avro.ipc.jetty.HttpServer;
 import org.apache.avro.ipc.netty.NettyServer;
 import org.apache.avro.ipc.specific.SpecificResponder;
 import org.apache.avro.specific.SpecificData;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.component.avro.spi.AvroRpcHttpServerFactory;
+import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.commons.lang3.StringUtils;
-import org.eclipse.jetty.util.log.Log;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static 
org.apache.camel.component.avro.AvroConstants.AVRO_HTTP_TRANSPORT;
 import static 
org.apache.camel.component.avro.AvroConstants.AVRO_NETTY_TRANSPORT;
@@ -42,12 +46,14 @@ import static 
org.apache.camel.component.avro.AvroConstants.AVRO_NETTY_TRANSPORT
  */
 public class AvroListener {
 
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(AvroListener.class);
+
     private ConcurrentMap<String, AvroConsumer> consumerRegistry = new 
ConcurrentHashMap<>();
     private AvroConsumer defaultConsumer;
     private final Server server;
 
     public AvroListener(AvroEndpoint endpoint) throws Exception {
-        server = initAndStartServer(endpoint.getConfiguration());
+        server = initAndStartServer(endpoint.getConfiguration(), 
endpoint.getCamelContext());
     }
 
     /**
@@ -58,7 +64,7 @@ public class AvroListener {
      * @return                     Initialized and started server
      * @throws java.io.IOException
      */
-    private Server initAndStartServer(AvroConfiguration configuration) throws 
Exception {
+    private Server initAndStartServer(AvroConfiguration configuration, 
CamelContext camelContext) throws Exception {
         SpecificResponder responder;
         Server server;
 
@@ -69,7 +75,13 @@ public class AvroListener {
         }
 
         if 
(AVRO_HTTP_TRANSPORT.equalsIgnoreCase(configuration.getTransport().name())) {
-            server = new HttpServer(responder, configuration.getPort());
+            AvroRpcHttpServerFactory factory = camelContext
+                    .adapt(ExtendedCamelContext.class)
+                    .getFactoryFinder(FactoryFinder.DEFAULT_PATH)
+                    .newInstance("avro-rpc-http-server-factory", 
AvroRpcHttpServerFactory.class)
+                    .orElseThrow(() -> new IllegalStateException(
+                            "AvroRpcHttpServerFactory is neither set on this 
endpoint neither found in Camel Registry or FactoryFinder."));
+            server = factory.create(responder, configuration.getPort());
         } else if 
(AVRO_NETTY_TRANSPORT.equalsIgnoreCase(configuration.getTransport().name())) {
             server = new NettyServer(responder, new 
InetSocketAddress(configuration.getHost(), configuration.getPort()));
         } else {
@@ -115,13 +127,13 @@ public class AvroListener {
     public boolean unregister(String messageName) {
         if (!StringUtils.isEmpty(messageName)) {
             if (consumerRegistry.remove(messageName) == null) {
-                Log.getLog().warn("Consumer with message name {} was already 
unregistered.", messageName);
+                LOGGER.warn("Consumer with message name {} was already 
unregistered.", messageName);
             }
         } else {
             defaultConsumer = null;
         }
 
-        if ((defaultConsumer == null) && (consumerRegistry.isEmpty())) {
+        if (defaultConsumer == null && consumerRegistry.isEmpty()) {
             if (server != null) {
                 server.close();
             }
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroNettyEndpoint.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroNettyEndpoint.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroNettyEndpoint.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroNettyEndpoint.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroNettyProducer.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroNettyProducer.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroNettyProducer.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroNettyProducer.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroProducer.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroProducer.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroProducer.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroProducer.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroReflectRequestor.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroReflectRequestor.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroReflectRequestor.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroReflectRequestor.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroReflectResponder.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroReflectResponder.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroReflectResponder.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroReflectResponder.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificRequestor.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroSpecificRequestor.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificRequestor.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroSpecificRequestor.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
similarity index 100%
copy from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
copy to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroTransport.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroTransport.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroTransport.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroTransport.java
diff --git a/components/camel-avro-rpc/src/test/avro/test.avpr 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/avro/test.avpr
similarity index 100%
rename from components/camel-avro-rpc/src/test/avro/test.avpr
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/avro/test.avpr
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/generated/Key.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/generated/Key.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/generated/Key.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/generated/Key.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/generated/KeyValueProtocol.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/generated/KeyValueProtocol.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/generated/KeyValueProtocol.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/generated/KeyValueProtocol.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/generated/Value.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/generated/Value.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/generated/Value.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/generated/Value.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/impl/KeyValueProtocolImpl.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/impl/KeyValueProtocolImpl.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/impl/KeyValueProtocolImpl.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/impl/KeyValueProtocolImpl.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestPojo.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/test/TestPojo.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestPojo.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/test/TestPojo.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflection.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/test/TestReflection.java
similarity index 100%
copy from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflection.java
copy to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/test/TestReflection.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflectionImpl.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/test/TestReflectionImpl.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflectionImpl.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/avro/test/TestReflectionImpl.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroConsumerTestSupport.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroConsumerTestSupport.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroConsumerTestSupport.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroConsumerTestSupport.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroHttpConsumerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroHttpConsumerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroHttpConsumerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroHttpConsumerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroHttpProducerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroHttpProducerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroHttpProducerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroHttpProducerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroHttpSpringProducerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroHttpSpringProducerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroHttpSpringProducerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroHttpSpringProducerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettyConsumerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettyConsumerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettyConsumerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettyConsumerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettyProducerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettyProducerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettyProducerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettyProducerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettySpringConsumerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettySpringConsumerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettySpringConsumerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettySpringConsumerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroNettySpringProducerTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroProducerTestSupport.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroProducerTestSupport.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroProducerTestSupport.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroProducerTestSupport.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroSettingsTest.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroSettingsTest.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroSettingsTest.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroSettingsTest.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/AvroTestSupport.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/ConsumerRouteType.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/ConsumerRouteType.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/ConsumerRouteType.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/ConsumerRouteType.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/ProducerRouteType.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/ProducerRouteType.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/ProducerRouteType.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/ProducerRouteType.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/GetProcessor.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/GetProcessor.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/GetProcessor.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/GetProcessor.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/PutProcessor.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/PutProcessor.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/PutProcessor.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/PutProcessor.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOnlyProcessor.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOnlyProcessor.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOnlyProcessor.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOnlyProcessor.java
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOutProcessor.java
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOutProcessor.java
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOutProcessor.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/java/org/apache/camel/component/avro/processors/ReflectionInOutProcessor.java
diff --git a/components/camel-avro-rpc/src/test/resources/log4j2.properties 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/log4j2.properties
similarity index 100%
rename from components/camel-avro-rpc/src/test/resources/log4j2.properties
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/log4j2.properties
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/avro-http-consumer.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/avro-http-consumer.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/avro-http-consumer.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/avro-http-consumer.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/avro-http-producer.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/avro-http-producer.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/avro-http-producer.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/avro-http-producer.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/avro-netty-producer.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/avro-netty-producer.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/avro-netty-producer.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/avro-netty-producer.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/base.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/base.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/base.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/base.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/reflect.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/reflect.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/reflect.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/reflect.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/specific.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/specific.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/specific.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/specific.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessor.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessor.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessor.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessor.xml
diff --git 
a/components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessorWrong.xml
 
b/components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessorWrong.xml
similarity index 100%
rename from 
components/camel-avro-rpc/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessorWrong.xml
rename to 
components/camel-avro-rpc/camel-avro-rpc-component/src/test/resources/org/apache/camel/component/avro/netty-consumer/specificProcessorWrong.xml
diff --git a/components/camel-avro-rpc/camel-avro-rpc-jetty/pom.xml 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/pom.xml
new file mode 100644
index 0000000..bd08547
--- /dev/null
+++ b/components/camel-avro-rpc/camel-avro-rpc-jetty/pom.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-rpc-parent</artifactId>
+        <version>3.11.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-avro-rpc-jetty</artifactId>
+    <name>Camel :: Avro RPC :: Jetty</name>
+    <description>Camel Avro  RPC Jetty</description>
+
+
+    <properties>
+        <firstVersion>3.11.0</firstVersion>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-avro-rpc-spi</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.avro</groupId>
+            <artifactId>avro-ipc-jetty</artifactId>
+            <version>${avro-ipc-jetty-version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/META-INF/services/org/apache/camel/avro-rpc-http-server-factory
 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/META-INF/services/org/apache/camel/avro-rpc-http-server-factory
new file mode 100644
index 0000000..e4a6e26
--- /dev/null
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/META-INF/services/org/apache/camel/avro-rpc-http-server-factory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.avro.spi.JettyHttpServerFactory
diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/META-INF/services/org/apache/camel/other.properties
 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000..8d0b6a4
--- /dev/null
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=avro-rpc-jetty
+groupId=org.apache.camel
+artifactId=camel-avro-rpc-jetty
+version=3.11.0-SNAPSHOT
+projectName=Camel :: Avro RPC :: Jetty
+projectDescription=Camel Avro  RPC Jetty
diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/avro-rpc-jetty.json
 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/avro-rpc-jetty.json
new file mode 100644
index 0000000..773562a
--- /dev/null
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/generated/resources/avro-rpc-jetty.json
@@ -0,0 +1,14 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "avro-rpc-jetty",
+    "title": "Avro Rpc Jetty",
+    "description": "Camel Avro  RPC Jetty",
+    "deprecated": false,
+    "firstVersion": "3.11.0",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-avro-rpc-jetty",
+    "version": "3.11.0-SNAPSHOT"
+  }
+}
diff --git 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/main/java/org/apache/camel/component/avro/spi/JettyHttpServerFactory.java
similarity index 59%
rename from 
components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-jetty/src/main/java/org/apache/camel/component/avro/spi/JettyHttpServerFactory.java
index 037387d..0e428fc 100644
--- 
a/components/camel-avro-rpc/src/main/java/org/apache/camel/component/avro/AvroSpecificResponder.java
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-jetty/src/main/java/org/apache/camel/component/avro/spi/JettyHttpServerFactory.java
@@ -14,23 +14,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.avro;
+package org.apache.camel.component.avro.spi;
 
-import org.apache.avro.Protocol;
-import org.apache.avro.ipc.specific.SpecificResponder;
-import org.apache.avro.specific.SpecificData;
-
-public class AvroSpecificResponder extends SpecificResponder {
-    private AvroListener listener;
+import java.io.IOException;
 
-    public AvroSpecificResponder(Protocol protocol, AvroListener listener) {
-        super(protocol, listener);
-        this.listener = listener;
-    }
+import org.apache.avro.ipc.Server;
+import org.apache.avro.ipc.jetty.HttpServer;
+import org.apache.avro.ipc.specific.SpecificResponder;
 
+/**
+ * Default implementation of Avro via http, which is based on Jetty http 
server. For more details see dependency
+ * org.apache.avro:avro-ipc-jetty.
+ */
+@org.apache.camel.spi.annotations.JdkService("avro-rpc-http-server-factory")
+public class JettyHttpServerFactory implements AvroRpcHttpServerFactory {
     @Override
-    public Object respond(Protocol.Message message, Object request) throws 
Exception {
-        return listener.respond(message, request, SpecificData.get());
+    public Server create(SpecificResponder responder, int port) throws 
IOException {
+        return new HttpServer(responder, port);
     }
-
 }
diff --git a/components/camel-avro-rpc/camel-avro-rpc-spi/pom.xml 
b/components/camel-avro-rpc/camel-avro-rpc-spi/pom.xml
new file mode 100644
index 0000000..9c7a8f4
--- /dev/null
+++ b/components/camel-avro-rpc/camel-avro-rpc-spi/pom.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-avro-rpc-parent</artifactId>
+        <version>3.11.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-avro-rpc-spi</artifactId>
+    <name>Camel :: Avro RPC :: Spi</name>
+    <description>Camel Avro  RPC spi</description>
+
+
+    <properties>
+        <firstVersion>3.11.0</firstVersion>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.avro</groupId>
+            <artifactId>avro-ipc-jetty</artifactId>
+            <version>${avro-ipc-jetty-version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-spi/src/generated/resources/META-INF/services/org/apache/camel/other.properties
 
b/components/camel-avro-rpc/camel-avro-rpc-spi/src/generated/resources/META-INF/services/org/apache/camel/other.properties
new file mode 100644
index 0000000..24cd6fb
--- /dev/null
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-spi/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+name=avro-rpc-spi
+groupId=org.apache.camel
+artifactId=camel-avro-rpc-spi
+version=3.11.0-SNAPSHOT
+projectName=Camel :: Avro RPC :: Spi
+projectDescription=Camel Avro  RPC spi
diff --git 
a/components/camel-avro-rpc/camel-avro-rpc-spi/src/generated/resources/avro-rpc-spi.json
 
b/components/camel-avro-rpc/camel-avro-rpc-spi/src/generated/resources/avro-rpc-spi.json
new file mode 100644
index 0000000..d029820
--- /dev/null
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-spi/src/generated/resources/avro-rpc-spi.json
@@ -0,0 +1,14 @@
+{
+  "other": {
+    "kind": "other",
+    "name": "avro-rpc-spi",
+    "title": "Avro Rpc Spi",
+    "description": "Camel Avro  RPC spi",
+    "deprecated": false,
+    "firstVersion": "3.11.0",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-avro-rpc-spi",
+    "version": "3.11.0-SNAPSHOT"
+  }
+}
diff --git 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflection.java
 
b/components/camel-avro-rpc/camel-avro-rpc-spi/src/main/java/org/apache/camel/component/avro/spi/AvroRpcHttpServerFactory.java
similarity index 66%
rename from 
components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflection.java
rename to 
components/camel-avro-rpc/camel-avro-rpc-spi/src/main/java/org/apache/camel/component/avro/spi/AvroRpcHttpServerFactory.java
index d190942..c53fde1 100644
--- 
a/components/camel-avro-rpc/src/test/java/org/apache/camel/avro/test/TestReflection.java
+++ 
b/components/camel-avro-rpc/camel-avro-rpc-spi/src/main/java/org/apache/camel/component/avro/spi/AvroRpcHttpServerFactory.java
@@ -14,22 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.avro.test;
+package org.apache.camel.component.avro.spi;
 
-public interface TestReflection {
+import org.apache.avro.ipc.Server;
+import org.apache.avro.ipc.specific.SpecificResponder;
 
-    String getName();
-
-    void setName(String name);
-
-    int getAge();
-
-    void setAge(int age);
-
-    int increaseAge(int age);
-
-    void setTestPojo(TestPojo testPojo);
-
-    TestPojo getTestPojo();
+/**
+ * SPI used by consumer for Avro via http. By default Jetty implementation is 
used. @see
+ * org.apache.camel.component.avro.spi.JettyHttpServerFactory
+ */
+public interface AvroRpcHttpServerFactory {
 
+    Server create(SpecificResponder responder, int port) throws Exception;
 }
diff --git a/components/camel-avro-rpc/pom.xml 
b/components/camel-avro-rpc/pom.xml
index fe51e5e..cd7a986 100644
--- a/components/camel-avro-rpc/pom.xml
+++ b/components/camel-avro-rpc/pom.xml
@@ -17,9 +17,7 @@
     limitations under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -28,75 +26,15 @@
         <version>3.11.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>camel-avro-rpc</artifactId>
-    <packaging>jar</packaging>
-    <name>Camel :: Avro RPC</name>
-    <description>Camel Avro  RPC component</description>
+    <artifactId>camel-avro-rpc-parent</artifactId>
+    <packaging>pom</packaging>
 
-    <properties>
-    </properties>
+    <name>Camel :: Avro RPC :: Parent</name>
+    <description>Camel Avro  RPC parent</description>
 
-    <build>
-        <plugins>
-            <!--plugin>
-                <groupId>org.apache.avro</groupId>
-                <artifactId>avro-maven-plugin</artifactId>
-                <version>${avro-version}</version>
-                <executions>
-                    <execution>
-                        <id>schemas</id>
-                        <phase>generate-sources</phase>
-                        <goals>
-                            <goal>schema</goal>
-                            <goal>protocol</goal>
-                            <goal>idl-protocol</goal>
-                        </goals>
-                        <configuration>
-                            
<sourceDirectory>${project.basedir}/src/test/avro/</sourceDirectory>
-                            
<outputDirectory>${project.basedir}/src/test/java/</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin-->
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-support</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avro</groupId>
-            <artifactId>avro</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avro</groupId>
-            <artifactId>avro-ipc-netty</artifactId>
-            <version>${avro-ipc-netty-version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.avro</groupId>
-            <artifactId>avro-ipc-jetty</artifactId>
-            <version>${avro-ipc-jetty-version}</version>
-        </dependency>
-
-        <!-- testing -->
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-test-junit5</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-spring-xml</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-slf4j-impl</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-</project>
\ No newline at end of file
+    <modules>
+        <module>camel-avro-rpc-spi</module>
+        <module>camel-avro-rpc-jetty</module>
+        <module>camel-avro-rpc-component</module>
+    </modules>
+</project>
diff --git a/core/camel-allcomponents/pom.xml b/core/camel-allcomponents/pom.xml
index 28845f8..c998dbe 100644
--- a/core/camel-allcomponents/pom.xml
+++ b/core/camel-allcomponents/pom.xml
@@ -99,10 +99,22 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-avro-rpc-jetty</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-avro-rpc-spi</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
                        <artifactId>camel-avro-rpc</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-avro-spi</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
                        <artifactId>camel-avro</artifactId>
                </dependency>
                <dependency>
diff --git a/docs/components/modules/ROOT/pages/avro-component.adoc 
b/docs/components/modules/ROOT/pages/avro-component.adoc
index 5ba7745..db5157f 100644
--- a/docs/components/modules/ROOT/pages/avro-component.adoc
+++ b/docs/components/modules/ROOT/pages/avro-component.adoc
@@ -1,7 +1,7 @@
 [[avro-component]]
 = Avro RPC Component
 //THIS FILE IS COPIED: EDIT THE SOURCE FILE:
-:page-source: components/camel-avro-rpc/src/main/docs/avro-component.adoc
+:page-source: 
components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
 :docTitle: Avro RPC
 :artifactId: camel-avro-rpc
 :description: Produce or consume Apache Avro RPC services.
@@ -279,4 +279,11 @@ Value value filled as array contents.
 
 This component is not supported in Karaf.
 
+== Avro via HTTP SPI
+
+The Avro RPC component offers the 
`org.apache.camel.component.avro.spi.AvroRpcHttpServerFactory` service provider 
interface (SPI) so that various platforms can provide their own implementation 
based on their native HTTP server.
+
+The default implementation available in `org.apache.camel:camel-avro-jetty` is 
based on `org.apache.avro:avro-ipc-jetty`.
+
+
 include::{page-component-version}@camel-spring-boot::page$avro-starter.adoc[]
diff --git a/parent/pom.xml b/parent/pom.xml
index 2b5ff7b..cd10c03 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -845,11 +845,36 @@
                        </dependency>
                        <dependency>
                                <groupId>org.apache.camel</groupId>
+                               
<artifactId>camel-avro-rpc-component</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.camel</groupId>
+                               <artifactId>camel-avro-rpc-jetty</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.camel</groupId>
+                               <artifactId>camel-avro-rpc-parent</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.camel</groupId>
+                               <artifactId>camel-avro-rpc-spi</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.camel</groupId>
                                <artifactId>camel-avro-rpc</artifactId>
                                <version>${project.version}</version>
                        </dependency>
                        <dependency>
                                <groupId>org.apache.camel</groupId>
+                               <artifactId>camel-avro-spi</artifactId>
+                               <version>${project.version}</version>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.camel</groupId>
                                <artifactId>camel-avro</artifactId>
                                <version>${project.version}</version>
                        </dependency>
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
index b21f929..ca71b51 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
@@ -580,6 +580,7 @@ public class PrepareCatalogMojo extends AbstractMojo {
                 case "camel-http-common":
                 case "camel-jetty-common":
                 case "camel-as2":
+                case "camel-avro-rpc":
                 case "camel-olingo2":
                 case "camel-olingo4":
                 case "camel-servicenow":
@@ -1176,6 +1177,8 @@ public class PrepareCatalogMojo extends AbstractMojo {
         switch (dir.getFileName().toString()) {
             case "camel-as2":
                 return 
Collections.singletonList(dir.resolve("camel-as2-component"));
+            case "camel-avro-rpc":
+                return 
Collections.singletonList(dir.resolve("camel-avro-rpc-component"));
             case "camel-salesforce":
                 return 
Collections.singletonList(dir.resolve("camel-salesforce-component"));
             case "camel-olingo2":

Reply via email to