[ https://issues.apache.org/jira/browse/DIRAPI-366?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17286785#comment-17286785 ]
Emmanuel Lécharny commented on DIRAPI-366: ------------------------------------------ Clearly, we don't support the control. The side effect is that we store a null value for the factory, which leads to this exception. A better choice would have been to keep the value opaque instead of trying to construct an instance of a control we don't know about. The {{StoreControlValue.action()}} method should rather contain : {code:java} if ( tlv.getLength() >= 0 ) { ControlFactory<?> factory = container.getControlFactory(); if ( factory == null ) { // We don't know about this control, so it's an opaque control ( ( OpaqueControl ) control ).setEncodedValue( value.getData() ); } else { factory.decodeValue( control, value.getData() ); } } {code} > NPE for reading Root DSE with Oracle Unified Directory > ------------------------------------------------------ > > Key: DIRAPI-366 > URL: https://issues.apache.org/jira/browse/DIRAPI-366 > Project: Directory Client API > Issue Type: Bug > Affects Versions: 2.0.1 > Reporter: Thomas Kriener > Priority: Major > > Hello, > when we try to read the Root DSE of an Oracle Unified Directory Server (OUD) > we get the following stack trace: > {{ > org.apache.mina.filter.codec.ProtocolDecoderException: > java.lang.NullPointerException (Hexdump: 30 82 01 17 02 01 08 65 07 0A 01 00 > 04 00 04 00 A0 82 01 07 30 82 01 03 04 17 31 2E 33 2E 36 2E 31 2E 34 2E 31 2E > 32 36 30 32 37 2E 31 2E 35 2E 34 01 01 FF 04 81 E4 30 81 E1 04 81 DE 64 63 3D > 76 66 64 32 2C 64 63 3D 64 65 3A 30 30 30 30 30 31 37 37 61 64 38 32 32 35 36 > 32 35 65 39 35 30 30 30 30 30 32 61 39 20 30 30 30 30 30 31 37 37 62 35 37 30 > 63 63 66 36 30 66 39 62 30 30 30 30 30 35 66 63 3B 6F 3D 74 72 61 6E 73 66 65 > 72 3A 30 30 30 30 30 31 37 37 62 30 34 61 37 62 37 64 31 34 65 31 30 30 30 30 > 32 65 65 61 20 30 30 30 30 30 31 37 37 62 35 37 30 64 37 62 38 34 63 36 39 30 > 30 30 30 30 31 33 65 3B 6F 75 3D 6E 6D 73 2C 64 63 3D 61 72 63 6F 72 2C 64 63 > 3D 6E 65 74 3A 30 30 30 30 30 31 37 36 36 62 39 34 62 65 62 62 37 33 32 34 30 > 30 30 30 33 62 64 61 20 30 30 30 30 30 31 37 36 36 61 66 66 39 35 30 34 32 63 > 34 65 30 30 30 30 34 34 30 62 3B) > at > org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:263) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128) > at > org.apache.mina.filter.ssl.SslHandler.flushMessageReceived(SslHandler.java:330) > at org.apache.mina.filter.ssl.SslFilter.messageReceived(SslFilter.java:552) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1300(DefaultIoFilterChain.java:49) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:1128) > at > org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:122) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:650) > at > org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:643) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:539) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor.access$1200(AbstractPollingIoProcessor.java:68) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1222) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1211) > at > org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:683) > at > org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) > at > java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > at > java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > at java.base/java.lang.Thread.run(Thread.java:834) > Caused by: java.lang.NullPointerException > at > org.apache.directory.api.ldap.codec.actions.controls.StoreControlValue.action(StoreControlValue.java:81) > at > org.apache.directory.api.ldap.codec.actions.controls.StoreControlValue.action(StoreControlValue.java:49) > at > org.apache.directory.api.asn1.ber.grammar.AbstractGrammar.executeAction(AbstractGrammar.java:136) > at > org.apache.directory.api.asn1.ber.Asn1Decoder.treatTLVDoneState(Asn1Decoder.java:604) > at org.apache.directory.api.asn1.ber.Asn1Decoder.decode(Asn1Decoder.java:740) > }} > Using a debugger, we end up in the code of StoreControlValue Line 80: > {{ControlFactory<?> factory = container.getControlFactory(); > factory.decodeValue( control, value.getData() );}} > Here factory is null. > The OID which is evaluated is 1.3.6.1.4.1.26027.1.5.4. > The bug was introduced between Apache Directory Studio M14 and M15. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@directory.apache.org For additional commands, e-mail: dev-h...@directory.apache.org