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 d538b204e5552e6ad8cc3eec19bf945399f182b7
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon May 27 19:39:44 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.
---
 .../component/thrift/ThriftConfiguration.java      |  1 +
 .../camel/component/thrift/ThriftConsumer.java     |  5 +++++
 .../camel/component/thrift/ThriftEndpoint.java     | 13 ++++++++++-
 .../camel/component/twilio/TwilioEndpoint.java     | 26 +++++++++++++++++++++-
 .../camel/component/undertow/UndertowConsumer.java |  5 +++++
 .../camel/component/undertow/UndertowEndpoint.java | 19 +++++++++++++++-
 .../camel/component/weather/WeatherEndpoint.java   | 13 ++++++++++-
 .../camel/component/web3j/Web3jEndpoint.java       | 13 ++++++++++-
 .../component/wordpress/WordpressEndpoint.java     | 23 +++++++++++++++++--
 .../camel/component/workday/WorkdayEndpoint.java   | 23 ++++++++++++++++++-
 .../apache/camel/component/xmpp/XmppEndpoint.java  | 22 +++++++++++++++++-
 .../camel/component/zeebe/ZeebeEndpoint.java       | 25 +++++++++++++++++++--
 .../camel/component/zendesk/ZendeskEndpoint.java   | 21 ++++++++++++++++-
 13 files changed, 197 insertions(+), 12 deletions(-)

diff --git 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java
 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java
