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

Reply via email to