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 94b6dc08319 CAMEL-21749: camel-nats - Add metadata from status message 
so you can know the code/error message.
94b6dc08319 is described below

commit 94b6dc08319d904e7cf1fc203975b8d41af0421b
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon May 26 14:46:55 2025 +0200

    CAMEL-21749: camel-nats - Add metadata from status message so you can know 
the code/error message.
---
 .../org/apache/camel/catalog/components/nats.json  |  6 ++--
 .../org/apache/camel/component/nats/nats.json      |  6 ++--
 .../apache/camel/component/nats/NatsComponent.java |  3 ++
 .../camel/component/nats/NatsConfiguration.java    |  2 +-
 .../apache/camel/component/nats/NatsConstants.java |  5 +++
 .../apache/camel/component/nats/NatsConsumer.java  |  4 +++
 .../apache/camel/component/nats/NatsProducer.java  |  2 --
 .../endpoint/dsl/NatsEndpointBuilderFactory.java   | 36 ++++++++++++++++++----
 8 files changed, 51 insertions(+), 13 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json
index 64909ca6ad1..fa50b43849e 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json
@@ -37,7 +37,9 @@
     "CamelNatsSID": { "index": 1, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The SID of a consumed message.", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_SID" },
     "CamelNatsReplyTo": { "index": 2, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ReplyTo of a consumed message (may be null).", 
"constantName": "org.apache.camel.component.nats.NatsConstants#NATS_REPLY_TO" },
     "CamelNatsSubject": { "index": 3, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Subject of a consumed message.", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_SUBJECT" },
