]
Eduardo Martins reassigned WFLY-1421:
-------------------------------------
Assignee: Eduardo Martins
Listing JNDI tree from container when an entry is not available
causes exception
--------------------------------------------------------------------------------
Key: WFLY-1421
URL:
https://issues.jboss.org/browse/WFLY-1421
Project: WildFly
Issue Type: Bug
Components: Naming
Affects Versions: 8.0.0.Alpha1
Reporter: Jan Martiska
Assignee: Eduardo Martins
Fix For: Awaiting Volunteers
When you list server's JNDI tree using management APIs and some entries cannot be
retrieved, instead of these entries, it will return a marker denoting an unknown value.
However, if you list the JNDI tree programatically from within the container and this
happens, you get a NamingException. I believe that the listBindings operation should also
return a marker for an unknown value (like null), rather than failing the whole
operation.
How to reproduce:
Bind a federated JNDI context, like so:
{noformat}
/subsystem=naming/binding=java\:global\/tt:add(binding-type=external-context,
module=org.jboss.as.naming, class=javax.naming.directory.InitialDirContext,
environment={["java.naming.provider.url"=>"ldap://some.ldap.url:389",
"java.naming.factory.initial"=>"com.sun.jndi.ldap.LdapCtxFactory",
"initial-context-class"=>"javax.naming.directory.InitialDirContext"]},
cache=false)
{noformat}
then, at some point in time, make this context become unavailable, for example stop the
backing LDAP server (or block the connection to it using a firewall..).
*Other option* - as a simpler reproducer, you may just add any invalid URL in the
java.naming.provider.url property, then it will fail always.
After that, do this in a deployed application:
{noformat}
InitialContext ctx = new InitialContext();
ctx.listBindings("java:global");
{noformat}
it will throw a NamingException after the connection attempt times out.
{noformat}
javax.naming.NamingException: java.lang.reflect.InvocationTargetException [Root exception
is java.lang.RuntimeException: java.lang.reflect.InvocationTargetException]
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:142)
at
org.jboss.as.naming.ServiceBasedNamingStore.listBindings(ServiceBasedNamingStore.java:216)
at org.jboss.as.naming.NamingContext.listBindings(NamingContext.java:347)
at org.jboss.as.naming.InitialContext.listBindings(InitialContext.java:131)
at org.jboss.as.naming.NamingContext.listBindings(NamingContext.java:363)
at javax.naming.InitialContext.listBindings(InitialContext.java:466) [rt.jar:1.7.0_21]
at ListingServlet.doGet(ListingServlet.java:30) ... 33 more
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at
org.jboss.as.naming.subsystem.NamingBindingAdd$2.getReference(NamingBindingAdd.java:258)
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:140)
... 39 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[rt.jar:1.7.0_21]
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
[rt.jar:1.7.0_21]
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[rt.jar:1.7.0_21]
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) [rt.jar:1.7.0_21]
at
org.jboss.as.naming.ExternalContextObjectFactory.createContext(ExternalContextObjectFactory.java:87)
at
org.jboss.as.naming.ExternalContextObjectFactory.getObjectInstance(ExternalContextObjectFactory.java:52)
at
org.jboss.as.naming.subsystem.NamingBindingAdd$2.getReference(NamingBindingAdd.java:255)
... 40 more
Caused by: javax.naming.CommunicationException: ldap.cz:3890 [Root exception is
java.net.ConnectException: Connection timed out]
at com.sun.jndi.ldap.Connection.<init>(Connection.java:224) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:136) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1600) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2698) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:316) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:193)
[rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:211)
[rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)
[rt.jar:1.7.0_21]
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)
[rt.jar:1.7.0_21]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
[rt.jar:1.7.0_21]
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
[rt.jar:1.7.0_21]
at javax.naming.InitialContext.init(InitialContext.java:242) [rt.jar:1.7.0_21]
at javax.naming.InitialContext.<init>(InitialContext.java:216) [rt.jar:1.7.0_21]
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:101)
[rt.jar:1.7.0_21]
... 47 more
Caused by: java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method) [rt.jar:1.7.0_21]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
[rt.jar:1.7.0_21]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
[rt.jar:1.7.0_21]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
[rt.jar:1.7.0_21]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) [rt.jar:1.7.0_21]
at java.net.Socket.connect(Socket.java:579) [rt.jar:1.7.0_21]
at java.net.Socket.connect(Socket.java:528) [rt.jar:1.7.0_21]
at java.net.Socket.<init>(Socket.java:425) [rt.jar:1.7.0_21]
at java.net.Socket.<init>(Socket.java:208) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.Connection.createSocket(Connection.java:366) [rt.jar:1.7.0_21]
at com.sun.jndi.ldap.Connection.<init>(Connection.java:201) [rt.jar:1.7.0_21]
... 60 more
{noformat}