I have patched teh API code in a way that should solve the issue. Can you give it a tr, applying this patch :
https://paste.apache.org/GDVb ? Le 30/01/2017 à 11:37, [email protected] a écrit : > We don't directly send DSML, we have a custom version of Dsmlv2Engine > that uses org.apache.directory.api.dsmlv2.Dsmlv2Parser. The issue only > occurs if we provide the sort control, the code we have is working > otherwise. > > I am curious if anybody out there is successfully using the sort > control with DSMLv2 (OSGi or non-OSGi setup) ? > If registering SortRequestFactory/SortResponseFactory was the only > known missing part (for OSGI setup) I suspect a bug in the > decorator/Dsmlv2Grammar/... Debugging I so far haven't been able to > pinpoint where it goes wrong but I will see what I can do, trying to > narrow it down and maybe produce a small test to reproduce the issue. > > On 28/01/17 09:32, Emmanuel Lécharny wrote: >> >> Le 27/01/2017 à 19:13, [email protected] a écrit : >>> Thanks for the fix. >>> >>> As I wrote initially I had already tried with registering the two >>> factories and got a ClassCastException. >>> I tried now with RC3 but as suspected I still get the same >>> ClassCastException: >>> >>> java.lang.ClassCastException: >>> org.apache.directory.api.dsmlv2.DsmlControl cannot be cast to >>> org.apache.directory.api.ldap.model.message.controls.SortRequest >>> org.apache.mina.filter.codec.ProtocolEncoderException: >>> java.lang.ClassCastException: >>> org.apache.directory.api.dsmlv2.DsmlControl cannot be cast to >>> org.apache.directory.api.ldap.model.message.controls.SortRequest >>> at >>> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:330) >>> >>> at >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:629) >>> >>> at >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1500(DefaultIoFilterChain.java:48) >>> >>> at >>> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:957) >>> >>> at >>> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.filterWrite(DefaultIoFilterChain.java:881) >>> >>> at >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:629) >>> >>> at >>> org.apache.mina.core.filterchain.DefaultIoFilterChain.fireFilterWrite(DefaultIoFilterChain.java:622) >>> >>> at >>> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:574) >>> >>> at >>> org.apache.mina.core.session.AbstractIoSession.write(AbstractIoSession.java:519) >>> >>> at >>> org.apache.directory.ldap.client.api.LdapNetworkConnection.writeRequest(LdapNetworkConnection.java:4244)[88:org.apache.directory.api.ldap.client.api:1.0.0.RC3-SNAPSHOT] >>> >>> at >>> org.apache.directory.ldap.client.api.LdapNetworkConnection.searchAsync(LdapNetworkConnection.java:1838)[88:org.apache.directory.api.ldap.client.api:1.0.0.RC3-SNAPSHOT] >>> >>> at >>> org.apache.directory.ldap.client.api.LdapNetworkConnection.search(LdapNetworkConnection.java:1865)[88:org.apache.directory.api.ldap.client.api:1.0.0.RC3-SNAPSHOT] >>> >>> >>> ... >>> >>> Caused by: java.lang.ClassCastException: >>> org.apache.directory.api.dsmlv2.DsmlControl cannot be cast to >>> org.apache.directory.api.ldap.model.message.controls.SortRequest >>> at >>> org.apache.directory.api.ldap.codec.controls.sort.SortRequestFactory.newCodecControl(SortRequestFactory.java:35) >>> >>> at >>> org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService.newControl(DefaultLdapCodecService.java:275) >>> >>> at >>> org.apache.directory.api.ldap.codec.api.MessageDecorator.addControl(MessageDecorator.java:340)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC3-SNAPSHOT] >>> >>> at >>> org.apache.directory.api.ldap.codec.decorators.SearchRequestDecorator.addControl(SearchRequestDecorator.java:1118) >>> >>> at >>> org.apache.directory.api.ldap.codec.decorators.SearchRequestDecorator.addControl(SearchRequestDecorator.java:83) >>> >>> at >>> org.apache.directory.api.ldap.codec.api.MessageDecorator.getDecorator(MessageDecorator.java:225)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC3-SNAPSHOT] >>> >>> at >>> org.apache.directory.api.ldap.codec.api.LdapEncoder.encodeMessage(LdapEncoder.java:159)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC3-SNAPSHOT] >>> >>> at >>> org.apache.directory.api.ldap.codec.protocol.mina.LdapProtocolEncoder.encode(LdapProtocolEncoder.java:82) >>> >>> at >>> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:299) >>> >>> >>> I have the feeling that some link between DSML and codec is missing >>> for the (sort) control... >> Most certainly. D you have a fragment of code I can play with to find >> out what's going on ? >> > -- Emmanuel Lecharny Symas.com directory.apache.org
