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 eb5b6ab9219 CAMEL-11780: camel-amqp improve option handling (#16125)
eb5b6ab9219 is described below

commit eb5b6ab9219f42382562ac76ea4b3d059fb966c8
Author: Jono Morris <j...@apache.org>
AuthorDate: Thu Oct 31 08:14:49 2024 +1300

    CAMEL-11780: camel-amqp improve option handling (#16125)
    
    * CAMEL-11780 initialize if any option provided
    
    * CAMEL-11780 generated changes
---
 .../org/apache/camel/catalog/components/amqp.json  |  8 +--
 .../component/amqp/AMQPComponentConfigurer.java    | 16 ++---
 .../org/apache/camel/component/amqp/amqp.json      |  8 +--
 .../camel-amqp/src/main/docs/amqp-component.adoc   | 11 +++-
 .../apache/camel/component/amqp/AMQPComponent.java | 54 +++++++--------
 .../camel/component/amqp/AMQPConfigTest.java       | 76 +++++++++++++++++++++-
 .../component/dsl/AmqpComponentBuilderFactory.java | 26 +++-----
 7 files changed, 130 insertions(+), 69 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/amqp.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/amqp.json
index 29d7998d6db..301b1fbabd7 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/amqp.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/amqp.json
@@ -28,18 +28,18 @@
     "connectionFactory": { "index": 1, "kind": "property", "displayName": 
"Connection Factory", "group": "common", "label": "", "required": false, 
"type": "object", "javaType": "jakarta.jms.ConnectionFactory", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "The connection factory to be use. A connection 
factory must be configured either on the componen [...]
     "disableReplyTo": { "index": 2, "kind": "property", "displayName": 
"Disable Reply To", "group": "common", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Specifies whether Camel ignores the JMSReplyTo 
header in messages. If true, Camel does not send a r [...]
     "durableSubscriptionName": { "index": 3, "kind": "property", 
"displayName": "Durable Subscription Name", "group": "common", "label": "", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "The durable subscriber name for specifying 
durable topic subscriptions. The clientId option must [...]
-    "host": { "index": 4, "kind": "property", "displayName": "Host", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "localhost", "description": "The host name or IP address of the 
computer that hosts the AMQP Broker." },
+    "host": { "index": 4, "kind": "property", "displayName": "Host", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "The host name or IP address of the computer that hosts the AMQP 
Broker." },
     "includeAmqpAnnotations": { "index": 5, "kind": "property", "displayName": 
"Include AMQP Annotations", "group": "common", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to include AMQP annotations when mapping from 
AMQP to Camel Message. Setting this to true maps AMQP message annotations that 
contain a JMS_AMQP_MA_ prefix to messag [...]
     "jmsMessageType": { "index": 6, "kind": "property", "displayName": "Jms 
Message Type", "group": "common", "label": "", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.jms.JmsMessageType", "enum": 
[ "Bytes", "Map", "Object", "Stream", "Text" ], "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Allows you to force the use o [...]
     "keyStoreLocation": { "index": 7, "kind": "property", "displayName": "Key 
Store Location", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The SSL keystore location." },
     "keyStoreType": { "index": 8, "kind": "property", "displayName": "Key 
Store Type", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "JKS", "description": "The SSL keystore 
type." },
-    "port": { "index": 9, "kind": "property", "displayName": "Port", "group": 
"common", "label": "", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 5672, 
"description": "The port number on which the AMPQ Broker listens." },
+    "port": { "index": 9, "kind": "property", "displayName": "Port", "group": 
"common", "label": "", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"description": "The port number on which the AMPQ Broker listens." },
     "replyTo": { "index": 10, "kind": "property", "displayName": "Reply To", 
"group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Provides an explicit ReplyTo destination 
(overrides any incoming value of Message.getJMSReplyTo() in consumer)." },
     "testConnectionOnStartup": { "index": 11, "kind": "property", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.jms.JmsConfiguration", 
"configurationField": "configuration", "description": "Specifies whether to 
test the connection on startup. This ensures that when Cam [...]
     "trustStoreLocation": { "index": 12, "kind": "property", "displayName": 
"Trust Store Location", "group": "common", "label": "", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The SSL truststore 
location." },
     "trustStoreType": { "index": 13, "kind": "property", "displayName": "Trust 
Store Type", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "JKS", "description": "The SSL 
truststore type." },
-    "useSsl": { "index": 14, "kind": "property", "displayName": "Use Ssl", 
"group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Whether to enable SSL when 
connecting to the AMQP Broker." },
-    "useTopicPrefix": { "index": 15, "kind": "property", "displayName": "Use 
Topic Prefix", "group": "common", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to configure 
topics with a topic:\/\/ prefix." },
+    "useSsl": { "index": 14, "kind": "property", "displayName": "Use Ssl", 
"group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "description": "Whether to enable SSL when connecting to the 
AMQP Broker." },
+    "useTopicPrefix": { "index": 15, "kind": "property", "displayName": "Use 
Topic Prefix", "group": "common", "label": "", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "description": "Whether to configure topics with a 
topic:\/\/ prefix." },
     "acknowledgementModeName": { "index": 16, "kind": "property", 
"displayName": "Acknowledgement Mode Name", "group": "consumer", "label": 
"consumer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "SESSION_TRANSACTED", "CLIENT_ACKNOWLEDGE", 
"AUTO_ACKNOWLEDGE", "DUPS_OK_ACKNOWLEDGE" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "AUTO_ACKNOWLEDGE", 
"configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "conf 
[...]
     "artemisConsumerPriority": { "index": 17, "kind": "property", 
"displayName": "Artemis Consumer Priority", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Consumer priorities allow you to ensure that 
high priority consumers receive messages while they  [...]
     "asyncConsumer": { "index": 18, "kind": "property", "displayName": "Async 
Consumer", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Whether the JmsConsumer processes the Exchange 
asynchronously. If enabled then the JmsConsu [...]
diff --git 
a/components/camel-amqp/src/generated/java/org/apache/camel/component/amqp/AMQPComponentConfigurer.java
 
b/components/camel-amqp/src/generated/java/org/apache/camel/component/amqp/AMQPComponentConfigurer.java
index a05416e70c5..9f6202050c6 100644
--- 
a/components/camel-amqp/src/generated/java/org/apache/camel/component/amqp/AMQPComponentConfigurer.java
+++ 
b/components/camel-amqp/src/generated/java/org/apache/camel/component/amqp/AMQPComponentConfigurer.java
@@ -32,7 +32,7 @@ public class AMQPComponentConfigurer extends 
JmsComponentConfigurer implements G
         case "keyStorePassword": 
target.setKeyStorePassword(property(camelContext, java.lang.String.class, 
value)); return true;
         case "keystoretype":
         case "keyStoreType": target.setKeyStoreType(property(camelContext, 
java.lang.String.class, value)); return true;
-        case "port": target.setPort(property(camelContext, int.class, value)); 
return true;
+        case "port": target.setPort(property(camelContext, 
java.lang.Integer.class, value)); return true;
         case "truststorelocation":
         case "trustStoreLocation": 
target.setTrustStoreLocation(property(camelContext, java.lang.String.class, 
value)); return true;
         case "truststorepassword":
@@ -40,9 +40,9 @@ public class AMQPComponentConfigurer extends 
JmsComponentConfigurer implements G
         case "truststoretype":
         case "trustStoreType": target.setTrustStoreType(property(camelContext, 
java.lang.String.class, value)); return true;
         case "usessl":
-        case "useSsl": target.setUseSsl(property(camelContext, boolean.class, 
value)); return true;
+        case "useSsl": target.setUseSsl(property(camelContext, 
java.lang.Boolean.class, value)); return true;
         case "usetopicprefix":
-        case "useTopicPrefix": target.setUseTopicPrefix(property(camelContext, 
boolean.class, value)); return true;
+        case "useTopicPrefix": target.setUseTopicPrefix(property(camelContext, 
java.lang.Boolean.class, value)); return true;
         default: return super.configure(camelContext, obj, name, value, 
ignoreCase);
         }
     }
@@ -59,7 +59,7 @@ public class AMQPComponentConfigurer extends 
JmsComponentConfigurer implements G
         case "keyStorePassword": return java.lang.String.class;
         case "keystoretype":
         case "keyStoreType": return java.lang.String.class;
-        case "port": return int.class;
+        case "port": return java.lang.Integer.class;
         case "truststorelocation":
         case "trustStoreLocation": return java.lang.String.class;
         case "truststorepassword":
@@ -67,9 +67,9 @@ public class AMQPComponentConfigurer extends 
JmsComponentConfigurer implements G
         case "truststoretype":
         case "trustStoreType": return java.lang.String.class;
         case "usessl":
-        case "useSsl": return boolean.class;
+        case "useSsl": return java.lang.Boolean.class;
         case "usetopicprefix":
-        case "useTopicPrefix": return boolean.class;
+        case "useTopicPrefix": return java.lang.Boolean.class;
         default: return super.getOptionType(name, ignoreCase);
         }
     }
@@ -95,9 +95,9 @@ public class AMQPComponentConfigurer extends 
JmsComponentConfigurer implements G
         case "truststoretype":
         case "trustStoreType": return target.getTrustStoreType();
         case "usessl":
-        case "useSsl": return target.isUseSsl();
+        case "useSsl": return target.getUseSsl();
         case "usetopicprefix":
-        case "useTopicPrefix": return target.isUseTopicPrefix();
+        case "useTopicPrefix": return target.getUseTopicPrefix();
         default: return super.getOptionValue(obj, name, ignoreCase);
         }
     }
diff --git 
a/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
 
b/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
index 29d7998d6db..301b1fbabd7 100644
--- 
a/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
+++ 
b/components/camel-amqp/src/generated/resources/META-INF/org/apache/camel/component/amqp/amqp.json
@@ -28,18 +28,18 @@
     "connectionFactory": { "index": 1, "kind": "property", "displayName": 
"Connection Factory", "group": "common", "label": "", "required": false, 
"type": "object", "javaType": "jakarta.jms.ConnectionFactory", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "The connection factory to be use. A connection 
factory must be configured either on the componen [...]
     "disableReplyTo": { "index": 2, "kind": "property", "displayName": 
"Disable Reply To", "group": "common", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Specifies whether Camel ignores the JMSReplyTo 
header in messages. If true, Camel does not send a r [...]
     "durableSubscriptionName": { "index": 3, "kind": "property", 
"displayName": "Durable Subscription Name", "group": "common", "label": "", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "The durable subscriber name for specifying 
durable topic subscriptions. The clientId option must [...]
-    "host": { "index": 4, "kind": "property", "displayName": "Host", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "localhost", "description": "The host name or IP address of the 
computer that hosts the AMQP Broker." },
+    "host": { "index": 4, "kind": "property", "displayName": "Host", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "The host name or IP address of the computer that hosts the AMQP 
Broker." },
     "includeAmqpAnnotations": { "index": 5, "kind": "property", "displayName": 
"Include AMQP Annotations", "group": "common", "label": "", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to include AMQP annotations when mapping from 
AMQP to Camel Message. Setting this to true maps AMQP message annotations that 
contain a JMS_AMQP_MA_ prefix to messag [...]
     "jmsMessageType": { "index": 6, "kind": "property", "displayName": "Jms 
Message Type", "group": "common", "label": "", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.jms.JmsMessageType", "enum": 
[ "Bytes", "Map", "Object", "Stream", "Text" ], "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Allows you to force the use o [...]
     "keyStoreLocation": { "index": 7, "kind": "property", "displayName": "Key 
Store Location", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "description": "The SSL keystore location." },
     "keyStoreType": { "index": 8, "kind": "property", "displayName": "Key 
Store Type", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "JKS", "description": "The SSL keystore 
type." },
-    "port": { "index": 9, "kind": "property", "displayName": "Port", "group": 
"common", "label": "", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 5672, 
"description": "The port number on which the AMPQ Broker listens." },
+    "port": { "index": 9, "kind": "property", "displayName": "Port", "group": 
"common", "label": "", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"description": "The port number on which the AMPQ Broker listens." },
     "replyTo": { "index": 10, "kind": "property", "displayName": "Reply To", 
"group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Provides an explicit ReplyTo destination 
(overrides any incoming value of Message.getJMSReplyTo() in consumer)." },
     "testConnectionOnStartup": { "index": 11, "kind": "property", 
"displayName": "Test Connection On Startup", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.jms.JmsConfiguration", 
"configurationField": "configuration", "description": "Specifies whether to 
test the connection on startup. This ensures that when Cam [...]
     "trustStoreLocation": { "index": 12, "kind": "property", "displayName": 
"Trust Store Location", "group": "common", "label": "", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "The SSL truststore 
location." },
     "trustStoreType": { "index": 13, "kind": "property", "displayName": "Trust 
Store Type", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "JKS", "description": "The SSL 
truststore type." },
-    "useSsl": { "index": 14, "kind": "property", "displayName": "Use Ssl", 
"group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Whether to enable SSL when 
connecting to the AMQP Broker." },
-    "useTopicPrefix": { "index": 15, "kind": "property", "displayName": "Use 
Topic Prefix", "group": "common", "label": "", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to configure 
topics with a topic:\/\/ prefix." },
+    "useSsl": { "index": 14, "kind": "property", "displayName": "Use Ssl", 
"group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "description": "Whether to enable SSL when connecting to the 
AMQP Broker." },
+    "useTopicPrefix": { "index": 15, "kind": "property", "displayName": "Use 
Topic Prefix", "group": "common", "label": "", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "description": "Whether to configure topics with a 
topic:\/\/ prefix." },
     "acknowledgementModeName": { "index": 16, "kind": "property", 
"displayName": "Acknowledgement Mode Name", "group": "consumer", "label": 
"consumer", "required": false, "type": "string", "javaType": 
"java.lang.String", "enum": [ "SESSION_TRANSACTED", "CLIENT_ACKNOWLEDGE", 
"AUTO_ACKNOWLEDGE", "DUPS_OK_ACKNOWLEDGE" ], "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "AUTO_ACKNOWLEDGE", 
"configurationClass": "org.apache.camel.component.jms.JmsConfiguration", "conf 
[...]
     "artemisConsumerPriority": { "index": 17, "kind": "property", 
"displayName": "Artemis Consumer Priority", "group": "consumer", "label": 
"consumer", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Consumer priorities allow you to ensure that 
high priority consumers receive messages while they  [...]
     "asyncConsumer": { "index": 18, "kind": "property", "displayName": "Async 
Consumer", "group": "consumer", "label": "consumer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.jms.JmsConfiguration", "configurationField": 
"configuration", "description": "Whether the JmsConsumer processes the Exchange 
asynchronously. If enabled then the JmsConsu [...]
diff --git a/components/camel-amqp/src/main/docs/amqp-component.adoc 
b/components/camel-amqp/src/main/docs/amqp-component.adoc
index c87d6f5fc13..759d8276e2b 100644
--- a/components/camel-amqp/src/main/docs/amqp-component.adoc
+++ b/components/camel-amqp/src/main/docs/amqp-component.adoc
@@ -83,12 +83,13 @@ AMQPComponent amqp = 
AMQPComponent.amqpComponent("amqp://localhost:5672");
 AMQPComponent authorizedAmqp = 
AMQPComponent.amqpComponent("amqp://localhost:5672", "user", "password");
 ----
 
-Alternatively, configure the AMQP Component using the available options for 
SSL, authentication,
-and AMQP Broker host/port.
+Alternatively, the AMQP Component can be initialized by providing one or more 
of the available options for
+configuring SSL, authentication, and AMQP Broker host and port.
 
 *SSL configuration*
 
-The component can be configured to connect to an AMQP broker using SSL, for 
example:
+The component can be configured to connect to an AMQP broker using SSL by 
setting the
+`useSsl` option and providing keystore and truststore details, for example:
 
 [source,java]
 ----
@@ -124,6 +125,10 @@ amqpComponent.setHost("remoteHost");
 amqpComponent.setPort(5555);
 ----
 
+If `host` or `port` options have not been provided and the component is 
initialized using one or more of the other available
+options the host on the AMQP JMSConnectionFactory URI is set to 'localhost' if 
not provided, and the port is set to '5672'
+if not provided.
+
 *Spring AMQP connection details auto-configuration*
 
 [source,java]
diff --git 
a/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPComponent.java
 
b/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPComponent.java
index 9c4c61fca7b..a8302e018ee 100644
--- 
a/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPComponent.java
+++ 
b/components/camel-amqp/src/main/java/org/apache/camel/component/amqp/AMQPComponent.java
@@ -40,15 +40,14 @@ public class AMQPComponent extends JmsComponent {
     public static final String AMQP_DEFAULT_HOST = "localhost";
     public static final int AMQP_DEFAULT_PORT = 5672;
 
-    @Metadata(defaultValue = "localhost",
-              description = "The host name or IP address of the computer that 
hosts the AMQP Broker.")
-    private String host = AMQP_DEFAULT_HOST;
-    @Metadata(defaultValue = "5672", description = "The port number on which 
the AMPQ Broker listens.")
-    private int port = AMQP_DEFAULT_PORT;
-    @Metadata(defaultValue = "true", description = "Whether to configure 
topics with a `topic://` prefix.")
-    private boolean useTopicPrefix = true;
+    @Metadata(description = "The host name or IP address of the computer that 
hosts the AMQP Broker.")
+    private String host;
+    @Metadata(description = "The port number on which the AMPQ Broker 
listens.")
+    private Integer port;
+    @Metadata(description = "Whether to configure topics with a `topic://` 
prefix.")
+    private Boolean useTopicPrefix;
     @Metadata(description = "Whether to enable SSL when connecting to the AMQP 
Broker.")
-    private boolean useSsl;
+    private Boolean useSsl;
     @Metadata(description = "The SSL keystore location.")
     private String keyStoreLocation;
     @Metadata(defaultValue = "JKS", description = "The SSL keystore type.")
@@ -98,21 +97,22 @@ public class AMQPComponent extends JmsComponent {
 
     @Override
     protected void doInit() throws Exception {
-        if (useConfig()) {
+        if (host != null || port != null || getUsername() != null || 
getPassword() != null || useTopicPrefix != null
+                || useSsl != null) {
             StringBuilder sb = new StringBuilder();
-            sb.append(useSsl ? "amqps://" : "amqp://");
-            sb.append(host).append(":").append(port);
-            if (isUseSsl()) {
-                
sb.append("?transport.trustStoreLocation=").append(trustStoreLocation);
+            sb.append(useSsl == Boolean.TRUE ? "amqps://" : "amqp://");
+            sb.append(host == null ? AMQP_DEFAULT_HOST : 
host).append(":").append(port == null ? AMQP_DEFAULT_PORT : port);
+            if (useSsl == Boolean.TRUE) {
+                
sb.append("?transport.trustStoreLocation=").append(trustStoreLocation == null ? 
"" : trustStoreLocation);
                 sb.append("&transport.trustStoreType=").append(trustStoreType);
-                
sb.append("&transport.trustStorePassword=").append(trustStorePassword);
-                
sb.append("&transport.keyStoreLocation=").append(keyStoreLocation);
+                
sb.append("&transport.trustStorePassword=").append(trustStorePassword == null ? 
"" : trustStorePassword);
+                
sb.append("&transport.keyStoreLocation=").append(keyStoreLocation == null ? "" 
: keyStoreLocation);
                 sb.append("&transport.keyStoreType=").append(keyStoreType);
-                
sb.append("&transport.keyStorePassword=").append(keyStorePassword);
+                
sb.append("&transport.keyStorePassword=").append(keyStorePassword == null ? "" 
: keyStorePassword);
             }
             JmsConnectionFactory connectionFactory
                     = new JmsConnectionFactory(getUsername(), getPassword(), 
sb.toString());
-            if (useTopicPrefix) {
+            if (useTopicPrefix != Boolean.FALSE) {
                 connectionFactory.setTopicPrefix("topic://");
             }
             getConfiguration().setConnectionFactory(connectionFactory);
@@ -132,14 +132,6 @@ public class AMQPComponent extends JmsComponent {
         super.doInit();
     }
 
-    private boolean useConfig() {
-        if (!host.equals(AMQP_DEFAULT_HOST) || port != AMQP_DEFAULT_PORT || 
getUsername() != null ||
-                getPassword() != null || !useTopicPrefix || useSsl) {
-            return true;
-        }
-        return false;
-    }
-
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         JmsEndpoint endpoint = (JmsEndpoint) super.createEndpoint(uri, 
remaining, parameters);
@@ -197,27 +189,27 @@ public class AMQPComponent extends JmsComponent {
         this.host = host;
     }
 
-    public int getPort() {
+    public Integer getPort() {
         return port;
     }
 
-    public void setPort(int port) {
+    public void setPort(Integer port) {
         this.port = port;
     }
 
-    public boolean isUseTopicPrefix() {
+    public Boolean getUseTopicPrefix() {
         return useTopicPrefix;
     }
 
-    public void setUseTopicPrefix(boolean useTopicPrefix) {
+    public void setUseTopicPrefix(Boolean useTopicPrefix) {
         this.useTopicPrefix = useTopicPrefix;
     }
 
-    public boolean isUseSsl() {
+    public Boolean getUseSsl() {
         return useSsl;
     }
 
-    public void setUseSsl(boolean useSsl) {
+    public void setUseSsl(Boolean useSsl) {
         this.useSsl = useSsl;
     }
 
diff --git 
a/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPConfigTest.java
 
b/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPConfigTest.java
index 72c22556502..eefdce6f904 100644
--- 
a/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPConfigTest.java
+++ 
b/components/camel-amqp/src/test/java/org/apache/camel/component/amqp/AMQPConfigTest.java
@@ -26,6 +26,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.apache.camel.component.amqp.AMQPComponent.amqpComponent;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -49,8 +50,12 @@ public class AMQPConfigTest {
     @Test
     public void testConfiguredComponent() {
         AMQPComponent customizedComponent = 
contextExtension.getContext().getComponent("amqp-configured", 
AMQPComponent.class);
-        assertTrue(customizedComponent.getConnectionFactory() instanceof 
JmsConnectionFactory);
+        assertEquals("remotehost", customizedComponent.getHost());
+        assertEquals(5556, customizedComponent.getPort());
+        assertEquals("camel", customizedComponent.getUsername());
+        assertEquals("rider", customizedComponent.getPassword());
 
+        assertTrue(customizedComponent.getConnectionFactory() instanceof 
JmsConnectionFactory);
         JmsConnectionFactory connectionFactory = (JmsConnectionFactory) 
customizedComponent.getConnectionFactory();
         assertEquals("camel", connectionFactory.getUsername());
         assertEquals("rider", connectionFactory.getPassword());
@@ -61,8 +66,15 @@ public class AMQPConfigTest {
     @Test
     public void testConfiguredSslComponent() {
         AMQPComponent customizedComponent = 
contextExtension.getContext().getComponent("amqps-configured", 
AMQPComponent.class);
-        assertTrue(customizedComponent.getConnectionFactory() instanceof 
JmsConnectionFactory);
+        assertTrue(customizedComponent.getUseSsl());
+        assertEquals("server-ca-truststore.p12", 
customizedComponent.getTrustStoreLocation());
+        assertEquals("securepass", 
customizedComponent.getTrustStorePassword());
+        assertEquals("PKCS12", customizedComponent.getTrustStoreType());
+        assertEquals("server-keystore.p12", 
customizedComponent.getKeyStoreLocation());
+        assertEquals("securepass", customizedComponent.getKeyStorePassword());
+        assertEquals("PKCS12", customizedComponent.getKeyStoreType());
 
+        assertTrue(customizedComponent.getConnectionFactory() instanceof 
JmsConnectionFactory);
         JmsConnectionFactory connectionFactory = (JmsConnectionFactory) 
customizedComponent.getConnectionFactory();
         assertNull(connectionFactory.getUsername());
         assertNull(connectionFactory.getPassword());
@@ -72,6 +84,54 @@ public class AMQPConfigTest {
         assertEquals("topic://", connectionFactory.getTopicPrefix());
     }
 
+    @Test
+    public void testEnabledSslComponent() {
+        AMQPComponent amqpSslEnabledComponent
+                = contextExtension.getContext().getComponent("amqps-enabled", 
AMQPComponent.class);
+        assertTrue(amqpSslEnabledComponent.getUseSsl());
+        assertNull(amqpSslEnabledComponent.getTrustStoreLocation());
+        assertNull(amqpSslEnabledComponent.getTrustStorePassword());
+        assertEquals("JKS", amqpSslEnabledComponent.getTrustStoreType());
+        assertNull(amqpSslEnabledComponent.getKeyStoreLocation());
+        assertNull(amqpSslEnabledComponent.getKeyStorePassword());
+        assertEquals("JKS", amqpSslEnabledComponent.getKeyStoreType());
+
+        assertTrue(amqpSslEnabledComponent.getConnectionFactory() instanceof 
JmsConnectionFactory);
+        JmsConnectionFactory connectionFactory = (JmsConnectionFactory) 
amqpSslEnabledComponent.getConnectionFactory();
+        assertNull(connectionFactory.getUsername());
+        assertNull(connectionFactory.getPassword());
+        assertEquals(
+                
"amqps://localhost:5672?transport.trustStoreLocation=&transport.trustStoreType=JKS&transport.trustStorePassword=&transport.keyStoreLocation=&transport.keyStoreType=JKS&transport.keyStorePassword=",
+                connectionFactory.getRemoteURI());
+        assertEquals("topic://", connectionFactory.getTopicPrefix());
+    }
+
+    @Test
+    public void testComponentPort() {
+        AMQPComponent amqpComponent = 
contextExtension.getContext().getComponent("amqp-portonly", 
AMQPComponent.class);
+        assertEquals(5556, amqpComponent.getPort());
+
+        assertTrue(amqpComponent.getConnectionFactory() instanceof 
JmsConnectionFactory);
+        JmsConnectionFactory connectionFactory = (JmsConnectionFactory) 
amqpComponent.getConnectionFactory();
+        assertNull(connectionFactory.getUsername());
+        assertNull(connectionFactory.getPassword());
+        assertEquals("amqp://localhost:5556", 
connectionFactory.getRemoteURI());
+        assertEquals("topic://", connectionFactory.getTopicPrefix());
+    }
+
+    @Test
+    public void testNoTopicPrefix() {
+        AMQPComponent component = 
contextExtension.getContext().getComponent("amqp-notopicprefix", 
AMQPComponent.class);
+        assertFalse(component.getUseTopicPrefix());
+
+        assertTrue(component.getConnectionFactory() instanceof 
JmsConnectionFactory);
+        JmsConnectionFactory connectionFactory = (JmsConnectionFactory) 
component.getConnectionFactory();
+        assertNull(connectionFactory.getUsername());
+        assertNull(connectionFactory.getPassword());
+        assertEquals("amqp://localhost:5672", 
connectionFactory.getRemoteURI());
+        assertNull(connectionFactory.getTopicPrefix());
+    }
+
     @ContextFixture
     public void configureContext(CamelContext context) {
         context.addComponent("amqp", amqpComponent("amqp://remotehost:5556"));
@@ -92,5 +152,17 @@ public class AMQPConfigTest {
         amqpSslComponent.setKeyStorePassword("securepass");
         amqpSslComponent.setKeyStoreType("PKCS12");
         context.addComponent("amqps-configured", amqpSslComponent);
+
+        AMQPComponent amqpSslEnabledComponent = new AMQPComponent();
+        amqpSslEnabledComponent.setUseSsl(true);
+        context.addComponent("amqps-enabled", amqpSslEnabledComponent);
+
+        AMQPComponent amqpPortOnlyComponent = new AMQPComponent();
+        amqpPortOnlyComponent.setPort(5556);
+        context.addComponent("amqp-portonly", amqpPortOnlyComponent);
+
+        AMQPComponent amqpNoTopicPrefix = new AMQPComponent();
+        amqpNoTopicPrefix.setUseTopicPrefix(false);
+        context.addComponent("amqp-notopicprefix", amqpNoTopicPrefix);
     }
 }
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AmqpComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AmqpComponentBuilderFactory.java
index 2aa90ba090d..5dd24219338 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AmqpComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AmqpComponentBuilderFactory.java
@@ -125,14 +125,12 @@ public interface AmqpComponentBuilderFactory {
             return this;
         }
     
-        
         /**
          * The host name or IP address of the computer that hosts the AMQP
          * Broker.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
-         * Default: localhost
          * Group: common
          * 
          * @param host the value to set
@@ -215,19 +213,17 @@ public interface AmqpComponentBuilderFactory {
             return this;
         }
     
-        
         /**
          * The port number on which the AMPQ Broker listens.
          * 
-         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
          * 
-         * Default: 5672
          * Group: common
          * 
          * @param port the value to set
          * @return the dsl builder
          */
-        default AmqpComponentBuilder port(int port) {
+        default AmqpComponentBuilder port(java.lang.Integer port) {
             doSetProperty("port", port);
             return this;
         }
@@ -301,36 +297,32 @@ public interface AmqpComponentBuilderFactory {
             return this;
         }
     
-        
         /**
          * Whether to enable SSL when connecting to the AMQP Broker.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
          * 
-         * Default: false
          * Group: common
          * 
          * @param useSsl the value to set
          * @return the dsl builder
          */
-        default AmqpComponentBuilder useSsl(boolean useSsl) {
+        default AmqpComponentBuilder useSsl(java.lang.Boolean useSsl) {
             doSetProperty("useSsl", useSsl);
             return this;
         }
     
-        
         /**
          * Whether to configure topics with a topic:// prefix.
          * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
          * 
-         * Default: true
          * Group: common
          * 
          * @param useTopicPrefix the value to set
          * @return the dsl builder
          */
-        default AmqpComponentBuilder useTopicPrefix(boolean useTopicPrefix) {
+        default AmqpComponentBuilder useTopicPrefix(java.lang.Boolean 
useTopicPrefix) {
             doSetProperty("useTopicPrefix", useTopicPrefix);
             return this;
         }
@@ -2402,13 +2394,13 @@ public interface AmqpComponentBuilderFactory {
             case "jmsMessageType": getOrCreateConfiguration((AMQPComponent) 
component).setJmsMessageType((org.apache.camel.component.jms.JmsMessageType) 
value); return true;
             case "keyStoreLocation": ((AMQPComponent) 
component).setKeyStoreLocation((java.lang.String) value); return true;
             case "keyStoreType": ((AMQPComponent) 
component).setKeyStoreType((java.lang.String) value); return true;
-            case "port": ((AMQPComponent) component).setPort((int) value); 
return true;
+            case "port": ((AMQPComponent) 
component).setPort((java.lang.Integer) value); return true;
             case "replyTo": getOrCreateConfiguration((AMQPComponent) 
component).setReplyTo((java.lang.String) value); return true;
             case "testConnectionOnStartup": 
getOrCreateConfiguration((AMQPComponent) 
component).setTestConnectionOnStartup((boolean) value); return true;
             case "trustStoreLocation": ((AMQPComponent) 
component).setTrustStoreLocation((java.lang.String) value); return true;
             case "trustStoreType": ((AMQPComponent) 
component).setTrustStoreType((java.lang.String) value); return true;
-            case "useSsl": ((AMQPComponent) component).setUseSsl((boolean) 
value); return true;
-            case "useTopicPrefix": ((AMQPComponent) 
component).setUseTopicPrefix((boolean) value); return true;
+            case "useSsl": ((AMQPComponent) 
component).setUseSsl((java.lang.Boolean) value); return true;
+            case "useTopicPrefix": ((AMQPComponent) 
component).setUseTopicPrefix((java.lang.Boolean) value); return true;
             case "acknowledgementModeName": 
getOrCreateConfiguration((AMQPComponent) 
component).setAcknowledgementModeName((java.lang.String) value); return true;
             case "artemisConsumerPriority": 
getOrCreateConfiguration((AMQPComponent) 
component).setArtemisConsumerPriority((int) value); return true;
             case "asyncConsumer": getOrCreateConfiguration((AMQPComponent) 
component).setAsyncConsumer((boolean) value); return true;


Reply via email to