-    "CamelNatsQueueName": { "index": 4, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Queue name of a consumed message (may be null).", 
"constantName": "org.apache.camel.component.nats.NatsConstants#NATS_QUEUE_NAME" 
}
+    "CamelNatsQueueName": { "index": 4, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Queue name of a consumed message (may be null).", 
"constantName": "org.apache.camel.component.nats.NatsConstants#NATS_QUEUE_NAME" 
},
+    "CamelNatsStatusCode": { "index": 5, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Status message code", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_STATUS_CODE" },
+    "CamelNatsStatusError": { "index": 6, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "Status message error message", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_STATUS_ERROR" }
   },
   "properties": {
     "topic": { "index": 0, "kind": "path", "displayName": "Topic", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "The name of topic we want to use" },
@@ -66,7 +68,7 @@
     "requestTimeout": { "index": 23, "kind": "parameter", "displayName": 
"Request Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 20000, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Request timeout in milliseconds" },
     "lazyStartProducer": { "index": 24, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
     "connection": { "index": 25, "kind": "parameter", "displayName": 
"Connection", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "io.nats.client.Connection", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Reference an already instantiated connection 
to Nats server" },
-    "headerFilterStrategy": { "index": 26, "kind": "parameter", "displayName": 
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Define the header filtering strategy" },
+    "headerFilterStrategy": { "index": 26, "kind": "parameter", "displayName": 
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "To use a custom header filter strategy." },
     "traceConnection": { "index": 27, "kind": "parameter", "displayName": 
"Trace Connection", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.nats.NatsConfiguration", 
"configurationField": "configuration", "description": "Whether or not 
connection trace messages should be printed to standard out for fine  [...]
     "credentialsFilePath": { "index": 28, "kind": "parameter", "displayName": 
"Credentials File Path", "group": "security", "label": "security", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "If we use useCredentialsFile to true we'll 
need to set the credentialsFilePath option. It  [...]
     "secure": { "index": 29, "kind": "parameter", "displayName": "Secure", 
"group": "security", "label": "security", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Set secure option indicating TLS is required" 
},
diff --git 
a/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json
 
b/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json
index 64909ca6ad1..fa50b43849e 100644
--- 
a/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json
+++ 
b/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json
@@ -37,7 +37,9 @@
     "CamelNatsSID": { "index": 1, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The SID of a consumed message.", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_SID" },
     "CamelNatsReplyTo": { "index": 2, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ReplyTo of a consumed message (may be null).", 
"constantName": "org.apache.camel.component.nats.NatsConstants#NATS_REPLY_TO" },
     "CamelNatsSubject": { "index": 3, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Subject of a consumed message.", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_SUBJECT" },
-    "CamelNatsQueueName": { "index": 4, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Queue name of a consumed message (may be null).", 
"constantName": "org.apache.camel.component.nats.NatsConstants#NATS_QUEUE_NAME" 
}
+    "CamelNatsQueueName": { "index": 4, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Queue name of a consumed message (may be null).", 
"constantName": "org.apache.camel.component.nats.NatsConstants#NATS_QUEUE_NAME" 
},
+    "CamelNatsStatusCode": { "index": 5, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Status message code", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_STATUS_CODE" },
+    "CamelNatsStatusError": { "index": 6, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "Status message error message", "constantName": 
"org.apache.camel.component.nats.NatsConstants#NATS_STATUS_ERROR" }
   },
   "properties": {
     "topic": { "index": 0, "kind": "path", "displayName": "Topic", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "The name of topic we want to use" },
@@ -66,7 +68,7 @@
     "requestTimeout": { "index": 23, "kind": "parameter", "displayName": 
"Request Timeout", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 20000, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Request timeout in milliseconds" },
     "lazyStartProducer": { "index": 24, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
     "connection": { "index": 25, "kind": "parameter", "displayName": 
"Connection", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": "io.nats.client.Connection", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Reference an already instantiated connection 
to Nats server" },
-    "headerFilterStrategy": { "index": 26, "kind": "parameter", "displayName": 
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Define the header filtering strategy" },
+    "headerFilterStrategy": { "index": 26, "kind": "parameter", "displayName": 
"Header Filter Strategy", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "To use a custom header filter strategy." },
     "traceConnection": { "index": 27, "kind": "parameter", "displayName": 
"Trace Connection", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.nats.NatsConfiguration", 
"configurationField": "configuration", "description": "Whether or not 
connection trace messages should be printed to standard out for fine  [...]
     "credentialsFilePath": { "index": 28, "kind": "parameter", "displayName": 
"Credentials File Path", "group": "security", "label": "security", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "If we use useCredentialsFile to true we'll 
need to set the credentialsFilePath option. It  [...]
     "secure": { "index": 29, "kind": "parameter", "displayName": "Secure", 
"group": "security", "label": "security", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.nats.NatsConfiguration", "configurationField": 
"configuration", "description": "Set secure option indicating TLS is required" 
},
diff --git 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsComponent.java
 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsComponent.java
index e1b10bb67c5..19b96a41ed1 100644
--- 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsComponent.java
+++ 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsComponent.java
@@ -37,6 +37,9 @@ public class NatsComponent extends 
HeaderFilterStrategyComponent implements SSLC
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         NatsConfiguration config = new NatsConfiguration();
+        if (getHeaderFilterStrategy() != null) {
+            config.setHeaderFilterStrategy(getHeaderFilterStrategy());
+        }
         config.setTopic(remaining);
         config.setServers(servers);
         config.setVerbose(verbose);
diff --git 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
index 7190f51b4a1..b41fa518c34 100644
--- 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
+++ 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
@@ -353,7 +353,7 @@ public class NatsConfiguration {
     }
 
     /**
-     * Define the header filtering strategy
+     * To use a custom header filter strategy.
      */
     public void setHeaderFilterStrategy(HeaderFilterStrategy 
headerFilterStrategy) {
         this.headerFilterStrategy = headerFilterStrategy;
diff --git 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConstants.java
 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConstants.java
index 5c0b98a26a5..a7cce6d4d1b 100644
--- 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConstants.java
+++ 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConstants.java
@@ -30,5 +30,10 @@ public interface NatsConstants {
     String NATS_SUBJECT = "CamelNatsSubject";
     @Metadata(description = "The Queue name of a consumed message (may be 
null).", javaType = "String")
     String NATS_QUEUE_NAME = "CamelNatsQueueName";
+    @Metadata(label = "consumer", description = "Status message code", 
javaType = "int")
+    String NATS_STATUS_CODE = "CamelNatsStatusCode";
+    @Metadata(label = "consumer", description = "Status message error 
message", javaType = "String")
+    String NATS_STATUS_ERROR = "CamelNatsStatusError";
+
     String NATS_REQUEST_TIMEOUT_THREAD_PROFILE_NAME = 
"CamelNatsRequestTimeoutExecutor";
 }
diff --git 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
index 56f9f708194..31ff448a852 100644
--- 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
+++ 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
@@ -167,6 +167,10 @@ public class NatsConsumer extends DefaultConsumer {
                     exchange.getIn().setHeader(NatsConstants.NATS_SUBJECT, 
msg.getSubject());
                     exchange.getIn().setHeader(NatsConstants.NATS_QUEUE_NAME, 
msg.getSubscription().getQueueName());
                     
exchange.getIn().setHeader(NatsConstants.NATS_MESSAGE_TIMESTAMP, 
System.currentTimeMillis());
+                    if (msg.isStatusMessage() && msg.getStatus() != null) {
+                        
exchange.getIn().setHeader(NatsConstants.NATS_STATUS_CODE, 
msg.getStatus().getCode());
+                        
exchange.getIn().setHeader(NatsConstants.NATS_STATUS_ERROR, 
msg.getStatus().getMessage());
+                    }
                     if (msg.getHeaders() != null) {
                         final HeaderFilterStrategy strategy = 
NatsConsumer.this.getEndpoint()
                                 .getConfiguration()
diff --git 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
index 32f17ede84f..a672763d127 100644
--- 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
+++ 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsProducer.java
@@ -44,9 +44,7 @@ public class NatsProducer extends DefaultAsyncProducer {
     private static final Logger LOG = 
LoggerFactory.getLogger(NatsProducer.class);
 
     private final ExecutorServiceManager executorServiceManager;
-
     private ScheduledExecutorService scheduler;
-
     private Connection connection;
 
     public NatsProducer(NatsEndpoint endpoint) {
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java
index e2e3c57afef..4b8fde899ac 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java
@@ -784,7 +784,7 @@ public interface NatsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the header filtering strategy.
+         * To use a custom header filter strategy.
          * 
          * The option is a:
          * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
@@ -799,7 +799,7 @@ public interface NatsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the header filtering strategy.
+         * To use a custom header filter strategy.
          * 
          * The option will be converted to a
          * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
@@ -1481,7 +1481,7 @@ public interface NatsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the header filtering strategy.
+         * To use a custom header filter strategy.
          * 
          * The option is a:
          * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
@@ -1496,7 +1496,7 @@ public interface NatsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the header filtering strategy.
+         * To use a custom header filter strategy.
          * 
          * The option will be converted to a
          * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
@@ -2092,7 +2092,7 @@ public interface NatsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the header filtering strategy.
+         * To use a custom header filter strategy.
          * 
          * The option is a:
          * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
@@ -2107,7 +2107,7 @@ public interface NatsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Define the header filtering strategy.
+         * To use a custom header filter strategy.
          * 
          * The option will be converted to a
          * <code>org.apache.camel.spi.HeaderFilterStrategy</code> type.
@@ -2281,6 +2281,30 @@ public interface NatsEndpointBuilderFactory {
         public String natsQueueName() {
             return "CamelNatsQueueName";
         }
+        /**
+         * Status message code.
+         * 
+         * The option is a: {@code int} type.
+         * 
+         * Group: consumer
+         * 
+         * @return the name of the header {@code NatsStatusCode}.
+         */
+        public String natsStatusCode() {
+            return "CamelNatsStatusCode";
+        }
+        /**
+         * Status message error message.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: consumer
+         * 
+         * @return the name of the header {@code NatsStatusError}.
+         */
+        public String natsStatusError() {
+            return "CamelNatsStatusError";
+        }
     }
     static NatsEndpointBuilder endpointBuilder(String componentName, String 
path) {
         class NatsEndpointBuilderImpl extends AbstractEndpointBuilder 
implements NatsEndpointBuilder, AdvancedNatsEndpointBuilder {

Reply via email to