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

davsclaus pushed a commit to branch worktree-more-tui-3
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5251bad643fb7cef374b613e651ef2b99668d445
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue May 19 21:25:15 2026 +0200

    CAMEL-23553: Fix RestRegistry lazy plugin resolution
    
    RestRegistry is registered as a lazy plugin but isContextPluginInUse()
    always returns false for lazy plugins, so VertxPlatformHttpConsumer
    and MultiRestConsumer never resolved the registry even when camel-rest
    was on the classpath.
    
    Make the lazy resolution return null gracefully when camel-rest is
    absent instead of throwing, so callers can use 
PluginHelper.getRestRegistry()
    directly with a null-check.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../component/platform/http/vertx/VertxPlatformHttpConsumer.java    | 4 +---
 .../java/org/apache/camel/component/webhook/MultiRestConsumer.java  | 5 +++--
 .../java/org/apache/camel/impl/engine/AbstractCamelContext.java     | 3 +++
 .../org/apache/camel/impl/engine/DefaultCamelContextExtension.java  | 5 ++++-
 .../org/apache/camel/impl/engine/DefaultContextPluginManager.java   | 6 +++++-
 .../main/java/org/apache/camel/impl/engine/SimpleCamelContext.java  | 6 +++---
 6 files changed, 19 insertions(+), 10 deletions(-)

diff --git 
a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
 
b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
index d5a248039cd4..44c01643e995 100644
--- 
a/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
+++ 
b/components/camel-platform-http-vertx/src/main/java/org/apache/camel/component/platform/http/vertx/VertxPlatformHttpConsumer.java
@@ -116,9 +116,7 @@ public class VertxPlatformHttpConsumer extends 
DefaultConsumer
         super.doInit();
 
         // camel-rest is optional
-        if 
(getEndpoint().getCamelContext().getCamelContextExtension().isContextPluginInUse(RestRegistry.class))
 {
-            restRegistry = 
PluginHelper.getRestRegistry(getEndpoint().getCamelContext());
-        }
+        restRegistry = 
PluginHelper.getRestRegistry(getEndpoint().getCamelContext());
 
         methods = Method.parseList(getEndpoint().getHttpMethodRestrict());
         path = configureEndpointPath(getEndpoint());  // in vertx-web we 
should replace path parameters from {xxx} to :xxx syntax
diff --git 
a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/MultiRestConsumer.java
 
b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/MultiRestConsumer.java
index aed461854e55..93fe0c47721a 100644
--- 
a/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/MultiRestConsumer.java
+++ 
b/components/camel-webhook/src/main/java/org/apache/camel/component/webhook/MultiRestConsumer.java
@@ -52,8 +52,9 @@ public class MultiRestConsumer extends DefaultConsumer {
                     null, null, null, config, Collections.emptyMap());
             configurer.configure(consumer);
 
-            if 
(context.getCamelContextExtension().isContextPluginInUse(RestRegistry.class)) {
-                PluginHelper.getRestRegistry(context).addRestService(consumer, 
false, url, url, path, null, method,
+            RestRegistry rr = PluginHelper.getRestRegistry(context);
+            if (rr != null) {
+                rr.addRestService(consumer, false, url, url, path, null, 
method,
                         null, null, null, null, null, null, null, null);
             }
 
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index a66f12105837..9df88ddebe8e 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -4348,6 +4348,9 @@ public abstract class AbstractCamelContext extends 
BaseService
 
     protected RestRegistry createRestRegistry() {
         RestRegistryFactory factory = 
camelContextExtension.getRestRegistryFactory();
+        if (factory == null) {
+            return null;
+        }
         return factory.createRegistry();
     }
 
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index 9a78f6580a1c..1ad1b4f4cba2 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -776,7 +776,10 @@ class DefaultCamelContextExtension implements 
ExtendedCamelContext {
             lock.lock();
             try {
                 if (restRegistryFactory == null) {
-                    
setRestRegistryFactory(camelContext.createRestRegistryFactory());
+                    RestRegistryFactory factory = 
camelContext.createRestRegistryFactory();
+                    if (factory != null) {
+                        setRestRegistryFactory(factory);
+                    }
                 }
             } finally {
                 lock.unlock();
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
index e1d3181ba359..c3e2746b0631 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultContextPluginManager.java
@@ -41,7 +41,11 @@ public class DefaultContextPluginManager implements 
PluginManager {
         }
         if (extension instanceof Supplier supplier) {
             extension = supplier.get();
-            addContextPlugin(type, (T) extension);
+            if (extension != null) {
+                addContextPlugin(type, (T) extension);
+            } else {
+                extensions.remove(type);
+            }
         }
         return (T) extension;
     }
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index 7bf67d739dd5..089c8c20298d 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -613,10 +613,10 @@ public class SimpleCamelContext extends 
AbstractCamelContext {
 
     @Override
     protected RestRegistryFactory createRestRegistryFactory() {
-        return 
ResolverHelper.resolveMandatoryBootstrapService(getCamelContextReference(),
+        return 
ResolverHelper.resolveBootstrapService(getCamelContextReference(),
                 RestRegistryFactory.FACTORY,
-                RestRegistryFactory.class,
-                "camel-rest");
+                RestRegistryFactory.class)
+                .orElse(null);
     }
 
     @Override

Reply via email to