This is an automated email from the ASF dual-hosted git repository. coheigea pushed a commit to branch coheigea/CXF-4586 in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 6a9044fccc720d5e5520716cb01e1c7a3262c46f Author: Colm O hEigeartaigh <[email protected]> AuthorDate: Wed Oct 14 16:19:51 2026 +0100 CXF-4586: Look up bean definitions in parent contexts in SpringBeanLocator --- .../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; + } + } +}
