You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2026/10/15 08:53:42 UTC

(cxf) 02/03: CXF-4586: Look up bean definitions in parent contexts in SpringBeanLocator (#3581)

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

coheigea pushed a commit to branch 4.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit d3f9f4091982b8dde01468b86a47fdadc6e9f1ab
Author: Colm O hEigeartaigh <co...@users.noreply.github.com>
AuthorDate: Thu Oct 15 09:30:36 2026 +0100

    CXF-4586: Look up bean definitions in parent contexts in SpringBeanLocator (#3581)
    
    (cherry picked from commit 4e60057e8ba36a6525cb30e3e80b1cd67d3e67c0)
---
 .../apache/cxf/bus/spring/SpringBeanLocator.java   |  2 +-
 .../cxf/bus/spring/SpringBeanLocatorTest.java      | 72 ++++++++++++++++++++++
 2 files changed, 73 insertions(+), 1 deletion(-)

diff --git a/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java b/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java
index 61f5d38f3ff..0c7dd98731d 100644
--- a/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java
+++ b/core/src/main/java/org/apache/cxf/bus/spring/SpringBeanLocator.java
@@ -230,7 +230,7 @@ public class SpringBeanLocator implements ConfiguredBeanLocator {
     public boolean hasConfiguredPropertyValue(String beanName, String propertyName, String searchValue) {
         if (context.containsBean(beanName) && !passThroughs.contains(beanName)) {
             ConfigurableApplicationContext ctxt = (ConfigurableApplicationContext)context;
-            BeanDefinition def = ctxt.getBeanFactory().getBeanDefinition(beanName);
+            BeanDefinition def = ctxt.getBeanFactory().getMergedBeanDefinition(beanName);
             if (!ctxt.getBeanFactory().isSingleton(beanName) || def.isAbstract()) {
                 return false;
             }
diff --git a/core/src/test/java/org/apache/cxf/bus/spring/SpringBeanLocatorTest.java b/core/src/test/java/org/apache/cxf/bus/spring/SpringBeanLocatorTest.java
new file mode 100644
index 00000000000..f2bd0a774d4
--- /dev/null
+++ b/core/src/test/java/org/apache/cxf/bus/spring/SpringBeanLocatorTest.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.bus.spring;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.cxf.bus.extension.ExtensionManagerBus;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.context.support.GenericApplicationContext;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class SpringBeanLocatorTest {
+
+    @Test
+    public void testHasConfiguredPropertyValueInParentContext() {
+        GenericApplicationContext parent = new GenericApplicationContext();
+        parent.registerBeanDefinition("parentFactory",
+            BeanDefinitionBuilder.genericBeanDefinition(TestFactory.class)
+                .addPropertyValue("activationNamespaces", Collections.singletonList("urn:test"))
+                .getBeanDefinition());
+        parent.refresh();
+
+        GenericApplicationContext child = new GenericApplicationContext(parent);
+        child.refresh();
+
+        ExtensionManagerBus bus = new ExtensionManagerBus();
+        try {
+            SpringBeanLocator locator = new SpringBeanLocator(child, bus);
+            assertTrue(locator.hasConfiguredPropertyValue("parentFactory",
+                                                          "activationNamespaces", "urn:test"));
+            assertFalse(locator.hasConfiguredPropertyValue("parentFactory",
+                                                           "activationNamespaces", "urn:other"));
+        } finally {
+            bus.shutdown(true);
+            child.close();
+            parent.close();
+        }
+    }
+
+    public static class TestFactory {
+        private List<String> activationNamespaces;
+
+        public List<String> getActivationNamespaces() {
+            return activationNamespaces;
+        }
+
+        public void setActivationNamespaces(List<String> activationNamespaces) {
+            this.activationNamespaces = activationNamespaces;
+        }
+    }
+}