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

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

commit 398d1bc957006a31dfd5948306037cc6e5156441
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri May 24 13:49:04 2024 +0200

    CAMEL-20798: Add RemoteAddress to endpoints so they can tell the 
url/hostname etc for the system it connects. This is needed for better 
monitoring, tracing and management. Add this information into camel-tracer as 
tags.
---
 .../camel/component/activemq/ActiveMQEndpoint.java |  4 ++--
 .../component/activemq6/ActiveMQEndpoint.java      |  4 ++--
 .../camel/component/ironmq/IronMQEndpoint.java     |  4 ++--
 .../camel/component/kafka/KafkaEndpoint.java       |  4 ++--
 .../apache/camel/component/nats/NatsEndpoint.java  |  4 ++--
 .../apache/camel/component/paho/PahoEndpoint.java  |  4 ++--
 .../platform/http/PlatformHttpEndpoint.java        | 19 ++++++++++++++++-
 .../springrabbit/SpringRabbitMQEndpoint.java       |  4 ++--
 .../camel/component/sql/DefaultSqlEndpoint.java    |  4 ++--
 .../camel/component/stomp/StompEndpoint.java       |  4 ++--
 .../tracing/decorators/AbstractSpanDecorator.java  | 14 ++++++-------
 ...ressAware.java => EndpointLocationAddress.java} | 24 ++++++++++++++++------
 .../camel/impl/console/EndpointDevConsole.java     |  8 +++++---
 .../api/management/mbean/ManagedEndpointMBean.java | 15 ++++++++------
 .../camel/management/mbean/ManagedEndpoint.java    | 18 +++++++++++-----
 .../jbang/core/commands/process/ListEndpoint.java  |  4 ++--
 16 files changed, 89 insertions(+), 49 deletions(-)

diff --git 
a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java
 
b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java
index caf63bf815f..0f2de7b346e 100644
--- 
a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java
+++ 
b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/ActiveMQEndpoint.java
@@ -24,7 +24,7 @@ import org.apache.camel.component.jms.JmsBinding;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.jms.JmsConfiguration;
 import org.apache.camel.component.jms.JmsEndpoint;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 
@@ -34,7 +34,7 @@ import org.apache.camel.spi.UriParam;
 @UriEndpoint(firstVersion = "1.0.0", extendsScheme = "jms", scheme = 
"activemq", title = "ActiveMQ 5.x",
              syntax = "activemq:destinationType:destinationName",
              category = { Category.MESSAGING })
