This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/main by this push:
new 4e60057e8ba CXF-4586: Look up bean definitions in parent contexts in
SpringBeanLocator (#3581)
4e60057e8ba is described below
commit 4e60057e8ba36a6525cb30e3e80b1cd67d3e67c0
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Thu Oct 15 09:30:36 2026 +0100
CXF-4586: Look up bean definitions in parent contexts in SpringBeanLocator
(#3581)
---
.../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;
+ }
+ }
+}