You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/09/25 16:27:52 UTC

[camel-k-runtime] branch master updated: knative: refactor knative environment definition #453

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

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git


The following commit(s) were added to refs/heads/master by this push:
     new 474cff0  knative: refactor knative environment definition #453
474cff0 is described below

commit 474cff09f990d44ba503dc906acd5f8b31872e09
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Wed Sep 23 12:49:06 2020 +0200

    knative: refactor knative environment definition #453
---
 .../java/org/apache/camel/k/main/RuntimeTest.java  |   2 +-
 .../knative/deployment/DeploymentProcessor.java    |   2 +-
 .../KnativeSinkBindingContextCustomizer.java       |   2 +-
 .../KnativeSinkBindingCustomizerTest.java          |   4 +-
 .../knative/KnativeSourceRoutesLoaderTest.java     |   2 +-
 components/camel-knative/camel-knative-api/pom.xml |   4 -
 .../component/knative/spi/KnativeEnvironment.java  | 100 +++++++++++----------
 .../component/knative/spi/KnativeTransport.java    |   4 +-
 .../knative/spi/KnativeEnvironmentTest.java        |  19 ++--
 .../camel-knative/camel-knative-http/pom.xml       |   4 -
 .../knative/http/KnativeHttpConsumer.java          |   4 +-
 .../knative/http/KnativeHttpProducer.java          |  24 ++---
 .../component/knative/http/KnativeHttpSupport.java |   2 +-
 .../knative/http/KnativeHttpTransport.java         |   4 +-
 .../component/knative/http/KnativeHttpTest.java    |  74 ++++++---------
 .../knative/http/KnativeHttpTestSupport.java       |   4 +-
 .../http/assertions/HttpServerRequestAssert.java   |   2 -
 .../knative/test/KnativeEnvironmentSupport.java    |  38 ++++----
 .../camel/component/knative/KnativeEndpoint.java   |  23 +++--
 .../knative/ce/AbstractCloudEventProcessor.java    |   4 +-
 .../component/knative/ce/CloudEventProcessor.java  |   4 +-
 .../component/knative/ce/CloudEventProcessors.java |   4 +-
 .../component/knative/KnativeComponentTest.java    |  22 +++--
 .../component/knative/KnativeTransportNoop.java    |   4 +-
 .../src/test/resources/environment.json            |  11 +--
 .../{environment.json => environment_classic.json} |   9 +-
 26 files changed, 176 insertions(+), 200 deletions(-)

diff --git a/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java b/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java
index bbb649a..4e275c3 100644
--- a/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java
+++ b/camel-k-main/camel-k-runtime-main/src/test/java/org/apache/camel/k/main/RuntimeTest.java
@@ -167,7 +167,7 @@ public class RuntimeTest {
     public void testLoadJavaSourceWrap() throws Exception {
         KnativeComponent component = new KnativeComponent();
         component.setEnvironment(KnativeEnvironment.on(
-            KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.sink, "sink", "localhost", AvailablePortFinder.getNextAvailable())
+            KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.sink, "sink", "http://localhost:" + AvailablePortFinder.getNextAvailable())
         ));
 
         PlatformHttpServiceContextCustomizer phsc = new PlatformHttpServiceContextCustomizer();
diff --git a/camel-k-quarkus/camel-k-quarkus-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java b/camel-k-quarkus/camel-k-quarkus-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java
index a17d85d..877e5b0 100644
--- a/camel-k-quarkus/camel-k-quarkus-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java
+++ b/camel-k-quarkus/camel-k-quarkus-knative/deployment/src/main/java/org/apache/camel/k/quarkus/knative/deployment/DeploymentProcessor.java
@@ -46,7 +46,7 @@ public class DeploymentProcessor {
     List<ReflectiveClassBuildItem> reflectiveClasses() {
         return List.of(
             new ReflectiveClassBuildItem(true, false, KnativeEnvironment.class),
-            new ReflectiveClassBuildItem(true, false, KnativeEnvironment.KnativeServiceDefinition.class)
+            new ReflectiveClassBuildItem(true, false, KnativeEnvironment.KnativeResource.class)
         );
     }
 
diff --git a/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingContextCustomizer.java b/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingContextCustomizer.java
index 5ef35ca..f409956 100644
--- a/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingContextCustomizer.java
+++ b/camel-k-runtime-knative/src/main/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingContextCustomizer.java
@@ -51,7 +51,7 @@ public class KnativeSinkBindingContextCustomizer implements ContextCustomizer {
         });
     }
 
-    private Optional<KnativeEnvironment.KnativeServiceDefinition> createSyntheticDefinition(
+    private Optional<KnativeEnvironment.KnativeResource> createSyntheticDefinition(
             CamelContext camelContext,
             String sinkName) {
 
diff --git a/camel-k-runtime-knative/src/test/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingCustomizerTest.java b/camel-k-runtime-knative/src/test/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingCustomizerTest.java
index c92199b..fc870be 100644
--- a/camel-k-runtime-knative/src/test/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingCustomizerTest.java
+++ b/camel-k-runtime-knative/src/test/java/org/apache/camel/k/knative/customizer/KnativeSinkBindingCustomizerTest.java
@@ -70,7 +70,7 @@ public class KnativeSinkBindingCustomizerTest {
                 assertThat(sc.getKind()).isEqualTo("InMemoryChannel");
             });
 
-            var svc = runtime.getRegistry().lookupByNameAndType("mychannel", KnativeEnvironment.KnativeServiceDefinition.class);
+            var svc = runtime.getRegistry().lookupByNameAndType("mychannel", KnativeEnvironment.KnativeResource.class);
             assertThat(svc).isNotNull();
             assertThat(svc.getUrl()).isEqualTo("http://theurl");
             assertThat(svc.getName()).isEqualTo("mychannel");
@@ -123,7 +123,7 @@ public class KnativeSinkBindingCustomizerTest {
             });
             context.start();
 