index a549b2505e2..85cf4d5a814 100644
--- 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java
+++ 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java
@@ -28,6 +28,7 @@ import org.apache.camel.support.jsse.SSLContextParameters;
 public class ThriftConfiguration {
 
     @UriPath
+    @Metadata(required = true)
     private String host;
 
     @UriPath
diff --git 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java
 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java
index 67dbf49eff6..11e8e2cff60 100644
--- 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java
+++ 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java
@@ -64,6 +64,11 @@ public class ThriftConsumer extends DefaultConsumer {
         this.configuration = configuration;
     }
 
+    @Override
+    public boolean isHostedService() {
+        return true;
+    }
+
     public ThriftConfiguration getConfiguration() {
         return configuration;
     }
diff --git 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java
 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java
index a0d23f35b98..0d8afaf8f0a 100644
--- 
a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java
+++ 
b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java
@@ -20,6 +20,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.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
@@ -30,7 +31,7 @@ import org.apache.camel.support.SynchronousDelegateProducer;
  */
 @UriEndpoint(firstVersion = "2.20.0", scheme = "thrift", title = "Thrift", 
syntax = "thrift:host:port/service",
              category = { Category.RPC, Category.TRANSFORMATION }, 
headersClass = ThriftConstants.class)
-public class ThriftEndpoint extends DefaultEndpoint {
+public class ThriftEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
     @UriParam
     private ThriftConfiguration configuration;
     @UriParam(defaultValue = "false", label = "advanced",
@@ -49,6 +50,16 @@ public class ThriftEndpoint extends DefaultEndpoint {
         servicePackage = 
ThriftUtils.extractServicePackage(configuration.getService());
     }
 
+    @Override
+    public String getServiceUrl() {
+        return configuration.getHost() + ":" + configuration.getPort();
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "thrift";
+    }
+
     public ThriftConfiguration getConfiguration() {
         return configuration;
     }
diff --git 
a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
 
b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
index 042611cc405..b0f1dd35c47 100644
--- 
a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
+++ 
b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java
@@ -23,6 +23,7 @@ import java.util.Map;
 
 import com.twilio.http.TwilioRestClient;
 import org.apache.camel.Category;
+import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -32,6 +33,7 @@ import 
org.apache.camel.component.twilio.internal.TwilioApiName;
 import org.apache.camel.component.twilio.internal.TwilioConstants;
 import org.apache.camel.component.twilio.internal.TwilioPropertiesHelper;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.PluginHelper;
@@ -45,7 +47,7 @@ import 
org.apache.camel.support.component.ApiMethodPropertiesHelper;
 @UriEndpoint(firstVersion = "2.20.0", scheme = "twilio", title = "Twilio", 
syntax = "twilio:apiName/methodName",
              apiSyntax = "apiName/methodName",
              category = { Category.API, Category.MESSAGING, Category.CLOUD })
-public class TwilioEndpoint extends AbstractApiEndpoint<TwilioApiName, 
TwilioConfiguration> {
+public class TwilioEndpoint extends AbstractApiEndpoint<TwilioApiName, 
TwilioConfiguration> implements EndpointServiceLocation {
 
     protected static final Map<String, String> EXECUTOR_METHOD_MAP;
 
@@ -70,7 +72,29 @@ public class TwilioEndpoint extends 
AbstractApiEndpoint<TwilioApiName, TwilioCon
               endpointConfiguration);
         this.component = component;
         this.configuration = endpointConfiguration;
+    }
+
+    @Override
+    public TwilioComponent getComponent() {
+        return (TwilioComponent) super.getComponent();
+    }
+
+    @Override
+    public String getServiceUrl() {
+        return "https://twilio.com";;
+    }
 
+    @Override
+    public String getServiceProtocol() {
+        return "rest";
+    }
+
+    @Override
+    public Map<String, String> getServiceMetadata() {
+        if (getComponent().getUsername() != null) {
+            return Map.of("username", getComponent().getUsername());
+        }
+        return null;
     }
 
     @Override
diff --git 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
index 02f9556df87..8140a009953 100644
--- 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
+++ 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java
@@ -73,6 +73,11 @@ public class UndertowConsumer extends DefaultConsumer 
implements HttpHandler, Su
         super(endpoint, processor);
     }
 
+    @Override
+    public boolean isHostedService() {
+        return true;
+    }
+
     public boolean isRest() {
         return rest;
     }
diff --git 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
index 16efda19a92..6113cf8508c 100644
--- 
a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
+++ 
b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java
@@ -40,6 +40,7 @@ import 
org.apache.camel.component.undertow.UndertowConstants.EventType;
 import org.apache.camel.component.undertow.handlers.CamelWebSocketHandler;
 import org.apache.camel.component.undertow.spi.UndertowSecurityProvider;
 import org.apache.camel.http.base.cookie.CookieHandler;
+import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.camel.spi.Metadata;
@@ -61,7 +62,7 @@ import org.xnio.Options;
 @UriEndpoint(firstVersion = "2.16.0", scheme = "undertow", title = "Undertow", 
syntax = "undertow:httpURI",
              category = { Category.HTTP, Category.NETWORKING }, 
lenientProperties = true,
              headersClass = UndertowConstants.class)
-public class UndertowEndpoint extends DefaultEndpoint implements 
AsyncEndpoint, HeaderFilterStrategyAware, DiscoverableService {
+public class UndertowEndpoint extends DefaultEndpoint implements 
AsyncEndpoint, HeaderFilterStrategyAware, DiscoverableService, 
EndpointServiceLocation {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(UndertowEndpoint.class);
 
@@ -144,6 +145,22 @@ public class UndertowEndpoint extends DefaultEndpoint 
implements AsyncEndpoint,
         this.component = component;
     }
 
+    @Override
+    public String getServiceUrl() {
+        if (httpURI != null) {
+            return httpURI.toString();
+        }
+        return null;
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        if (httpURI != null) {
+            return httpURI.getScheme();
+        }
+        return null;
+    }
+
     @Override
     public UndertowComponent getComponent() {
         return component;
diff --git 
a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
 
b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
index a5cb97c08b4..712f740f354 100644
--- 
a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
+++ 
b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java
@@ -20,6 +20,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.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultPollingEndpoint;
@@ -30,7 +31,7 @@ import 
org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
  */
 @UriEndpoint(firstVersion = "2.12.0", scheme = "weather", title = "Weather", 
syntax = "weather:name",
              category = { Category.API }, headersClass = 
WeatherConstants.class)
-public class WeatherEndpoint extends DefaultPollingEndpoint {
+public class WeatherEndpoint extends DefaultPollingEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
     private final WeatherConfiguration configuration;
@@ -43,6 +44,16 @@ public class WeatherEndpoint extends DefaultPollingEndpoint {
         this.weatherQuery = new WeatherQuery(getConfiguration());
     }
 
+    @Override
+    public String getServiceUrl() {
+        return "http://api.openweathermap.org/data/2.5";;
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "http";
+    }
+
     @Override
     public Consumer createConsumer(Processor processor) throws Exception {
         WeatherConsumer answer = new WeatherConsumer(this, processor);
diff --git 
a/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java
 
b/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java
index 6b04db7dc5b..829207a4b86 100644
--- 
a/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java
+++ 
b/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java
@@ -22,6 +22,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.EndpointServiceLocation;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -45,7 +46,7 @@ import org.web3j.quorum.Quorum;
  */
 @UriEndpoint(firstVersion = "2.22.0", scheme = "web3j", title = "Web3j 
Ethereum Blockchain", syntax = "web3j:nodeAddress",
              category = { Category.BLOCKCHAIN }, headersClass = 
Web3jConstants.class)
-public class Web3jEndpoint extends DefaultEndpoint {
+public class Web3jEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
     private static final Logger LOG = 
LoggerFactory.getLogger(Web3jEndpoint.class);
 
     private Web3j web3j;
@@ -63,6 +64,16 @@ public class Web3jEndpoint extends DefaultEndpoint {
         this.nodeAddress = remaining;
     }
 
+    @Override
+    public String getServiceUrl() {
+        return nodeAddress;
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "json-rpc";
+    }
+
     @Override
     protected void doStart() throws Exception {
         this.web3j = buildService(nodeAddress, configuration);
diff --git 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
index f1f32f1a2ed..1791ab1c8e9 100644
--- 
a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
+++ 
b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java
@@ -33,6 +33,7 @@ import 
org.apache.camel.component.wordpress.consumer.WordpressUserConsumer;
 import org.apache.camel.component.wordpress.producer.WordpressPostProducer;
 import org.apache.camel.component.wordpress.producer.WordpressUserProducer;
 import org.apache.camel.component.wordpress.proxy.WordpressOperationType;
+import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -47,9 +48,9 @@ import org.apache.camel.util.PropertiesHelper;
  */
 @UriEndpoint(firstVersion = "2.21.0", scheme = "wordpress", title = 
"WordPress", syntax = "wordpress:operation",
              category = { Category.CLOUD, Category.API, Category.CMS })
-public class WordpressEndpoint extends DefaultEndpoint {
+public class WordpressEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
-    public static final String ENDPOINT_SERVICE_POST = "post, user";
+    public static final String ENDPOINT_SERVICE_POST = "post,user";
 
     @UriPath(description = "The endpoint operation.", enums = 
ENDPOINT_SERVICE_POST)
     @Metadata(required = true)
@@ -67,6 +68,24 @@ public class WordpressEndpoint extends DefaultEndpoint {
         this.configuration = configuration;
     }
 
+    @Override
+    public String getServiceUrl() {
+        return configuration.getUrl();
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "http";
+    }
+
+    @Override
+    public Map<String, String> getServiceMetadata() {
+        if (configuration.getUser() != null) {
+            return Map.of("username", configuration.getUser());
+        }
+        return null;
+    }
+
     public WordpressConfiguration getConfiguration() {
         return configuration;
     }
diff --git 
a/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java
 
b/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java
index 533f59de93e..fbda5b47b1d 100644
--- 
a/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java
+++ 
b/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java
@@ -23,16 +23,19 @@ import org.apache.camel.Producer;
 import org.apache.camel.component.workday.producer.WorkdayCommonAPIProducer;
 import org.apache.camel.component.workday.producer.WorkdayDefaultProducer;
 import org.apache.camel.component.workday.producer.WorkdayReportProducer;
+import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
 
+import java.util.Map;
+
 /**
  * Detect and parse documents using Workday.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "workday", title = "Workday", 
syntax = "workday:entity:path", producerOnly = true,
              category = { Category.CLOUD, Category.API, Category.SAAS }, 
headersClass = WorkdayDefaultProducer.class)
-public class WorkdayEndpoint extends DefaultEndpoint {
+public class WorkdayEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
     private WorkdayConfiguration workdayConfiguration;
@@ -45,6 +48,24 @@ public class WorkdayEndpoint extends DefaultEndpoint {
         this.workdayConfiguration = configuration;
     }
 
+    @Override
+    public String getServiceUrl() {
+        return workdayConfiguration.getHost();
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "rest";
+    }
+
+    @Override
+    public Map<String, String> getServiceMetadata() {
+        if (workdayConfiguration.getClientId() != null) {
+            return Map.of("clientId", workdayConfiguration.getClientId());
+        }
+        return null;
+    }
+
     public Producer createProducer() throws Exception {
         switch (workdayConfiguration.getEntity()) {
             case report:
diff --git 
a/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java
 
b/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java
index 2acb8b8f387..0c39c2723f9 100644
--- 
a/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java
+++ 
b/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java
@@ -20,11 +20,13 @@ import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.List;
+import java.util.Map;
 
 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.EndpointServiceLocation;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.camel.spi.Metadata;
@@ -59,7 +61,7 @@ import org.slf4j.LoggerFactory;
 @UriEndpoint(firstVersion = "1.0", scheme = "xmpp", title = "XMPP", syntax = 
"xmpp:host:port/participant",
              alternativeSyntax = "xmpp:user:password@host:port/participant",
              category = { Category.CHAT, Category.MESSAGING }, headersClass = 
XmppConstants.class)
-public class XmppEndpoint extends DefaultEndpoint implements 
HeaderFilterStrategyAware {
+public class XmppEndpoint extends DefaultEndpoint implements 
HeaderFilterStrategyAware, EndpointServiceLocation {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(XmppEndpoint.class);
 
@@ -112,6 +114,24 @@ public class XmppEndpoint extends DefaultEndpoint 
implements HeaderFilterStrateg
         super(uri, component);
     }
 
+    @Override
+    public String getServiceUrl() {
+        return host + ":" + port;
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "xmpp";
+    }
+
+    @Override
+    public Map<String, String> getServiceMetadata() {
+        if (user != null) {
+            return Map.of("username", user);
+        }
+        return null;
+    }
+
     @Override
     public Producer createProducer() throws Exception {
         if (room != null) {
diff --git 
a/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java
 
b/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java
index b4e3b99fd51..a60681049d6 100644
--- 
a/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java
+++ 
b/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java
@@ -23,6 +23,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.component.zeebe.internal.OperationName;
 import org.apache.camel.component.zeebe.internal.ZeebeService;
+import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -30,13 +31,15 @@ import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.DefaultEndpoint;
 import org.apache.camel.util.ObjectHelper;
 
+import java.util.Map;
+
 /**
  * Zeebe component which integrates with Camunda Zeebe to interact with the 
API.
  */
 @UriEndpoint(firstVersion = "3.21.0", scheme = "zeebe", title = "Zeebe", 
syntax = "zeebe:operationName",
              category = { Category.WORKFLOW, Category.SAAS },
              headersClass = ZeebeConstants.class)
-public class ZeebeEndpoint extends DefaultEndpoint {
+public class ZeebeEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriPath(label = "common", description = "The operation to use", enums = 
"startProcess," +
                                                                              
"cancelProcess,publishMessage,completeJob,failJob,updateJobRetries,worker,throwError,deployResource")
@@ -60,10 +63,28 @@ public class ZeebeEndpoint extends DefaultEndpoint {
 
     public ZeebeEndpoint(String uri, ZeebeComponent component, OperationName 
operationName) {
         super(uri, component);
-
         this.operationName = operationName;
     }
 
+    @Override
+    public String getServiceUrl() {
+        return getComponent().getGatewayHost() + ":" + 
getComponent().getGatewayPort();
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "rpc";
+    }
+
+    @Override
+    public Map<String, String> getServiceMetadata() {
+        if (getComponent().getClientId() != null) {
+            return Map.of("clientId", getComponent().getClientId());
+        }
+        return null;
+    }
+
+
     public Producer createProducer() throws Exception {
         ObjectHelper.notNull(operationName, "operationName");
 
diff --git 
a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
 
b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
index bb75e9ec9b3..b28d08164d9 100644
--- 
a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
+++ 
b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
@@ -27,6 +27,7 @@ import 
org.apache.camel.component.zendesk.internal.ZendeskApiName;
 import org.apache.camel.component.zendesk.internal.ZendeskConstants;
 import org.apache.camel.component.zendesk.internal.ZendeskHelper;
 import org.apache.camel.component.zendesk.internal.ZendeskPropertiesHelper;
+import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.component.AbstractApiEndpoint;
@@ -41,7 +42,7 @@ import org.zendesk.client.v2.Zendesk;
 @UriEndpoint(firstVersion = "2.19.0", scheme = "zendesk", title = "Zendesk", 
syntax = "zendesk:methodName",
              apiSyntax = "methodName",
              consumerPrefix = "consumer", category = { Category.CLOUD, 
Category.API, Category.SAAS })
-public class ZendeskEndpoint extends AbstractApiEndpoint<ZendeskApiName, 
ZendeskConfiguration> {
+public class ZendeskEndpoint extends AbstractApiEndpoint<ZendeskApiName, 
ZendeskConfiguration> implements EndpointServiceLocation {
 
     @UriParam
     private ZendeskConfiguration configuration;
@@ -55,6 +56,24 @@ public class ZendeskEndpoint extends 
AbstractApiEndpoint<ZendeskApiName, Zendesk
         this.configuration = endpointConfiguration;
     }
 
+    @Override
+    public String getServiceUrl() {
+        return configuration.getServerUrl();
+    }
+
+    @Override
+    public String getServiceProtocol() {
+        return "rest";
+    }
+
+    @Override
+    public Map<String, String> getServiceMetadata() {
+        if (configuration.getUsername() != null) {
+            return Map.of("username", configuration.getUsername());
+        }
+        return null;
+    }
+
     @Override
     public ZendeskComponent getComponent() {
         return (ZendeskComponent) super.getComponent();

Reply via email to