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

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


The following commit(s) were added to refs/heads/main by this push:
     new c41dac0970 Fix #3809 add reflections for all transports (#3892)
c41dac0970 is described below

commit c41dac09703b9f82717698a56de8e3ac7cfb85e4
Author: Amos Feng <[email protected]>
AuthorDate: Fri Jul 1 09:39:57 2022 +0800

    Fix #3809 add reflections for all transports (#3892)
---
 .../activemq/deployment/ActiveMQProcessor.java     | 41 ++++++++++++++++++++++
 .../activemq/it/ActiveMQTestResource.java          |  5 ++-
 2 files changed, 45 insertions(+), 1 deletion(-)

diff --git 
a/extensions/activemq/deployment/src/main/java/org/apache/camel/quarkus/component/activemq/deployment/ActiveMQProcessor.java
 
b/extensions/activemq/deployment/src/main/java/org/apache/camel/quarkus/component/activemq/deployment/ActiveMQProcessor.java
index 4464b028ff..83335feb82 100644
--- 
a/extensions/activemq/deployment/src/main/java/org/apache/camel/quarkus/component/activemq/deployment/ActiveMQProcessor.java
+++ 
b/extensions/activemq/deployment/src/main/java/org/apache/camel/quarkus/component/activemq/deployment/ActiveMQProcessor.java
@@ -22,16 +22,26 @@ import java.util.Properties;
 
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
 import 
io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import 
io.quarkus.deployment.builditem.nativeimage.RuntimeReinitializedClassBuildItem;
+import org.apache.activemq.transport.Transport;
+import org.apache.activemq.transport.discovery.DiscoveryAgent;
 import org.apache.activemq.util.IdGenerator;
+import org.apache.activemq.wireformat.WireFormatFactory;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexView;
 
 class ActiveMQProcessor {
 
     private static final String ACTIVEMQ_SERVICE_BASE = 
"META-INF/services/org/apache/activemq/";
+    private static final DotName TRANSPORT = 
DotName.createSimple(Transport.class.getName());
+    private static final DotName WIRE_FORMAT_FACTORY = 
DotName.createSimple(WireFormatFactory.class.getName());
+    private static final DotName DISCOVERY_AGENT = 
DotName.createSimple(DiscoveryAgent.class.getName());
     private static final String FEATURE = "camel-activemq";
 
     @BuildStep
@@ -47,6 +57,9 @@ class ActiveMQProcessor {
     @BuildStep
     ReflectiveClassBuildItem registerForReflection() {
         return new ReflectiveClassBuildItem(true, false,
+                "java.net.Socket",
+                "sun.security.ssl.SSLSocketImpl",
+                "org.apache.activemq.command.ConsumerInfo",
                 "org.apache.activemq.pool.PooledConnectionFactory",
                 "org.apache.commons.pool2.impl.DefaultEvictionPolicy",
                 "org.apache.activemq.openwire.v2.MarshallerFactory",
@@ -62,6 +75,26 @@ class ActiveMQProcessor {
                 "org.apache.activemq.openwire.v12.MarshallerFactory");
     }
 
+    @BuildStep
+    void addDependencies(BuildProducer<IndexDependencyBuildItem> 
indexDependency) {
+        indexDependency.produce(new 
IndexDependencyBuildItem("org.apache.activemq", "activemq-client"));
+    }
+
+    @BuildStep
+    ReflectiveClassBuildItem registerTransports(CombinedIndexBuildItem 
combinedIndex) {
+        return new ReflectiveClassBuildItem(true, false, 
getReflectiveClass(combinedIndex, TRANSPORT));
+    }
+
+    @BuildStep
+    ReflectiveClassBuildItem registerWireFormatFactory(CombinedIndexBuildItem 
combinedIndex) {
+        return new ReflectiveClassBuildItem(true, false, 
getReflectiveClass(combinedIndex, WIRE_FORMAT_FACTORY));
+    }
+
+    @BuildStep
+    ReflectiveClassBuildItem registerDiscoveryAgent(CombinedIndexBuildItem 
combinedIndex) {
+        return new ReflectiveClassBuildItem(true, false, 
getReflectiveClass(combinedIndex, DISCOVERY_AGENT));
+    }
+
     @BuildStep
     void registerServiceProviders(BuildProducer<ReflectiveClassBuildItem> 
reflectiveClass,
             BuildProducer<NativeImageResourceBuildItem> nativeImage) {
@@ -104,4 +137,12 @@ class ActiveMQProcessor {
             throw new IllegalStateException(e);
         }
     }
+
+    private String[] getReflectiveClass(CombinedIndexBuildItem combinedIndex, 
DotName ifName) {
+        IndexView index = combinedIndex.getIndex();
+        return index.getAllKnownImplementors(ifName)
+                .stream()
+                .map(classInfo -> classInfo.name().toString())
+                .toArray(String[]::new);
+    }
 }
diff --git 
a/integration-tests/activemq/src/test/java/org/apache/camel/quarkus/component/activemq/it/ActiveMQTestResource.java
 
b/integration-tests/activemq/src/test/java/org/apache/camel/quarkus/component/activemq/it/ActiveMQTestResource.java
index 009399dee7..17dd6eb0b0 100644
--- 
a/integration-tests/activemq/src/test/java/org/apache/camel/quarkus/component/activemq/it/ActiveMQTestResource.java
+++ 
b/integration-tests/activemq/src/test/java/org/apache/camel/quarkus/component/activemq/it/ActiveMQTestResource.java
@@ -50,7 +50,10 @@ public class ActiveMQTestResource implements 
QuarkusTestResourceLifecycleManager
 
             return Collections.singletonMap(
                     "camel.component.activemq.broker-url",
-                    String.format("tcp://%s:%d", 
container.getContainerIpAddress(), container.getMappedPort(TCP_PORT)));
+                    String.format(
+                            
"tcp://%s:%d?connectionTimeout=5000&tcpNoDelay=false&socket.OOBInline=false",
+                            container.getHost(),
+                            container.getMappedPort(TCP_PORT)));
         } catch (Exception e) {
             throw new RuntimeException(e);
         }

Reply via email to