Ah ! I think I see what's wrong  you are trying to send a DSML message
using a LdapNetwork connection. That will simply don't work because a
DSML request is not intended to be sent through a LDP connection, but
through a http connection.


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...
>
> On 27/01/17 15:38, Emmanuel Lécharny wrote:
>> I have committed a fix for this problem. Yu might want to rebuild the
>> API and test it.
>>
>>
>> Le 27/01/2017 à 13:16, [email protected] a écrit :
>>> Hi,
>>>
>>> I have an application running in an OSGi container that uses the LDAP
>>> API and DSML parser and I would like to use the server side sorting
>>> control.
>>>
>>> When I send the following control...
>>>
>>>          <ns2:control criticality="true" type="1.2.840.113556.1.4.473">
>>>              <ns2:controlValue
>>> xmlns:xs="http://www.w3.org/2001/XMLSchema";
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>> xsi:type="xs:base64Binary">MAYwBAQCc24=</ns2:controlValue>
>>>          </ns2:control>
>>>
>>> ...I get an error: "sorted results control value is absent".
>>>
>>> 2017-01-27 12:19:37,304 | DEBUG | NioProcessor-1   |
>>> CODEC_LOG                        | 94 -
>>> org.apache.directory.api.ldap.net.mina - 1.0.0.RC2 | Decoded
>>> LdapMessage : MessageType : SEARCH_RESULT_DONE
>>> Message ID : 4
>>>      Search Result Done
>>>          Ldap Result
>>>              Result code : (PROTOCOL_ERROR) protocolError
>>>              Matched Dn : ''
>>>              Diagnostic message : 'sorted results control value is
>>> absent'
>>>
>>> I saw that an OpaqueControl is created for the sort control. Debugging
>>> I noticed that setEncodedValue is never called.
>>>
>>> org.apache.directory.api.ldap.model.message.SearchRequestImpl@7ea4768c
>>> OpaqueControl Control
>>>          Type OID    : '1.2.840.113556.1.4.473'
>>>          Criticality : 'true'
>>>
>>> Looking into this I came across the control factories registered on
>>> LdapApiService and saw that there are two implementations:
>>> - DefaultLdapCodecService
>>> - StandaloneLdapApiService
>>>
>>> DefaultLdapCodecService is what is initialized in OSGi setup. I
>>> noticed that DefaultLdapCodecService unlike StandaloneLdapApiService
>>> does not register SortRequestFactory/SortResponseFactory. To try if
>>> this solves the issue I registered the two factories but then I get a
>>> ClassCastException:
>>>
>>> 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)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC2]
>>>
>>>      at
>>> org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService.newControl(DefaultLdapCodecService.java:253)
>>>
>>>      at
>>> org.apache.directory.api.ldap.codec.api.MessageDecorator.addControl(MessageDecorator.java:329)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC2]
>>>
>>>      at
>>> org.apache.directory.api.ldap.codec.decorators.SearchRequestDecorator.addControl(SearchRequestDecorator.java:1072)
>>>
>>>      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:204)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC2]
>>>
>>>      at
>>> org.apache.directory.api.ldap.codec.api.LdapEncoder.encodeMessage(LdapEncoder.java:159)[89:org.apache.directory.api.ldap.codec.core:1.0.0.RC2]
>>>
>>>      at
>>> org.apache.directory.api.ldap.codec.protocol.mina.LdapProtocolEncoder.encode(LdapProtocolEncoder.java:81)
>>>
>>>      at
>>> org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:299)
>>>
>>>      ... 58 more
>>>
>>> I do not understand how the DSMLv2 parser works together with the LDAP
>>> codec and start to wonder if the server side sort control is even
>>> supposed to work at the moment.
>>> - Is it possible that the parser for DSMLv2 does not support the
>>> server side sort control?
>>> - Should SortRequestFactory/SortResponseFactory be registered or is
>>> there a reason why they are not registered on DefaultLdapCodecService
>>> per default?
>>>
>>> I would appreciate any hints to get this working.
>>>
>>> Cheers
>>> Claudia
>>>
>

-- 
Emmanuel Lecharny

Symas.com
directory.apache.org

Reply via email to