You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@directory.apache.org by "Aliaksei Volkau (Jira)" <ji...@apache.org> on 2022/06/06 09:12:00 UTC

[jira] [Created] (DIRAPI-383) LdapNetworkConnection.unbind throws IOException

Aliaksei Volkau created DIRAPI-383:
--------------------------------------

             Summary: LdapNetworkConnection.unbind throws IOException
                 Key: DIRAPI-383
                 URL: https://issues.apache.org/jira/browse/DIRAPI-383
             Project: Directory Client API
          Issue Type: Question
    Affects Versions: 2.1.0
            Reporter: Aliaksei Volkau


When trying to call LdapNetworkConnection.unbind catch the exception *IOException: An existing connection was forcibly closed by the remote host.*
Code:

LdapConnectionConfig connectionConfig = new LdapConnectionConfig();
connectionConfig.setLdapHost(//host);
connectionConfig.setLdapPort(//port);
connectionConfig.setName(//dn);

DefaultLdapConnectionFactory connectionFactory = new DefaultLdapConnectionFactory(connectionConfig);
connectionFactory.setTimeOut(30_000);

GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
poolConfig.setLifo(false);
poolConfig.setMinIdle(1);
poolConfig.setMaxIdle(1);
poolConfig.setMaxTotal(1);
poolConfig.setMinEvictableIdleTimeMillis(1000 * 60 * 30L);
poolConfig.setNumTestsPerEvictionRun(3);
poolConfig.setSoftMinEvictableIdleTimeMillis(-1L);
poolConfig.setTestOnBorrow(false);
poolConfig.setTestOnReturn(false);
poolConfig.setTimeBetweenEvictionRunsMillis(-1L);
poolConfig.setBlockWhenExhausted(true);

LdapConnectionPool connectionPool = new LdapConnectionPool(new DefaultPoolableLdapConnectionFactory(connectionFactory), poolConfig);

try {
    try (LdapConnection ldapConnection = connectionPool.getConnection()) {
        System.out.println("connection start");
        BindRequest bindRequest = new BindRequestImpl();
        bindRequest.setSimple(true);
        bindRequest.setName(//login);
        bindRequest.setCredentials(//password);
        BindResponse bindResponse = ldapConnection.bind(bindRequest);
        System.out.println(bindResponse);
        boolean okBind = false;
        if (bindResponse != null && bindResponse.getLdapResult() != null && bindResponse.getLdapResult().getResultCode() != null) {
            System.out.println("bind result " + bindResponse.getLdapResult().getResultCode());
            if (bindResponse.getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                okBind = true;
                System.out.println("bind completed");
            }
        }

        if (okBind) {
            try {
                SearchRequest searchRequest = new SearchRequestImpl();
                searchRequest.setBase(new Dn(//dn));
                searchRequest.setFilter("(sAMAccountName=//login)");
                searchRequest.setScope(SearchScope.SUBTREE);
                searchRequest.addAttributes("*");

                try (SearchCursor searchCursor = ldapConnection.search(searchRequest)) {
                    System.out.println("search start");
                    while (searchCursor.next()) {
                        if (searchCursor.isEntry()) {
                            Entry resultEntry = ((SearchResultEntry) searchCursor.get()).getEntry();
                            System.out.println(resultEntry);
                        }
                    }
                    if (searchCursor.getSearchResultDone() != null && searchCursor.getSearchResultDone().getLdapResult() != null && searchCursor.getSearchResultDone().getLdapResult().getResultCode() != null) {
                        System.out.println("search result " + searchCursor.getSearchResultDone().getLdapResult().getResultCode());
                        if (searchCursor.getSearchResultDone().getLdapResult().getResultCode() == ResultCodeEnum.SUCCESS) {
                            System.out.println("search completed");
                        }
                    }
                }
            } catch (LdapException e) {
                e.printStackTrace();
                System.out.println(e.getMessage());
            }

            if (ldapConnection.isConnected()) {
                ldapConnection.unBind();
                System.out.println("unbind completed");
            }
        }
    } catch (LdapException e) {
        e.printStackTrace();
            } finally {
        System.out.println("connection close");
    }
        } catch (Exception e) {
    System.out.println("exception " + e.getClass().getSimpleName());
    e.printStackTrace();
}

Result:



connection start
MessageType : BIND_RESPONSE
Message ID : 2
    BindResponse
        Ldap Result
            Result code : (SUCCESS) success
            Matched Dn : ''
            Diagnostic message : ''

bind result SUCCESS
bind completed
search start
search result SUCCESS
search completed
[NioProcessor-1] WARN org.apache.directory.ldap.client.api.LdapNetworkConnection - An existing connection was forcibly closed by the remote host
java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    at sun.nio.ch.IOUtil.read(IOUtil.java:197)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:378)
    at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:47)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:519)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$1200(AbstractPollingIoProcessor.java:68)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1224)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.process(AbstractPollingIoProcessor.java:1213)
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:683)
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
unbind completed
connection close



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@directory.apache.org
For additional commands, e-mail: dev-help@directory.apache.org