-            var services = context.getRegistry().findByType(KnativeEnvironment.KnativeServiceDefinition.class);
+            var services = context.getRegistry().findByType(KnativeEnvironment.KnativeResource.class);
 
             assertThat(services).hasSize(1);
             assertThat(services).first().hasFieldOrPropertyWithValue("name", "mySynk");
diff --git a/camel-k-runtime-knative/src/test/java/org/apache/camel/k/loader/knative/KnativeSourceRoutesLoaderTest.java b/camel-k-runtime-knative/src/test/java/org/apache/camel/k/loader/knative/KnativeSourceRoutesLoaderTest.java
index 2b7d4ff..ceda4f6 100644
--- a/camel-k-runtime-knative/src/test/java/org/apache/camel/k/loader/knative/KnativeSourceRoutesLoaderTest.java
+++ b/camel-k-runtime-knative/src/test/java/org/apache/camel/k/loader/knative/KnativeSourceRoutesLoaderTest.java
@@ -73,7 +73,7 @@ public class KnativeSourceRoutesLoaderTest {
 
         KnativeComponent component = new KnativeComponent();
         component.setEnvironment(KnativeEnvironment.on(
-            KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.sink, "sink", "localhost", runtime.port)
+            KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.sink, "sink", "http://localhost:" + runtime.port)
         ));
 
         CamelContext context = runtime.getCamelContext();