-public class ActiveMQEndpoint extends JmsEndpoint implements 
RemoteAddressAware {
+public class ActiveMQEndpoint extends JmsEndpoint implements 
EndpointLocationAddress {
 
     @UriParam(multiValue = true, prefix = "destination.", label = 
"consumer,advanced")
     private Map<String, String> destinationOptions;
diff --git 
a/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java
 
b/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java
index 29bfce5ad32..336d3a04c48 100644
--- 
a/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java
+++ 
b/components/camel-activemq6/src/main/java/org/apache/camel/component/activemq6/ActiveMQEndpoint.java
@@ -24,7 +24,7 @@ import org.apache.camel.component.jms.JmsBinding;
 import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.jms.JmsConfiguration;
 import org.apache.camel.component.jms.JmsEndpoint;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 
@@ -34,7 +34,7 @@ import org.apache.camel.spi.UriParam;
 @UriEndpoint(firstVersion = "4.7.0", extendsScheme = "jms", scheme = 
"activemq6", title = "ActiveMQ 6.x",
              syntax = "activemq6:destinationType:destinationName",
              category = { Category.MESSAGING })
-public class ActiveMQEndpoint extends JmsEndpoint implements 
RemoteAddressAware {
+public class ActiveMQEndpoint extends JmsEndpoint implements 
EndpointLocationAddress {
 
     @UriParam(multiValue = true, prefix = "destination.", label = 
"consumer,advanced")
     private Map<String, String> destinationOptions;
diff --git 
a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
 
b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
index c9897e968eb..b5f774bc60c 100644
--- 
a/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
+++ 
b/components/camel-ironmq/src/main/java/org/apache/camel/component/ironmq/IronMQEndpoint.java
@@ -24,7 +24,7 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.ScheduledPollEndpoint;
@@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
  */
 @UriEndpoint(firstVersion = "2.17.0", scheme = "ironmq", syntax = 
"ironmq:queueName", title = "IronMQ",
              category = { Category.CLOUD, Category.MESSAGING }, headersClass = 
IronMQConstants.class)
-public class IronMQEndpoint extends ScheduledPollEndpoint implements 
RemoteAddressAware {
+public class IronMQEndpoint extends ScheduledPollEndpoint implements 
EndpointLocationAddress {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(IronMQEndpoint.class);
 
diff --git 
a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java
 
b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java
index 1bfbc129b9a..dd591d94470 100644
--- 
a/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java
+++ 
b/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaEndpoint.java
@@ -28,7 +28,7 @@ import org.apache.camel.Producer;
 import org.apache.camel.component.kafka.consumer.KafkaManualCommit;
 import org.apache.camel.component.kafka.consumer.KafkaManualCommitFactory;
 import org.apache.camel.spi.ClassResolver;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
@@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory;
  */
 @UriEndpoint(firstVersion = "2.13.0", scheme = "kafka", title = "Kafka", 
syntax = "kafka:topic",
              category = { Category.MESSAGING }, headersClass = 
KafkaConstants.class)
-public class KafkaEndpoint extends DefaultEndpoint implements 
MultipleConsumersSupport, RemoteAddressAware {
+public class KafkaEndpoint extends DefaultEndpoint implements 
MultipleConsumersSupport, EndpointLocationAddress {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(KafkaEndpoint.class);
 
diff --git 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
index 1ab1735a1f4..f083f2ad9e1 100644
--- 
a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
+++ 
b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java
@@ -31,9 +31,9 @@ import org.apache.camel.Consumer;
 import org.apache.camel.MultipleConsumersSupport;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
-import org.apache.camel.spi.RemoteAddressAware;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
@@ -45,7 +45,7 @@ import org.apache.camel.util.ObjectHelper;
  */
 @UriEndpoint(firstVersion = "2.17.0", scheme = "nats", title = "Nats", syntax 
= "nats:topic", category = { Category.MESSAGING },
              headersClass = NatsConstants.class)
-public class NatsEndpoint extends DefaultEndpoint implements 
MultipleConsumersSupport, HeaderFilterStrategyAware, RemoteAddressAware {
+public class NatsEndpoint extends DefaultEndpoint implements 
MultipleConsumersSupport, HeaderFilterStrategyAware, EndpointLocationAddress {
 
     @UriParam
     private NatsConfiguration configuration;
diff --git 
a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
 
b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
index 6e787178073..fa319d5840b 100644
--- 
a/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
+++ 
b/components/camel-paho/src/main/java/org/apache/camel/component/paho/PahoEndpoint.java
@@ -20,8 +20,8 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.RemoteAddressAware;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
@@ -41,7 +41,7 @@ import java.util.Map;
  */
 @UriEndpoint(firstVersion = "2.16.0", scheme = "paho", title = "Paho", 
category = { Category.MESSAGING, Category.IOT },
              syntax = "paho:topic", headersClass = PahoConstants.class)
-public class PahoEndpoint extends DefaultEndpoint implements 
RemoteAddressAware {
+public class PahoEndpoint extends DefaultEndpoint implements 
EndpointLocationAddress {
 
     // Configuration members
     @UriPath(description = "Name of the topic")
diff --git 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpEndpoint.java
 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpEndpoint.java
index 1e8e5065c8f..ef77dbf5f70 100644
--- 
a/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpEndpoint.java
+++ 
b/components/camel-platform-http/src/main/java/org/apache/camel/component/platform/http/PlatformHttpEndpoint.java
@@ -25,6 +25,7 @@ import 
org.apache.camel.component.platform.http.cookie.CookieConfiguration;
 import org.apache.camel.component.platform.http.spi.PlatformHttpConsumer;
 import org.apache.camel.component.platform.http.spi.PlatformHttpEngine;
 import org.apache.camel.http.base.HttpHeaderFilterStrategy;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.camel.spi.Metadata;
@@ -41,7 +42,8 @@ import org.apache.camel.support.DefaultEndpoint;
 @Metadata(annotations = {
         "protocol=http",
 })
-public class PlatformHttpEndpoint extends DefaultEndpoint implements 
AsyncEndpoint, HeaderFilterStrategyAware {
+public class PlatformHttpEndpoint extends DefaultEndpoint
+        implements AsyncEndpoint, HeaderFilterStrategyAware, 
EndpointLocationAddress {
 
     private static final String PROXY_PATH = "proxy";
 
@@ -95,6 +97,21 @@ public class PlatformHttpEndpoint extends DefaultEndpoint 
implements AsyncEndpoi
         return (PlatformHttpComponent) super.getComponent();
     }
 
+    @Override
+    public boolean isHostedAddress() {
+        return true;
+    }
+
+    @Override
+    public String getAddress() {
+        String server = "http://0.0.0.0";;
+        int port = getOrCreateEngine().getServerPort();
+        if (port > 0) {
+            server += ":" + port;
+        }
+        return server;
+    }
+
     @Override
     public Producer createProducer() throws Exception {
         throw new UnsupportedOperationException("Producer is not supported");
diff --git 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
index 876428c6537..f9a1dfd5814 100644
--- 
a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
+++ 
b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
@@ -26,8 +26,8 @@ import org.apache.camel.Exchange;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.RemoteAddressAware;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
@@ -57,7 +57,7 @@ import static 
org.apache.camel.component.springrabbit.SpringRabbitMQConstants.DI
 @UriEndpoint(firstVersion = "3.8.0", scheme = "spring-rabbitmq", title = 
"Spring RabbitMQ",
              syntax = "spring-rabbitmq:exchangeName",
              category = { Category.MESSAGING }, headersClass = 
SpringRabbitMQConstants.class)
-public class SpringRabbitMQEndpoint extends DefaultEndpoint implements 
AsyncEndpoint, RemoteAddressAware {
+public class SpringRabbitMQEndpoint extends DefaultEndpoint implements 
AsyncEndpoint, EndpointLocationAddress {
 
     public static final String ARG_PREFIX = "arg.";
     public static final String CONSUMER_ARG_PREFIX = "consumer.";
diff --git 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
index e17dc38f0d0..eacae6f97ef 100644
--- 
a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
+++ 
b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlEndpoint.java
@@ -27,8 +27,8 @@ import java.util.Map;
 import javax.sql.DataSource;
 
 import org.apache.camel.Component;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.RemoteAddressAware;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultPollingEndpoint;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -39,7 +39,7 @@ import 
org.springframework.jdbc.datasource.AbstractDriverBasedDataSource;
 /**
  * Base class for SQL endpoints.
  */
-public abstract class DefaultSqlEndpoint extends DefaultPollingEndpoint 
implements RemoteAddressAware {
+public abstract class DefaultSqlEndpoint extends DefaultPollingEndpoint 
implements EndpointLocationAddress {
     private JdbcTemplate jdbcTemplate;
 
     @Metadata(autowired = true)
diff --git 
a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
 
b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
index 6364706a3db..b4ba1ed90a2 100644
--- 
a/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
+++ 
b/components/camel-stomp/src/main/java/org/apache/camel/component/stomp/StompEndpoint.java
@@ -30,10 +30,10 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.RemoteAddressAware;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
@@ -60,7 +60,7 @@ import static 
org.fusesource.stomp.client.Constants.UNSUBSCRIBE;
  */
 @UriEndpoint(firstVersion = "2.12.0", scheme = "stomp", title = "Stomp", 
syntax = "stomp:destination",
              category = { Category.MESSAGING })
-public class StompEndpoint extends DefaultEndpoint implements AsyncEndpoint, 
HeaderFilterStrategyAware, RemoteAddressAware {
+public class StompEndpoint extends DefaultEndpoint implements AsyncEndpoint, 
HeaderFilterStrategyAware, EndpointLocationAddress {
 
     private CallbackConnection connection;
     private Stomp stomp;
diff --git 
a/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
 
b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
index a3c8db212e0..a249423ecff 100644
--- 
a/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
+++ 
b/components/camel-tracing/src/main/java/org/apache/camel/tracing/decorators/AbstractSpanDecorator.java
@@ -20,7 +20,7 @@ import java.util.*;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.tracing.ExtractAdapter;
 import org.apache.camel.tracing.InjectAdapter;
 import org.apache.camel.tracing.SpanAdapter;
@@ -88,10 +88,8 @@ public abstract class AbstractSpanDecorator implements 
SpanDecorator {
     @Override
     public String getOperationName(Exchange exchange, Endpoint endpoint) {
         // OpenTracing aims to use low cardinality operation names. Ideally a
-        // specific
-        // span decorator should be defined for all relevant Camel components
-        // that
-        // identify a meaningful operation name
+        // specific span decorator should be defined for all relevant Camel
+        // components that identify a meaningful operation name
         return getComponentName(endpoint);
     }
 
@@ -111,12 +109,12 @@ public abstract class AbstractSpanDecorator implements 
SpanDecorator {
             span.setTag(TagConstants.URL_QUERY, query);
         }
 
-        if (endpoint instanceof RemoteAddressAware raa) {
-            String adr = raa.getAddress();
+        if (endpoint instanceof EndpointLocationAddress ela) {
+            String adr = ela.getAddress();
             if (adr != null) {
                 span.setTag(TagConstants.SERVER_ADDRESS, adr);
             }
-            Map map = raa.getAddressMetadata();
+            Map map = ela.getAddressMetadata();
             if (map != null) {
                 String un = (String) map.get("username");
                 if (un != null) {
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/RemoteAddressAware.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/EndpointLocationAddress.java
similarity index 54%
rename from 
core/camel-api/src/main/java/org/apache/camel/spi/RemoteAddressAware.java
rename to 
core/camel-api/src/main/java/org/apache/camel/spi/EndpointLocationAddress.java
index 7a1e2cfcf1d..5a6c35ec96d 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RemoteAddressAware.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/EndpointLocationAddress.java
@@ -19,21 +19,33 @@ package org.apache.camel.spi;
 import java.util.Map;
 
 /**
- * Used for getting information about remote URL used for connecting to a 
remote system, such as from an
- * {@link org.apache.camel.Endpoint} or {@link org.apache.camel.Component} 
that connects to messaging brokers, cloud
- * systems, databases etc.
+ * Used for getting information about (hosted or external) service addresses 
used for connecting to a remote system such
+ * as message brokers, databases, or cloud services.
+ *
+ * Hosted services are running inside this Camel application such as with 
embedded HTTP server for Rest DSL, or
+ * TCP networking with netty etc.
  */
-public interface RemoteAddressAware {
+public interface EndpointLocationAddress {
+
+    /**
+     * Is this service address hosted (in this Camel application) or external 
such as on a remote network connection.
+     */
+    default boolean isHostedAddress() {
+        return false;
+    }
 
     /**
      * Gets the remote address such as URL or hostname
      *
-     * @return the address or null if no address can be resolved
+     * @return the address or null if no address can be determined.
      */
     String getAddress();
 
     /**
-     * Optional additional metadata that is relevant to the remote address as 
key value pairs
+     * Optional additional metadata that is relevant to the address as key 
value pairs.
+     * Notice that the metadata is not supposed to contain sensitive security 
details
+     * such as access token, api keys, or passwords. Only share information 
that can
+     * be safely accessed and written to logs.
      *
      * @return optional metadata or null if no data
      */
diff --git 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java
 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java
index 75b43b6c657..794a57cf584 100644
--- 
a/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java
+++ 
b/core/camel-console/src/main/java/org/apache/camel/impl/console/EndpointDevConsole.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.EndpointRegistry;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 import org.apache.camel.spi.RuntimeEndpointRegistry;
 import org.apache.camel.spi.annotations.DevConsole;
 import org.apache.camel.support.console.AbstractDevConsole;
@@ -98,14 +98,16 @@ public class EndpointDevConsole extends AbstractDevConsole {
             JsonObject jo = new JsonObject();
             boolean stub = 
e.getComponent().getClass().getSimpleName().equals("StubComponent");
             jo.put("uri", e.getEndpointUri());
-            if (e instanceof RemoteAddressAware raa) {
+            if (e instanceof EndpointLocationAddress raa) {
                 JsonObject ro = new JsonObject();
+                ro.put("hosted", raa.isHostedAddress());
+                ro.put("remote", !raa.isHostedAddress());
                 ro.put("address", raa.getAddress());
                 var d = raa.getAddressMetadata();
                 if (d != null) {
                     ro.putAll(d);
                 }
-                jo.put("remote", ro);
+                jo.put("location", ro);
             }
             jo.put("stub", stub);
             var stat = findStats(stats, e.getEndpointUri());
diff --git 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
index eac9172353c..53c2418c762 100644
--- 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
+++ 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedEndpointMBean.java
@@ -16,10 +16,10 @@
  */
 package org.apache.camel.api.management.mbean;
 
-import java.util.Map;
-
 import org.apache.camel.api.management.ManagedAttribute;
 
+import java.util.Map;
+
 public interface ManagedEndpointMBean {
 
     @ManagedAttribute(description = "Camel ID")
@@ -40,10 +40,13 @@ public interface ManagedEndpointMBean {
     @ManagedAttribute(description = "Endpoint State")
     String getState();
 
-    @ManagedAttribute(description = "Remote Address this endpoint is 
connecting (only available for some components)")
-    String getRemoteAddress();
+    @ManagedAttribute(description = "Whether the endpoint location address is 
hosted or external (only available for some components)")
+    boolean isEndpointLocationHosted();
+
+    @ManagedAttribute(description = "Address (such as URL or hostname) this 
endpoint is connecting (only available for some components)")
+    String getEndpointLocationAddress();
 
-    @ManagedAttribute(description = "Remote Address metadata this endpoint is 
connecting (only available for some components)")
-    Map<String, String> getRemoteAddressMetadata();
+    @ManagedAttribute(description = "Additional metadata this endpoint is used 
for connecting (only available for some components)")
+    Map<String, String> getEndpointLocationAddressMetadata();
 
 }
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
index 80f27eaf16b..7c50fb0a0c2 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedEndpoint.java
@@ -25,7 +25,7 @@ import org.apache.camel.api.management.ManagedInstance;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedEndpointMBean;
 import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.spi.RemoteAddressAware;
+import org.apache.camel.spi.EndpointLocationAddress;
 
 @ManagedResource(description = "Managed Endpoint")
 public class ManagedEndpoint implements ManagedInstance, ManagedEndpointMBean {
@@ -81,16 +81,24 @@ public class ManagedEndpoint implements ManagedInstance, 
ManagedEndpointMBean {
     }
 
     @Override
-    public String getRemoteAddress() {
-        if (endpoint instanceof RemoteAddressAware raa) {
+    public boolean isEndpointLocationHosted() {
+        if (endpoint instanceof EndpointLocationAddress raa) {
+            return raa.isHostedAddress();
+        }
+        return false;
+    }
+
+    @Override
+    public String getEndpointLocationAddress() {
+        if (endpoint instanceof EndpointLocationAddress raa) {
             return raa.getAddress();
         }
         return null;
     }
 
     @Override
-    public Map<String, String> getRemoteAddressMetadata() {
-        if (endpoint instanceof RemoteAddressAware raa) {
+    public Map<String, String> getEndpointLocationAddressMetadata() {
+        if (endpoint instanceof EndpointLocationAddress raa) {
             return raa.getAddressMetadata();
         }
         return null;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
index 893350ee544..4e576d79446 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListEndpoint.java
@@ -117,7 +117,7 @@ public class ListEndpoint extends ProcessWatchCommand {
                                 }
                                 row.pid = Long.toString(ph.pid());
                                 row.endpoint = o.getString("uri");
-                                JsonObject ro = (JsonObject) o.get("remote");
+                                JsonObject ro = (JsonObject) o.get("location");
                                 if (ro != null) {
                                     row.address = ro;
                                 }
@@ -206,7 +206,7 @@ public class ListEndpoint extends ProcessWatchCommand {
             if (r.address.size() > 1) {
                 StringJoiner sj = new StringJoiner(" ");
                 r.address.forEach((k, v) -> {
-                    if (!"address".equals(k)) {
+                    if (!"address".equals(k) && !"hosted".equals(k) && 
!"remote".equals(k)) {
                         sj.add(k + "=" + v);
                     }
                 });

Reply via email to