This is an automated email from the ASF dual-hosted git repository. coheigea pushed a commit to branch 3.6.x-fixes in repository https://gitbox.apache.org/repos/asf/cxf.git
commit d6656f0a339025ab5aafb3364946ce879adb7e16 Author: Colm O hEigeartaigh <[email protected]> AuthorDate: Fri Mar 6 14:04:00 2026 +0000 Use JndiHelper in AbstractMessageListenerContainer (#2918) (cherry picked from commit b22a80b341bf7e24d2df6cb95a6e01e78d3ff7aa) (cherry picked from commit 5219a75437c67b396a36ffb0a5073446ca22b3ad) # Conflicts: # rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/MessageListenerTest.java --- .../jms/util/AbstractMessageListenerContainer.java | 3 ++- .../apache/cxf/transport/jms/util/JndiHelper.java | 6 +++++- .../transport/jms/util/MessageListenerTest.java | 25 ++++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java index eaf6995b55..da01c62f53 100644 --- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java +++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/AbstractMessageListenerContainer.java @@ -106,7 +106,8 @@ public abstract class AbstractMessageListenerContainer implements JMSListenerCon public InitialContext createInitialContext() { if (jndiEnvironment != null) { try { - return new InitialContext(this.jndiEnvironment); + JndiHelper helper = new JndiHelper(this.jndiEnvironment); + return helper.createInitialContext(); } catch (NamingException e) { LOG.log(Level.SEVERE, "Could not expose JNDI environment to JMS thread context", e); } diff --git a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java index ef98b6b3e5..0f86ead147 100644 --- a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java +++ b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JndiHelper.java @@ -78,7 +78,7 @@ public class JndiHelper { @SuppressWarnings("unchecked") public <T> T lookup(final String name, Class<T> requiredType) throws NamingException { - Context ctx = new InitialContext(this.environment); + Context ctx = createInitialContext(); try { Object located = ctx.lookup(name); if (located == null) { @@ -90,4 +90,8 @@ public class JndiHelper { } } + public InitialContext createInitialContext() throws NamingException { + return new InitialContext(this.environment); + } + } diff --git a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/MessageListenerTest.java b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/MessageListenerTest.java index 50e9a90e4e..e19515fea0 100644 --- a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/MessageListenerTest.java +++ b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/MessageListenerTest.java @@ -19,6 +19,7 @@ package org.apache.cxf.transport.jms.util; import java.util.Enumeration; +import java.util.Properties; import javax.jms.Connection; import javax.jms.Destination; @@ -31,6 +32,7 @@ import javax.jms.Queue; import javax.jms.QueueBrowser; import javax.jms.Session; import javax.jms.TextMessage; +import javax.naming.Context; import javax.transaction.TransactionManager; import javax.transaction.xa.XAException; @@ -38,6 +40,7 @@ import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.ActiveMQXAConnectionFactory; import org.apache.activemq.RedeliveryPolicy; import org.apache.activemq.pool.XaPooledConnectionFactory; +import org.apache.cxf.transport.jms.JMSConfiguration; import org.apache.geronimo.transaction.manager.GeronimoTransactionManager; import org.awaitility.Awaitility; @@ -71,6 +74,28 @@ public class MessageListenerTest { assertEquals("The connection is already closed", ex.getMessage()); } + @Test + public void testJndiForbiddenProtocolForPollingContainer() { + Properties env = new Properties(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); + env.put(Context.PROVIDER_URL, "ldap://127.0.0.1:12345"); + env.put(Context.REFERRAL, "follow"); + + JMSConfiguration jmsConfig = new JMSConfiguration(); + jmsConfig.setJndiEnvironment(env); + + PollingMessageListenerContainer container = + new PollingMessageListenerContainer(jmsConfig, false, message -> { }); + container.setJndiEnvironment(env); + + try { + container.createInitialContext(); + org.junit.Assert.fail("JNDI context creation should have failed for unsafe LDAP protocol"); + } catch (IllegalArgumentException ex) { + assertTrue(ex.getMessage().contains("Unsafe protocol in JNDI URL")); + } + } + @Test public void testConnectionProblemXA() throws JMSException, XAException, InterruptedException { TransactionManager transactionManager = new GeronimoTransactionManager();