diff --git a/components/camel-knative/camel-knative-api/pom.xml b/components/camel-knative/camel-knative-api/pom.xml
index e995913..3941b4e 100644
--- a/components/camel-knative/camel-knative-api/pom.xml
+++ b/components/camel-knative/camel-knative-api/pom.xml
@@ -39,10 +39,6 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-cloud</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeEnvironment.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeEnvironment.java
index a84f604..7e88425 100644
--- a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeEnvironment.java
+++ b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeEnvironment.java
@@ -23,7 +23,7 @@ import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -31,30 +31,37 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.camel.CamelContext;
-import org.apache.camel.impl.cloud.DefaultServiceDefinition;
 import org.apache.camel.support.ResourceHelper;
 
 /*
  * Assuming it is loaded from a json for now
  */
 public class KnativeEnvironment {
-    private final List<KnativeServiceDefinition> services;
+    private final List<KnativeResource> resources;
 
-    @JsonCreator
-    public KnativeEnvironment(
-        @JsonProperty(value = "services", required = true) List<KnativeServiceDefinition> services) {
+    public KnativeEnvironment() {
+        this.resources = new ArrayList<>();
+    }
+
+    public KnativeEnvironment(Collection<KnativeResource> resources) {
+        this.resources = new ArrayList<>(resources);
+    }
 
-        this.services = new ArrayList<>(services);
+    @JsonAlias("services")
+    @JsonProperty(value = "resources", required = true)
+    public List<KnativeResource> getResources() {
+        return resources;
     }
 
-    public Stream<KnativeServiceDefinition> stream() {
-        return services.stream();
+    public Stream<KnativeResource> stream() {
+        return resources.stream();
     }
 
-    public Stream<KnativeServiceDefinition> lookup(Knative.Type type, String name) {
+    public Stream<KnativeResource> lookup(Knative.Type type, String name) {
         return stream().filter(definition -> definition.matches(type, name));
     }
 
@@ -80,8 +87,7 @@ public class KnativeEnvironment {
             //         {
             //              "type": "channel|endpoint|event",
             //              "name": "",
-            //              "host": "",
-            //              "port": "",
+            //              "url": "",
             //              "metadata": {
             //                  "service.path": "",
             //                  "filter.header": "value",
@@ -100,8 +106,13 @@ public class KnativeEnvironment {
         }
     }
 
-    public static KnativeEnvironment on(KnativeServiceDefinition... definitions) {
-        return new KnativeEnvironment(Arrays.asList(definitions));
+    public static KnativeEnvironment on(KnativeResource... definitions) {
+        KnativeEnvironment env = new KnativeEnvironment();
+        for (KnativeResource definition : definitions) {
+            env.getResources().add(definition);
+        }
+
+        return env;
     }
 
     public static KnativeServiceBuilder serviceBuilder(Knative.Type type, String name) {
@@ -114,12 +125,10 @@ public class KnativeEnvironment {
     //
     // ************************
 
-
     public static final class KnativeServiceBuilder {
         private final Knative.Type type;
         private final String name;
-        private String host;
-        private Integer port;
+        private String url;
         private Map<String, String> metadata;
 
         public KnativeServiceBuilder(Knative.Type type, String name) {
@@ -127,13 +136,8 @@ public class KnativeEnvironment {
             this.name = name;
         }
 
-        public KnativeServiceBuilder withHost(String host) {
-            this.host = host;
-            return this;
-        }
-
-        public KnativeServiceBuilder withPort(Integer port) {
-            this.port = port;
+        public KnativeServiceBuilder withUrl(String url) {
+            this.url = url;
             return this;
         }
 
@@ -170,47 +174,49 @@ public class KnativeEnvironment {
             return this;
         }
 
-        public KnativeServiceDefinition build() {
-            return new KnativeServiceDefinition(type, name, host, port, metadata);
+        public KnativeResource build() {
+            return new KnativeResource(type, name, url, metadata);
         }
     }
 
-    public static final class KnativeServiceDefinition extends DefaultServiceDefinition {
+    public static final class KnativeResource {
+        private final String name;
+        private final String url;
+        private final Map<String, String> meta;
+
         @JsonCreator
-        public KnativeServiceDefinition(
+        public KnativeResource(
             @JsonProperty(value = "type", required = true) Knative.Type type,
             @JsonProperty(value = "name", required = true) String name,
-            @JsonProperty(value = "host", required = false) String host,
-            @JsonProperty(value = "port", required = false) Integer port,
+            @JsonProperty(value = "url", required = false) String url,
             @JsonProperty(value = "metadata", required = false) Map<String, String> metadata) {
 
-            super(
-                name,
-                host,
-                port == null ? -1 : port,
-                KnativeSupport.mergeMaps(
-                    metadata,
-                    Map.of(
-                        Knative.KNATIVE_TYPE, type.name())
-                )
+            this.name = name;
+            this.url = url;
+            this.meta = KnativeSupport.mergeMaps(
+                metadata,
+                Map.of(
+                    Knative.KNATIVE_TYPE, type.name())
             );
         }
 
-        @Override
+        public String getName() {
+            return this.name;
+        }
+
         public String getHost() {
             String urlAsString = getUrl();
             if (urlAsString != null) {
                 try {
                     return new URL(urlAsString).getHost();
                 } catch (MalformedURLException ignored) {
-                    // ignored
+                    // ignore
                 }
             }
 
-            return super.getHost();
+            return null;
         }
 
-        @Override
         public int getPort() {
             String urlAsString = getUrl();
             if (urlAsString != null) {
@@ -221,7 +227,11 @@ public class KnativeEnvironment {
                 }
             }
 
-            return super.getPort();
+            return -1;
+        }
+
+        public Map<String, String> getMetadata() {
+            return this.meta;
         }
 
         public Knative.Type getType() {
@@ -254,7 +264,7 @@ public class KnativeEnvironment {
         }
 
         public String getUrl() {
-            return getMetadata(Knative.SERVICE_META_URL);
+            return this.url != null ? this.url : getMetadata(Knative.SERVICE_META_URL);
         }
 
         public String getMetadata(String key) {
diff --git a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
index 6b0cb55..40ce794 100644
--- a/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
+++ b/components/camel-knative/camel-knative-api/src/main/java/org/apache/camel/component/knative/spi/KnativeTransport.java
@@ -34,7 +34,7 @@ public interface KnativeTransport extends Service {
     Producer createProducer(
         Endpoint endpoint,
         KnativeTransportConfiguration configuration,
-        KnativeEnvironment.KnativeServiceDefinition service);
+        KnativeEnvironment.KnativeResource service);
 
     /**
      * Create a camel {@link Consumer} in place of the original endpoint for a specific protocol.
@@ -47,5 +47,5 @@ public interface KnativeTransport extends Service {
     Consumer createConsumer(
         Endpoint endpoint,
         KnativeTransportConfiguration configuration,
-        KnativeEnvironment.KnativeServiceDefinition service, Processor processor);
+        KnativeEnvironment.KnativeResource service, Processor processor);
 }
diff --git a/components/camel-knative/camel-knative-api/src/test/java/org/apache/camel/component/knative/spi/KnativeEnvironmentTest.java b/components/camel-knative/camel-knative-api/src/test/java/org/apache/camel/component/knative/spi/KnativeEnvironmentTest.java
index 93b898c..6586964 100644
--- a/components/camel-knative/camel-knative-api/src/test/java/org/apache/camel/component/knative/spi/KnativeEnvironmentTest.java
+++ b/components/camel-knative/camel-knative-api/src/test/java/org/apache/camel/component/knative/spi/KnativeEnvironmentTest.java
@@ -18,23 +18,26 @@ package org.apache.camel.component.knative.spi;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class KnativeEnvironmentTest {
 
-    @Test
-    public void testKnativeEnvironmentDeserializationFromString() throws Exception {
-        CamelContext context = new DefaultCamelContext();
 
-        KnativeEnvironment env = KnativeEnvironment.mandatoryLoadFromSerializedString(
-            context,
-            "{\"services\":[{\"type\":\"endpoint\",\"name\":\"knative3\",\"metadata\":{\"camel.endpoint.kind\":\"source\",\"knative.apiVersion\":\"serving.knative.dev/v1\",\"knative.kind\":\"Service\",\"service.path\":\"/\"}}]}"
-        );
+    @ParameterizedTest
+    @ValueSource(strings = {
+        "{\"services\":[{\"type\":\"endpoint\",\"name\":\"knative3\",\"metadata\":{\"camel.endpoint.kind\":\"source\",\"knative.apiVersion\":\"serving.knative.dev/v1\",\"knative.kind\":\"Service\",\"service.path\":\"/\"}}]}",
+        "{\"resources\":[{\"type\":\"endpoint\",\"name\":\"knative3\",\"metadata\":{\"camel.endpoint.kind\":\"source\",\"knative.apiVersion\":\"serving.knative.dev/v1\",\"knative.kind\":\"Service\",\"service.path\":\"/\"}}]}"
+    })
+    public void testKnativeEnvironmentDeserializationFromString(String content) throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        KnativeEnvironment env = KnativeEnvironment.mandatoryLoadFromSerializedString(context, content);
 
         assertThat(env.lookup(Knative.Type.endpoint, "knative3"))
             .first()
+                .hasFieldOrPropertyWithValue("url", null)
                 .hasFieldOrPropertyWithValue("port", -1)
                 .hasFieldOrPropertyWithValue("host", null);
     }
diff --git a/components/camel-knative/camel-knative-http/pom.xml b/components/camel-knative/camel-knative-http/pom.xml
index f118982..d5b1901 100644
--- a/components/camel-knative/camel-knative-http/pom.xml
+++ b/components/camel-knative/camel-knative-http/pom.xml
@@ -39,10 +39,6 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-cloud</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.apache.camel.k</groupId>
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
index fb60431..ecd1dc7 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpConsumer.java
@@ -51,7 +51,7 @@ public class KnativeHttpConsumer extends DefaultConsumer {
 
     private final KnativeTransportConfiguration configuration;
     private final Predicate<HttpServerRequest> filter;
-    private final KnativeEnvironment.KnativeServiceDefinition serviceDefinition;
+    private final KnativeEnvironment.KnativeResource serviceDefinition;
     private final VertxPlatformHttpRouter router;
     private final HeaderFilterStrategy headerFilterStrategy;
 
@@ -61,7 +61,7 @@ public class KnativeHttpConsumer extends DefaultConsumer {
     public KnativeHttpConsumer(
         KnativeTransportConfiguration configuration,
         Endpoint endpoint,
-        KnativeEnvironment.KnativeServiceDefinition serviceDefinition,
+        KnativeEnvironment.KnativeResource serviceDefinition,
         VertxPlatformHttpRouter router,
         Processor processor) {
 
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java
index 69a602a..a4e7923 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpProducer.java
@@ -47,7 +47,7 @@ import org.slf4j.LoggerFactory;
 public class KnativeHttpProducer extends DefaultAsyncProducer {
     private static final Logger LOGGER = LoggerFactory.getLogger(KnativeHttpProducer.class);
 
-    private final KnativeEnvironment.KnativeServiceDefinition serviceDefinition;
+    private final KnativeEnvironment.KnativeResource serviceDefinition;
     private final Vertx vertx;
     private final WebClientOptions clientOptions;
     private final HeaderFilterStrategy headerFilterStrategy;
@@ -57,7 +57,7 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
 
     public KnativeHttpProducer(
             Endpoint endpoint,
-            KnativeEnvironment.KnativeServiceDefinition serviceDefinition,
+            KnativeEnvironment.KnativeResource serviceDefinition,
             Vertx vertx,
             WebClientOptions clientOptions) {
         super(endpoint);
@@ -92,6 +92,13 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
         final Message message = exchange.getMessage();
         final String host = getHost(serviceDefinition);
 
+        if (ObjectHelper.isEmpty(host)) {
+            exchange.setException(new CamelException("HTTP operation failed because host is not defined"));
+            callback.done(true);
+
+            return true;
+        }
+
         MultiMap headers = MultiMap.caseInsensitiveMultiMap();
         headers.add(HttpHeaders.CONTENT_LENGTH, Integer.toString(payload.length));
         headers.add(HttpHeaders.HOST, host);
@@ -107,13 +114,6 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
             }
         }
 
-        if (ObjectHelper.isEmpty(host)) {
-            exchange.setException(new CamelException("HTTP operation failed because host is not defined"));
-            callback.done(true);
-
-            return true;
-        }
-
         client.postAbs(this.uri.get())
             .putHeaders(headers)
             .sendBuffer(Buffer.buffer(payload), response -> {
@@ -180,7 +180,7 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
         }
     }
 
-    private String computeUrl(KnativeEnvironment.KnativeServiceDefinition definition) {
+    private String computeUrl(KnativeEnvironment.KnativeResource definition) {
         String url = definition.getUrl();
         if (url == null) {
             int port = definition.getPortOrDefault(KnativeHttpTransport.DEFAULT_PORT);
@@ -196,7 +196,7 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
         return getEndpoint().getCamelContext().resolvePropertyPlaceholders(url);
     }
 
-    private String getHost(KnativeEnvironment.KnativeServiceDefinition definition) {
+    private String getHost(KnativeEnvironment.KnativeResource definition) {
         if (definition.getHost() != null) {
             return serviceDefinition.getHost();
         }
@@ -212,7 +212,7 @@ public class KnativeHttpProducer extends DefaultAsyncProducer {
             }
         }
 
-        throw new IllegalStateException("Unable to determine the Host value");
+        return null;
     }
 
 }
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java
index 83995a9..cf68524 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpSupport.java
@@ -51,7 +51,7 @@ public final class KnativeHttpSupport {
         headers.put(key, value);
     }
 
-    public static Predicate<HttpServerRequest> createFilter(KnativeEnvironment.KnativeServiceDefinition serviceDefinition) {
+    public static Predicate<HttpServerRequest> createFilter(KnativeEnvironment.KnativeResource serviceDefinition) {
         Map<String, String> filters = serviceDefinition.getMetadata().entrySet().stream()
             .filter(e -> e.getKey().startsWith(Knative.KNATIVE_FILTER_PREFIX))
             .collect(Collectors.toMap(
diff --git a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
index fc51004..213f2e3 100644
--- a/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
+++ b/components/camel-knative/camel-knative-http/src/main/java/org/apache/camel/component/knative/http/KnativeHttpTransport.java
@@ -88,12 +88,12 @@ public class KnativeHttpTransport extends ServiceSupport implements CamelContext
     // *****************************
 
     @Override
-    public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeServiceDefinition service) {
+    public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service) {
         return new KnativeHttpProducer(endpoint, service, this.router.vertx(), vertxHttpClientOptions);
     }
 
     @Override
-    public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeServiceDefinition service, Processor processor) {
+    public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration config, KnativeEnvironment.KnativeResource service, Processor processor) {
         return new KnativeHttpConsumer(config, endpoint, service, this.router, processor);
     }
 
diff --git a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
index b61418f..6accb64 100644
--- a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
+++ b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTest.java
@@ -208,10 +208,8 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "myEndpoint",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d/a/path", platformHttpHost, platformHttpPort),
                 Map.of(
-                    Knative.SERVICE_META_PATH, "/a/path",
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
                 ))
@@ -250,8 +248,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "myEndpoint",
-                "none",
-                -1,
+                null,
                 Map.of(
                     Knative.SERVICE_META_PATH, "/does/not/exist",
                     Knative.SERVICE_META_URL, String.format("http://localhost:%d/a/path", platformHttpPort),
@@ -697,8 +694,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "to",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event.to",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -744,8 +740,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "to",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -785,8 +780,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "test",
-                "",
-                platformHttpPort,
+                null,
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -817,8 +811,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "test",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -837,7 +830,7 @@ public class KnativeHttpTest {
         Exchange exchange = template.request("direct:start", e -> e.getMessage().setBody(""));
         assertThat(exchange.isFailed()).isTrue();
         assertThat(exchange.getException()).isInstanceOf(CamelException.class);
-        assertThat(exchange.getException()).hasMessageStartingWith("HTTP operation failed invoking http://localhost:" + platformHttpPort + "/");
+        assertThat(exchange.getException()).hasMessageStartingWith("HTTP operation failed invoking http://localhost:" + platformHttpPort);
     }
 
     @ParameterizedTest
@@ -953,8 +946,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -991,8 +983,7 @@ public class KnativeHttpTest {
             event(
                 Knative.EndpointKind.sink,
                 "default",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1037,8 +1028,7 @@ public class KnativeHttpTest {
             event(
                 Knative.EndpointKind.sink,
                 "default",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain",
@@ -1174,8 +1164,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "myEndpoint",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1210,7 +1199,6 @@ public class KnativeHttpTest {
                 Knative.EndpointKind.source,
                 "messages",
                 null,
-                -1,
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1218,8 +1206,7 @@ public class KnativeHttpTest {
             channel(
                 Knative.EndpointKind.sink,
                 "messages",
-                platformHttpHost,
-                platformHttpPort,
+                String.format("http://%s:%d", platformHttpHost, platformHttpPort),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1227,8 +1214,7 @@ public class KnativeHttpTest {
             channel(
                 Knative.EndpointKind.sink,
                 "words",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1368,7 +1354,7 @@ public class KnativeHttpTest {
     @ParameterizedTest
     @EnumSource(CloudEvents.class)
     void testOrdering(CloudEvent ce) throws Exception {
-        List<KnativeEnvironment.KnativeServiceDefinition> hops = new Random()
+        List<KnativeEnvironment.KnativeResource> hops = new Random()
             .ints(0, 100)
             .distinct()
             .limit(10)
@@ -1385,7 +1371,7 @@ public class KnativeHttpTest {
                 .toF("http://localhost:%d", platformHttpPort)
                 .convertBodyTo(String.class);
 
-            for (KnativeEnvironment.KnativeServiceDefinition definition : hops) {
+            for (KnativeEnvironment.KnativeResource definition : hops) {
                 b.fromF("knative:endpoint/%s", definition.getName())
                     .routeId(definition.getName())
                     .setBody().constant(definition.getName());
@@ -1395,7 +1381,7 @@ public class KnativeHttpTest {
         context.start();
 
         List<String> hopsDone = new ArrayList<>();
-        for (KnativeEnvironment.KnativeServiceDefinition definition : hops) {
+        for (KnativeEnvironment.KnativeResource definition : hops) {
             hopsDone.add(definition.getName());
 
             Exchange result = template.request(
@@ -1422,8 +1408,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1476,8 +1461,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1522,8 +1506,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain",
@@ -1569,8 +1552,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1616,8 +1598,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1662,8 +1643,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1704,8 +1684,7 @@ public class KnativeHttpTest {
             endpoint(
                 Knative.EndpointKind.sink,
                 "ep",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.KNATIVE_EVENT_TYPE, "org.apache.camel.event",
                     Knative.CONTENT_TYPE, "text/plain"
@@ -1747,8 +1726,7 @@ public class KnativeHttpTest {
             event(
                 Knative.EndpointKind.sink,
                 "event.sink",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.CONTENT_TYPE, "text/plain"
                 )),
@@ -1794,7 +1772,6 @@ public class KnativeHttpTest {
     @ParameterizedTest
     @EnumSource(CloudEvents.class)
     void testDynamicEventBridge(CloudEvent ce) throws Exception {
-        final int port = AvailablePortFinder.getNextAvailable();
         final KnativeHttpServer server = new KnativeHttpServer(context);
 
         configureKnativeComponent(
@@ -1803,8 +1780,7 @@ public class KnativeHttpTest {
             event(
                 Knative.EndpointKind.sink,
                 "default",
-                server.getHost(),
-                server.getPort(),
+                String.format("http://%s:%d", server.getHost(), server.getPort()),
                 Map.of(
                     Knative.CONTENT_TYPE, "text/plain"
                 )),
diff --git a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
index bbe209d..f0eff45 100644
--- a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
+++ b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/KnativeHttpTestSupport.java
@@ -28,11 +28,11 @@ public final class KnativeHttpTestSupport {
     private KnativeHttpTestSupport() {
     }
 
-    public static KnativeComponent configureKnativeComponent(CamelContext context, CloudEvent ce, KnativeEnvironment.KnativeServiceDefinition... definitions) {
+    public static KnativeComponent configureKnativeComponent(CamelContext context, CloudEvent ce, KnativeEnvironment.KnativeResource... definitions) {
         return configureKnativeComponent(context, ce, Arrays.asList(definitions));
     }
 
-    public static KnativeComponent configureKnativeComponent(CamelContext context, CloudEvent ce, List<KnativeEnvironment.KnativeServiceDefinition> definitions) {
+    public static KnativeComponent configureKnativeComponent(CamelContext context, CloudEvent ce, List<KnativeEnvironment.KnativeResource> definitions) {
         KnativeComponent component = context.getComponent("knative", KnativeComponent.class);
         component.setCloudEventsSpecVersion(ce.version());
         component.setEnvironment(new KnativeEnvironment(definitions));
diff --git a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/assertions/HttpServerRequestAssert.java b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/assertions/HttpServerRequestAssert.java
index 19250b4..3666e5e 100644
--- a/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/assertions/HttpServerRequestAssert.java
+++ b/components/camel-knative/camel-knative-http/src/test/java/org/apache/camel/component/knative/http/assertions/HttpServerRequestAssert.java
@@ -32,7 +32,6 @@ public class HttpServerRequestAssert extends AbstractAssert<HttpServerRequestAss
         return new HttpServerRequestAssert(actual);
     }
 
-
     public AbstractStringAssert<?> header(String name) {
         isNotNull();
 
@@ -43,7 +42,6 @@ public class HttpServerRequestAssert extends AbstractAssert<HttpServerRequestAss
         isNotNull();
 
         if (Objects.isNull(actual.getHeader(name))) {
-            //failWithMessage("Expected header name to be <%s> but was <%s>", name, actual.getName());
             failWithMessage("Expected header %s not present", name);
         }
 
diff --git a/components/camel-knative/camel-knative-test/src/main/java/org/apache/camel/component/knative/test/KnativeEnvironmentSupport.java b/components/camel-knative/camel-knative-test/src/main/java/org/apache/camel/component/knative/test/KnativeEnvironmentSupport.java
index e775b9d..b00ccf1 100644
--- a/components/camel-knative/camel-knative-test/src/main/java/org/apache/camel/component/knative/test/KnativeEnvironmentSupport.java
+++ b/components/camel-knative/camel-knative-test/src/main/java/org/apache/camel/component/knative/test/KnativeEnvironmentSupport.java
@@ -25,79 +25,73 @@ public final class KnativeEnvironmentSupport {
     private KnativeEnvironmentSupport() {
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition endpoint(Knative.EndpointKind endpointKind, String name, String host, int port) {
+    public static KnativeEnvironment.KnativeResource endpoint(Knative.EndpointKind endpointKind, String name, String url) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.endpoint, name)
-            .withHost(host)
-            .withPort(port)
+            .withUrl(url)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, endpointKind)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition endpoint(Knative.EndpointKind endpointKind, String name, String host, int port, Map<String, String> metadata) {
+    public static KnativeEnvironment.KnativeResource endpoint(Knative.EndpointKind endpointKind, String name, String url, Map<String, String> metadata) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.endpoint, name)
-            .withHost(host)
-            .withPort(port)
+            .withUrl(url)
             .withMeta(metadata)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, endpointKind)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition sourceEndpoint(String name, Map<String, String> metadata) {
+    public static KnativeEnvironment.KnativeResource sourceEndpoint(String name, Map<String, String> metadata) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.endpoint, name)
             .withMeta(metadata)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, Knative.EndpointKind.source.name())
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition channel(Knative.EndpointKind endpointKind, String name, String host, int port) {
+    public static KnativeEnvironment.KnativeResource channel(Knative.EndpointKind endpointKind, String name, String url) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.channel, name)
-            .withHost(host)
-            .withPort(port)
+            .withUrl(url)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, endpointKind)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition channel(Knative.EndpointKind endpointKind, String name, String host, int port, Map<String, String> metadata) {
+    public static KnativeEnvironment.KnativeResource channel(Knative.EndpointKind endpointKind, String name, String url, Map<String, String> metadata) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.channel, name)
-            .withHost(host)
-            .withPort(port)
+            .withUrl(url)
             .withMeta(metadata)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, endpointKind)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition sourceChannel(String name, Map<String, String> metadata) {
+    public static KnativeEnvironment.KnativeResource sourceChannel(String name, Map<String, String> metadata) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.channel, name)
             .withMeta(metadata)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, Knative.EndpointKind.source)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition event(Knative.EndpointKind endpointKind, String name, String host, int port) {
+    public static KnativeEnvironment.KnativeResource event(Knative.EndpointKind endpointKind, String name, String url) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.event, name)
-            .withHost(host)
-            .withPort(port)
+            .withUrl(url)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, endpointKind)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition sourceEvent(String name) {
+    public static KnativeEnvironment.KnativeResource sourceEvent(String name) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.event, name)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, Knative.EndpointKind.source)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition sourceEvent(String name, Map<String, String> metadata) {
+    public static KnativeEnvironment.KnativeResource sourceEvent(String name, Map<String, String> metadata) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.event, name)
             .withMeta(metadata)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, Knative.EndpointKind.source)
             .build();
     }
 
-    public static KnativeEnvironment.KnativeServiceDefinition event(Knative.EndpointKind endpointKind, String name, String host, int port, Map<String, String> metadata) {
+    public static KnativeEnvironment.KnativeResource event(Knative.EndpointKind endpointKind, String name, String url, Map<String, String> metadata) {
         return KnativeEnvironment.serviceBuilder(Knative.Type.event, name)
-            .withHost(host)
-            .withPort(port)
+            .withUrl(url)
             .withMeta(metadata)
             .withMeta(Knative.CAMEL_ENDPOINT_KIND, endpointKind)
             .build();
diff --git a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
index 9cac875..0d0f69e 100644
--- a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
+++ b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/KnativeEndpoint.java
@@ -74,7 +74,7 @@ public class KnativeEndpoint extends DefaultEndpoint {
 
     @Override
     public Producer createProducer() throws Exception {
-        final KnativeEnvironment.KnativeServiceDefinition service = lookupServiceDefinition(Knative.EndpointKind.sink);
+        final KnativeEnvironment.KnativeResource service = lookupServiceDefinition(Knative.EndpointKind.sink);
         final Processor ceProcessor = cloudEvent.producer(this, service);
         final Producer producer = getComponent().getTransport().createProducer(this, createTransportConfiguration(service), service);
 
@@ -90,7 +90,7 @@ public class KnativeEndpoint extends DefaultEndpoint {
 
     @Override
     public Consumer createConsumer(Processor processor) throws Exception {
-        final KnativeEnvironment.KnativeServiceDefinition service = lookupServiceDefinition(Knative.EndpointKind.source);
+        final KnativeEnvironment.KnativeResource service = lookupServiceDefinition(Knative.EndpointKind.source);
         final Processor ceProcessor = cloudEvent.consumer(this, service);
         final Processor replyProcessor = configuration.isReplyWithCloudEvent() ? cloudEvent.producer(this, service) : null;
         final Processor pipeline = Pipeline.newInstance(getCamelContext(), ceProcessor, processor, replyProcessor);
@@ -136,7 +136,7 @@ public class KnativeEndpoint extends DefaultEndpoint {
         }
     }
 
-    KnativeEnvironment.KnativeServiceDefinition lookupServiceDefinition(Knative.EndpointKind endpointKind) {
+    KnativeEnvironment.KnativeResource lookupServiceDefinition(Knative.EndpointKind endpointKind) {
         String serviceName = configuration.getServiceName();
 
         //
@@ -145,7 +145,7 @@ public class KnativeEndpoint extends DefaultEndpoint {
         // the endpoint uri but for events it is not possible so default should always be there for events
         // unless the service name is define as an endpoint option.
         //
-        KnativeEnvironment.KnativeServiceDefinition service = lookupServiceDefinition(serviceName, endpointKind)
+        KnativeEnvironment.KnativeResource service = lookupServiceDefinition(serviceName, endpointKind)
             .or(() -> lookupServiceDefinition("default", endpointKind))
             .orElseThrow(() -> new IllegalArgumentException(String.format("Unable to find a service definition for %s/%s/%s", type, endpointKind, serviceName)));
 
@@ -182,23 +182,22 @@ public class KnativeEndpoint extends DefaultEndpoint {
             metadata.put(Knative.KNATIVE_FILTER_PREFIX + cloudEvent.cloudEvent().mandatoryAttribute(CloudEvent.CAMEL_CLOUD_EVENT_TYPE).http(), serviceName);
         }
 
-        return new KnativeEnvironment.KnativeServiceDefinition(
+        return new KnativeEnvironment.KnativeResource(
             service.getType(),
             service.getName(),
-            service.getHost(),
-            service.getPort(),
+            service.getUrl(),
             metadata
         );
     }
 
-    Optional<KnativeEnvironment.KnativeServiceDefinition> lookupServiceDefinition(String name, Knative.EndpointKind endpointKind) {
+    Optional<KnativeEnvironment.KnativeResource> lookupServiceDefinition(String name, Knative.EndpointKind endpointKind) {
         return servicesDefinitions()
             .filter(definition -> definition.matches(this.type, name))
             .filter(serviceFilter(endpointKind))
             .findFirst();
     }
 
-    private KnativeTransportConfiguration createTransportConfiguration(KnativeEnvironment.KnativeServiceDefinition definition) {
+    private KnativeTransportConfiguration createTransportConfiguration(KnativeEnvironment.KnativeResource definition) {
         return new KnativeTransportConfiguration(
             this.cloudEvent.cloudEvent(),
             !this.configuration.isReplyWithCloudEvent(),
@@ -209,14 +208,14 @@ public class KnativeEndpoint extends DefaultEndpoint {
         );
     }
 
-    private Stream<KnativeEnvironment.KnativeServiceDefinition> servicesDefinitions() {
+    private Stream<KnativeEnvironment.KnativeResource> servicesDefinitions() {
         return Stream.concat(
-            getCamelContext().getRegistry().findByType(KnativeEnvironment.KnativeServiceDefinition.class).stream(),
+            getCamelContext().getRegistry().findByType(KnativeEnvironment.KnativeResource.class).stream(),
             this.configuration.getEnvironment().stream()
         );
     }
 
-    private Predicate<KnativeEnvironment.KnativeServiceDefinition> serviceFilter(Knative.EndpointKind endpointKind) {
+    private Predicate<KnativeEnvironment.KnativeResource> serviceFilter(Knative.EndpointKind endpointKind) {
         return s -> {
             final String type = s.getMetadata(Knative.CAMEL_ENDPOINT_KIND);
             if (!Objects.equals(endpointKind.name(), type)) {
diff --git a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/AbstractCloudEventProcessor.java b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/AbstractCloudEventProcessor.java
index 8c9be63..b24bfcb 100644
--- a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/AbstractCloudEventProcessor.java
+++ b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/AbstractCloudEventProcessor.java
@@ -48,7 +48,7 @@ abstract class AbstractCloudEventProcessor implements CloudEventProcessor {
 
     @SuppressWarnings("unchecked")
     @Override
-    public Processor consumer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeServiceDefinition service) {
+    public Processor consumer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeResource service) {
         return exchange -> {
             if (Objects.equals(exchange.getIn().getHeader(Exchange.CONTENT_TYPE), Knative.MIME_BATCH_CONTENT_MODE)) {
                 throw new UnsupportedOperationException("Batched CloudEvents are not yet supported");
@@ -75,7 +75,7 @@ abstract class AbstractCloudEventProcessor implements CloudEventProcessor {
     protected abstract void decodeStructuredContent(Exchange exchange, Map<String, Object> content);
 
     @Override
-    public Processor producer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeServiceDefinition service) {
+    public Processor producer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeResource service) {
         final CloudEvent ce = cloudEvent();
         final Logger logger = LoggerFactory.getLogger(getClass());
 
diff --git a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessor.java b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessor.java
index 4c76029..4e39295 100644
--- a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessor.java
+++ b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessor.java
@@ -23,6 +23,6 @@ import org.apache.camel.component.knative.spi.KnativeEnvironment;
 
 public interface CloudEventProcessor {
     CloudEvent cloudEvent();
-    Processor consumer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeServiceDefinition service);
-    Processor producer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeServiceDefinition service);
+    Processor consumer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeResource service);
+    Processor producer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeResource service);
 }
diff --git a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java
index fe13c02..5d3b558 100644
--- a/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java
+++ b/components/camel-knative/camel-knative/src/main/java/org/apache/camel/component/knative/ce/CloudEventProcessors.java
@@ -159,12 +159,12 @@ public enum CloudEventProcessors implements CloudEventProcessor {
     }
 
     @Override
-    public Processor consumer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeServiceDefinition service) {
+    public Processor consumer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeResource service) {
         return instance.consumer(endpoint, service);
     }
 
     @Override
-    public Processor producer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeServiceDefinition service) {
+    public Processor producer(KnativeEndpoint endpoint, KnativeEnvironment.KnativeResource service) {
         return instance.producer(endpoint, service);
     }
 
diff --git a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java
index 74272c5..dafe66a 100644
--- a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java
+++ b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeComponentTest.java
@@ -23,7 +23,8 @@ import org.apache.camel.component.knative.test.KnativeEnvironmentSupport;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.apache.camel.component.knative.spi.KnativeEnvironment.mandatoryLoadFromResource;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -56,9 +57,10 @@ public class KnativeComponentTest {
     //
     // **************************
 
-    @Test
-    void testLoadEnvironment() throws Exception {
-        KnativeEnvironment env = mandatoryLoadFromResource(context, "classpath:/environment.json");
+    @ParameterizedTest
+    @ValueSource(strings = { "classpath:/environment.json", "classpath:/environment_classic.json"})
+    void testLoadEnvironment(String resource) throws Exception {
+        KnativeEnvironment env = mandatoryLoadFromResource(context, resource);
 
         assertThat(env.stream()).hasSize(3);
         assertThat(env.stream()).anyMatch(s -> s.getType() == Knative.Type.channel);
@@ -68,8 +70,8 @@ public class KnativeComponentTest {
         component.setEnvironment(env);
         component.setTransport(new KnativeTransportNoop());
 
-        context.getRegistry().bind("ereg", KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.source, "ereg", null, -1));
-        context.getRegistry().bind("creg", KnativeEnvironmentSupport.channel(Knative.EndpointKind.source, "creg", null, -1));
+        context.getRegistry().bind("ereg", KnativeEnvironmentSupport.endpoint(Knative.EndpointKind.source, "ereg", null));
+        context.getRegistry().bind("creg", KnativeEnvironmentSupport.channel(Knative.EndpointKind.source, "creg", null));
         context.addComponent("knative", component);
 
         //
@@ -79,6 +81,10 @@ public class KnativeComponentTest {
             KnativeEndpoint endpoint = context.getEndpoint("knative:channel/c1", KnativeEndpoint.class);
             assertThat(endpoint.lookupServiceDefinition("c1", Knative.EndpointKind.source)).isPresent();
             assertThat(endpoint.lookupServiceDefinition("e1", Knative.EndpointKind.source)).isNotPresent();
+            assertThat(endpoint.lookupServiceDefinition("c1", Knative.EndpointKind.source)).isPresent().get()
+                .hasFieldOrPropertyWithValue("url", "http://localhost:8081")
+                .hasFieldOrPropertyWithValue("host", "localhost")
+                .hasFieldOrPropertyWithValue("port", 8081);
         }
         {
             KnativeEndpoint endpoint = context.getEndpoint("knative:channel/creg", KnativeEndpoint.class);
@@ -92,6 +98,10 @@ public class KnativeComponentTest {
             KnativeEndpoint endpoint = context.getEndpoint("knative:endpoint/e1", KnativeEndpoint.class);
             assertThat(endpoint.lookupServiceDefinition("e1", Knative.EndpointKind.source)).isPresent();
             assertThat(endpoint.lookupServiceDefinition("c1", Knative.EndpointKind.source)).isNotPresent();
+            assertThat(endpoint.lookupServiceDefinition("e1", Knative.EndpointKind.source)).isPresent().get()
+                .hasFieldOrPropertyWithValue("url", "http://localhost:9001")
+                .hasFieldOrPropertyWithValue("host", "localhost")
+                .hasFieldOrPropertyWithValue("port", 9001);
         }
         {
             KnativeEndpoint endpoint = context.getEndpoint("knative:endpoint/ereg", KnativeEndpoint.class);
diff --git a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java
index 784ad7d..e508a64 100644
--- a/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java
+++ b/components/camel-knative/camel-knative/src/test/java/org/apache/camel/component/knative/KnativeTransportNoop.java
@@ -37,7 +37,7 @@ public class KnativeTransportNoop implements KnativeTransport {
     }
 
     @Override
-    public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration configuration, KnativeEnvironment.KnativeServiceDefinition service) {
+    public Producer createProducer(Endpoint endpoint, KnativeTransportConfiguration configuration, KnativeEnvironment.KnativeResource service) {
         return new DefaultProducer(endpoint) {
             @Override
             public void process(Exchange exchange) throws Exception {
@@ -46,7 +46,7 @@ public class KnativeTransportNoop implements KnativeTransport {
     }
 
     @Override
-    public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration configuration, KnativeEnvironment.KnativeServiceDefinition service, Processor processor) {
+    public Consumer createConsumer(Endpoint endpoint, KnativeTransportConfiguration configuration, KnativeEnvironment.KnativeResource service, Processor processor) {
         return new DefaultConsumer(endpoint, processor);
     }
 }
diff --git a/components/camel-knative/camel-knative/src/test/resources/environment.json b/components/camel-knative/camel-knative/src/test/resources/environment.json
index 0c6a571..2c634e4 100644
--- a/components/camel-knative/camel-knative/src/test/resources/environment.json
+++ b/components/camel-knative/camel-knative/src/test/resources/environment.json
@@ -1,10 +1,9 @@
 {
-  "services": [
+  "resources": [
     {
       "type": "channel",
       "name": "c1",
-      "host": "localhost",
-      "port": "8001",
+      "url": "http://localhost:8081",
       "metadata": {
         "service.path": "",
         "knative.event.type": "",
@@ -14,8 +13,7 @@
     {
       "type": "endpoint",
       "name": "e1",
-      "host": "localhost",
-      "port": "9001",
+      "url": "http://localhost:9001",
       "metadata": {
         "service.path": "",
         "knative.event.type": "",
@@ -25,8 +23,7 @@
     {
       "type": "endpoint",
       "name": "default",
-      "host": "0.0.0.0",
-      "port": "8080",
+      "url": "http://0.0.0.0:8080",
       "metadata": {
         "service.path": "",
         "knative.event.type": "",
diff --git a/components/camel-knative/camel-knative/src/test/resources/environment.json b/components/camel-knative/camel-knative/src/test/resources/environment_classic.json
similarity index 80%
copy from components/camel-knative/camel-knative/src/test/resources/environment.json
copy to components/camel-knative/camel-knative/src/test/resources/environment_classic.json
index 0c6a571..683df58 100644
--- a/components/camel-knative/camel-knative/src/test/resources/environment.json
+++ b/components/camel-knative/camel-knative/src/test/resources/environment_classic.json
@@ -3,8 +3,7 @@
     {
       "type": "channel",
       "name": "c1",
-      "host": "localhost",
-      "port": "8001",
+      "url": "http://localhost:8081",
       "metadata": {
         "service.path": "",
         "knative.event.type": "",
@@ -14,8 +13,7 @@
     {
       "type": "endpoint",
       "name": "e1",
-      "host": "localhost",
-      "port": "9001",
+      "url": "http://localhost:9001",
       "metadata": {
         "service.path": "",
         "knative.event.type": "",
@@ -25,8 +23,7 @@
     {
       "type": "endpoint",
       "name": "default",
-      "host": "0.0.0.0",
-      "port": "8080",
+      "url": "http://0.0.0.0:8080",
       "metadata": {
         "service.path": "",
         "knative.event.type": "",