[jira] [Commented] (DIRAPI-399) Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) picked up
[ https://issues.apache.org/jira/browse/DIRAPI-399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17824984#comment-17824984 ] Thomas Jodes commented on DIRAPI-399: - Yes I can provide a unit test for both cases but I cannot ship a (Microsoft Active) Directory Server to proof our case here one-to-one. Would be that ok? > Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) > picked up > -- > > Key: DIRAPI-399 > URL: https://issues.apache.org/jira/browse/DIRAPI-399 > Project: Directory Client API > Issue Type: Bug >Affects Versions: 2.1.6 >Reporter: Thomas Jodes >Priority: Major > Attachments: Screenshot from 2024-03-01 15-47-26.png, Screenshot from > 2024-03-01 15-48-52.png > > > As a ldap-api user, I want to search my DIT paginated from a base where also > referrals / > [SearchResultReference|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/SearchResultReferenceImpl.java#L28]s > are. > Following paged search code: > > {code:java} > int pageSize = 100; > LdapConnection connection = null; > try { > connection = ldapConnectionPool.getConnection(); > int page = 0; // the current page > PagedResults pagedSearchControl = new PagedResultsImpl(); > pagedSearchControl.setSize(pageSize); > // Loop using the paged search control extension > while(true) { > SearchRequest searchRequest = new SearchRequestImpl() > .ignoreReferrals() > .setDerefAliases(AliasDerefMode.NEVER_DEREF_ALIASES) > .setBase(new Dn(searchBase)) > .setFilter(filter) > .setScope(SearchScope.SUBTREE) > .addAttributes(attributes) > .setTimeLimit(120) > .addControl(pagedSearchControl); > SearchCursorImpl searchCursor = (SearchCursorImpl) > connection.search(searchRequest); > try (EntryCursor cursor = new EntryCursorImpl(searchCursor)) { > while (cursor.next()) { > Entry e = cursor.get(); > log.info("element: {}", e.get("sAMAccountName")); > results.add(e); > } > SearchResultDone searchResult = cursor.getSearchResultDone(); > pagedSearchControl = > (PagedResults)searchResult.getControl(PagedResults.OID); > if (searchResult.getLdapResult().getResultCode() == > ResultCodeEnum.UNWILLING_TO_PERFORM) { > throw new LdapException("Directory cannot handle > pagination!"); > } > } catch (CursorException e) { > log.error("Unexpected cursor exception occurred!", e); > } > // Check if pagination is exhausted (all eligible entries have been > read) > if (Strings.isEmpty(pagedSearchControl.getCookie())) { > log.info("Exiting paged search at page: " + ++page); > break; > } > // Prepare the next iteration > pagedSearchControl.setSize(pageSize); > } > // here we want to do s.th. with our 'results' reference; > } catch (LdapException e) { > log.error("Unexpected ldap exception occurred!", e); > } catch (IOException e) { > log.error("Unexpected I/O exception occurred!", e); > } finally { > if (connection != null) { > ldapConnectionPool.releaseConnection(connection); // put the > session/connection back to its pool > } > } {code} > > *Expected behaviour:* > all elements in the base are picked up in the 'results' list, all paginated > and added up by x times a bunch of 100 until everything has been read in the > directory. In the searchFuture at LdapNetworkConnection.searchAsync should be > 101 elements: 100 SearchResultEntryImpl's and one SearchResultDoneImpl. > > *Actual behaviour:* > in the first page there are 100 entries, i.e. 100x SearchResultEntryImpl > elements PLUS (in my case/active directory) 3x SearchResultReferenceImpl > elements plus 1x SerachResultDoneImpl element as the last one in the array of > the searchFuture here:[ > LdapNetworkConnection#searchAsync()|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java#L2391] > . > ldap-api code runs into exception at EntryCursorImpl.get() when the response > instanceof [SearchResultReference is >
[jira] [Comment Edited] (DIRAPI-399) Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) picked up
[ https://issues.apache.org/jira/browse/DIRAPI-399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17823128#comment-17823128 ] Thomas Jodes edited comment on DIRAPI-399 at 3/4/24 1:22 PM: - Edit: I switched paged search as seen above not to use the EntryCursorImpl, but to use [SearchCursor like here|https://directory.apache.org/api/user-guide/2.3-searching.html]. Just to work with the SearchCursor and to use the cast to SearchResultEntry. Interestingly, not a single SearchResultReference comes up, so referals absent here. When wrapping the searchResult in the EntryCursorImpl (EntryCursor cursor = new EntryCursorImpl(searchCursor)), the references are in the first page results. was (Author: JIRAUSER286693): Edit: I switched paged search as seen above not to use the EntryCursorImpl, but to use [SearchCursor like here|[http://example.com|https://directory.apache.org/api/user-guide/2.3-searching.html]]. Just to work with the SearchCursor and to use the cast to SearchResultEntry. Interestingly, not a single SearchResultReference comes up, so referals absent here. When wrapping the searchResult in the EntryCursorImpl (EntryCursor cursor = new EntryCursorImpl(searchCursor)), the references are in the first page results. > Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) > picked up > -- > > Key: DIRAPI-399 > URL: https://issues.apache.org/jira/browse/DIRAPI-399 > Project: Directory Client API > Issue Type: Bug >Affects Versions: 2.1.6 >Reporter: Thomas Jodes >Priority: Major > Attachments: Screenshot from 2024-03-01 15-47-26.png, Screenshot from > 2024-03-01 15-48-52.png > > > As a ldap-api user, I want to search my DIT paginated from a base where also > referrals / > [SearchResultReference|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/SearchResultReferenceImpl.java#L28]s > are. > Following paged search code: > > {code:java} > int pageSize = 100; > LdapConnection connection = null; > try { > connection = ldapConnectionPool.getConnection(); > int page = 0; // the current page > PagedResults pagedSearchControl = new PagedResultsImpl(); > pagedSearchControl.setSize(pageSize); > // Loop using the paged search control extension > while(true) { > SearchRequest searchRequest = new SearchRequestImpl() > .ignoreReferrals() > .setDerefAliases(AliasDerefMode.NEVER_DEREF_ALIASES) > .setBase(new Dn(searchBase)) > .setFilter(filter) > .setScope(SearchScope.SUBTREE) > .addAttributes(attributes) > .setTimeLimit(120) > .addControl(pagedSearchControl); > SearchCursorImpl searchCursor = (SearchCursorImpl) > connection.search(searchRequest); > try (EntryCursor cursor = new EntryCursorImpl(searchCursor)) { > while (cursor.next()) { > Entry e = cursor.get(); > log.info("element: {}", e.get("sAMAccountName")); > results.add(e); > } > SearchResultDone searchResult = cursor.getSearchResultDone(); > pagedSearchControl = > (PagedResults)searchResult.getControl(PagedResults.OID); > if (searchResult.getLdapResult().getResultCode() == > ResultCodeEnum.UNWILLING_TO_PERFORM) { > throw new LdapException("Directory cannot handle > pagination!"); > } > } catch (CursorException e) { > log.error("Unexpected cursor exception occurred!", e); > } > // Check if pagination is exhausted (all eligible entries have been > read) > if (Strings.isEmpty(pagedSearchControl.getCookie())) { > log.info("Exiting paged search at page: " + ++page); > break; > } > // Prepare the next iteration > pagedSearchControl.setSize(pageSize); > } > // here we want to do s.th. with our 'results' reference; > } catch (LdapException e) { > log.error("Unexpected ldap exception occurred!", e); > } catch (IOException e) { > log.error("Unexpected I/O exception occurred!", e); > } finally { > if (connection != null) { > ldapConnectionPool.releaseConnection(connection); // put the > session/connection back to its pool > } > } {code} > > *Expected behaviour:* > all elements in the base are picked up in the 'results' list, all paginated > and
[jira] [Commented] (DIRAPI-399) Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) picked up
[ https://issues.apache.org/jira/browse/DIRAPI-399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17823128#comment-17823128 ] Thomas Jodes commented on DIRAPI-399: - Edit: I switched paged search as seen above not to use the EntryCursorImpl, but to use [SearchCursor like here|[http://example.com|https://directory.apache.org/api/user-guide/2.3-searching.html]]. Just to work with the SearchCursor and to use the cast to SearchResultEntry. Interestingly, not a single SearchResultReference comes up, so referals absent here. When wrapping the searchResult in the EntryCursorImpl (EntryCursor cursor = new EntryCursorImpl(searchCursor)), the references are in the first page results. > Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) > picked up > -- > > Key: DIRAPI-399 > URL: https://issues.apache.org/jira/browse/DIRAPI-399 > Project: Directory Client API > Issue Type: Bug >Affects Versions: 2.1.6 >Reporter: Thomas Jodes >Priority: Major > Attachments: Screenshot from 2024-03-01 15-47-26.png, Screenshot from > 2024-03-01 15-48-52.png > > > As a ldap-api user, I want to search my DIT paginated from a base where also > referrals / > [SearchResultReference|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/SearchResultReferenceImpl.java#L28]s > are. > Following paged search code: > > {code:java} > int pageSize = 100; > LdapConnection connection = null; > try { > connection = ldapConnectionPool.getConnection(); > int page = 0; // the current page > PagedResults pagedSearchControl = new PagedResultsImpl(); > pagedSearchControl.setSize(pageSize); > // Loop using the paged search control extension > while(true) { > SearchRequest searchRequest = new SearchRequestImpl() > .ignoreReferrals() > .setDerefAliases(AliasDerefMode.NEVER_DEREF_ALIASES) > .setBase(new Dn(searchBase)) > .setFilter(filter) > .setScope(SearchScope.SUBTREE) > .addAttributes(attributes) > .setTimeLimit(120) > .addControl(pagedSearchControl); > SearchCursorImpl searchCursor = (SearchCursorImpl) > connection.search(searchRequest); > try (EntryCursor cursor = new EntryCursorImpl(searchCursor)) { > while (cursor.next()) { > Entry e = cursor.get(); > log.info("element: {}", e.get("sAMAccountName")); > results.add(e); > } > SearchResultDone searchResult = cursor.getSearchResultDone(); > pagedSearchControl = > (PagedResults)searchResult.getControl(PagedResults.OID); > if (searchResult.getLdapResult().getResultCode() == > ResultCodeEnum.UNWILLING_TO_PERFORM) { > throw new LdapException("Directory cannot handle > pagination!"); > } > } catch (CursorException e) { > log.error("Unexpected cursor exception occurred!", e); > } > // Check if pagination is exhausted (all eligible entries have been > read) > if (Strings.isEmpty(pagedSearchControl.getCookie())) { > log.info("Exiting paged search at page: " + ++page); > break; > } > // Prepare the next iteration > pagedSearchControl.setSize(pageSize); > } > // here we want to do s.th. with our 'results' reference; > } catch (LdapException e) { > log.error("Unexpected ldap exception occurred!", e); > } catch (IOException e) { > log.error("Unexpected I/O exception occurred!", e); > } finally { > if (connection != null) { > ldapConnectionPool.releaseConnection(connection); // put the > session/connection back to its pool > } > } {code} > > *Expected behaviour:* > all elements in the base are picked up in the 'results' list, all paginated > and added up by x times a bunch of 100 until everything has been read in the > directory. In the searchFuture at LdapNetworkConnection.searchAsync should be > 101 elements: 100 SearchResultEntryImpl's and one SearchResultDoneImpl. > > *Actual behaviour:* > in the first page there are 100 entries, i.e. 100x SearchResultEntryImpl > elements PLUS (in my case/active directory) 3x SearchResultReferenceImpl > elements plus 1x SerachResultDoneImpl element as the last one in the array of > the searchFuture here:[ >
[jira] [Commented] (DIRAPI-399) Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) picked up
[ https://issues.apache.org/jira/browse/DIRAPI-399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17823119#comment-17823119 ] Thomas Jodes commented on DIRAPI-399: - Hi, that's a clue if that Active Directory server does not seem to respect the IgnoreReferals flag - however using the search in the ApacheDirectory Studio, the three referal nodes will vanish in the DIT... That is, up to this the question at stake is, if the ignore referals flag is ignored using the DIRAPI as seen above (bug? because Apache Studio filters them away when saying per radio button "ignore refereals"+ checkbox "paged search") - or is it as simple as that that the code shown above is simply used wrong? (unfortunately there aren't resources in the ldap-api website regading paged seach+ignore referals). Yours sincerly, Thomas > Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) > picked up > -- > > Key: DIRAPI-399 > URL: https://issues.apache.org/jira/browse/DIRAPI-399 > Project: Directory Client API > Issue Type: Bug >Affects Versions: 2.1.6 >Reporter: Thomas Jodes >Priority: Major > Attachments: Screenshot from 2024-03-01 15-47-26.png, Screenshot from > 2024-03-01 15-48-52.png > > > As a ldap-api user, I want to search my DIT paginated from a base where also > referrals / > [SearchResultReference|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/SearchResultReferenceImpl.java#L28]s > are. > Following paged search code: > > {code:java} > int pageSize = 100; > LdapConnection connection = null; > try { > connection = ldapConnectionPool.getConnection(); > int page = 0; // the current page > PagedResults pagedSearchControl = new PagedResultsImpl(); > pagedSearchControl.setSize(pageSize); > // Loop using the paged search control extension > while(true) { > SearchRequest searchRequest = new SearchRequestImpl() > .ignoreReferrals() > .setDerefAliases(AliasDerefMode.NEVER_DEREF_ALIASES) > .setBase(new Dn(searchBase)) > .setFilter(filter) > .setScope(SearchScope.SUBTREE) > .addAttributes(attributes) > .setTimeLimit(120) > .addControl(pagedSearchControl); > SearchCursorImpl searchCursor = (SearchCursorImpl) > connection.search(searchRequest); > try (EntryCursor cursor = new EntryCursorImpl(searchCursor)) { > while (cursor.next()) { > Entry e = cursor.get(); > log.info("element: {}", e.get("sAMAccountName")); > results.add(e); > } > SearchResultDone searchResult = cursor.getSearchResultDone(); > pagedSearchControl = > (PagedResults)searchResult.getControl(PagedResults.OID); > if (searchResult.getLdapResult().getResultCode() == > ResultCodeEnum.UNWILLING_TO_PERFORM) { > throw new LdapException("Directory cannot handle > pagination!"); > } > } catch (CursorException e) { > log.error("Unexpected cursor exception occurred!", e); > } > // Check if pagination is exhausted (all eligible entries have been > read) > if (Strings.isEmpty(pagedSearchControl.getCookie())) { > log.info("Exiting paged search at page: " + ++page); > break; > } > // Prepare the next iteration > pagedSearchControl.setSize(pageSize); > } > // here we want to do s.th. with our 'results' reference; > } catch (LdapException e) { > log.error("Unexpected ldap exception occurred!", e); > } catch (IOException e) { > log.error("Unexpected I/O exception occurred!", e); > } finally { > if (connection != null) { > ldapConnectionPool.releaseConnection(connection); // put the > session/connection back to its pool > } > } {code} > > *Expected behaviour:* > all elements in the base are picked up in the 'results' list, all paginated > and added up by x times a bunch of 100 until everything has been read in the > directory. In the searchFuture at LdapNetworkConnection.searchAsync should be > 101 elements: 100 SearchResultEntryImpl's and one SearchResultDoneImpl. > > *Actual behaviour:* > in the first page there are 100 entries, i.e. 100x SearchResultEntryImpl > elements PLUS (in my case/active directory) 3x SearchResultReferenceImpl > elements plus 1x SerachResultDoneImpl
[jira] [Created] (DIRAPI-399) Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) picked up
Thomas Jodes created DIRAPI-399: --- Summary: Cannot paginate SearchCursor via SearchRequest when SearchResultReference(s) picked up Key: DIRAPI-399 URL: https://issues.apache.org/jira/browse/DIRAPI-399 Project: Directory Client API Issue Type: Bug Affects Versions: 2.1.6 Reporter: Thomas Jodes Attachments: Screenshot from 2024-03-01 15-47-26.png, Screenshot from 2024-03-01 15-48-52.png As a ldap-api user, I want to search my DIT paginated from a base where also referrals / [SearchResultReference|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/model/src/main/java/org/apache/directory/api/ldap/model/message/SearchResultReferenceImpl.java#L28]s are. Following paged search code: {code:java} int pageSize = 100; LdapConnection connection = null; try { connection = ldapConnectionPool.getConnection(); int page = 0; // the current page PagedResults pagedSearchControl = new PagedResultsImpl(); pagedSearchControl.setSize(pageSize); // Loop using the paged search control extension while(true) { SearchRequest searchRequest = new SearchRequestImpl() .ignoreReferrals() .setDerefAliases(AliasDerefMode.NEVER_DEREF_ALIASES) .setBase(new Dn(searchBase)) .setFilter(filter) .setScope(SearchScope.SUBTREE) .addAttributes(attributes) .setTimeLimit(120) .addControl(pagedSearchControl); SearchCursorImpl searchCursor = (SearchCursorImpl) connection.search(searchRequest); try (EntryCursor cursor = new EntryCursorImpl(searchCursor)) { while (cursor.next()) { Entry e = cursor.get(); log.info("element: {}", e.get("sAMAccountName")); results.add(e); } SearchResultDone searchResult = cursor.getSearchResultDone(); pagedSearchControl = (PagedResults)searchResult.getControl(PagedResults.OID); if (searchResult.getLdapResult().getResultCode() == ResultCodeEnum.UNWILLING_TO_PERFORM) { throw new LdapException("Directory cannot handle pagination!"); } } catch (CursorException e) { log.error("Unexpected cursor exception occurred!", e); } // Check if pagination is exhausted (all eligible entries have been read) if (Strings.isEmpty(pagedSearchControl.getCookie())) { log.info("Exiting paged search at page: " + ++page); break; } // Prepare the next iteration pagedSearchControl.setSize(pageSize); } // here we want to do s.th. with our 'results' reference; } catch (LdapException e) { log.error("Unexpected ldap exception occurred!", e); } catch (IOException e) { log.error("Unexpected I/O exception occurred!", e); } finally { if (connection != null) { ldapConnectionPool.releaseConnection(connection); // put the session/connection back to its pool } } {code} *Expected behaviour:* all elements in the base are picked up in the 'results' list, all paginated and added up by x times a bunch of 100 until everything has been read in the directory. In the searchFuture at LdapNetworkConnection.searchAsync should be 101 elements: 100 SearchResultEntryImpl's and one SearchResultDoneImpl. *Actual behaviour:* in the first page there are 100 entries, i.e. 100x SearchResultEntryImpl elements PLUS (in my case/active directory) 3x SearchResultReferenceImpl elements plus 1x SerachResultDoneImpl element as the last one in the array of the searchFuture here:[ LdapNetworkConnection#searchAsync()|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java#L2391] . ldap-api code runs into exception at EntryCursorImpl.get() when the response instanceof [SearchResultReference is hit|https://github.com/apache/directory-ldap-api/blob/c4fcf46f72601c1729d6d5321e2cdc7126f94b14/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/EntryCursorImpl.java#L164] -> LdapReferralException. "ignoreReferrals()" has been set building the SearchRequestImpl The three additional SearchResultReferenceImpl elements in the entries read shouldn't be picked up. -- This message was sent by Atlassian Jira (v8.20.10#820010) - To unsubscribe, e-mail: dev-unsubscr...@directory.apache.org For additional commands, e-mail: dev-h...@directory.apache.org
[jira] [Commented] (DIRAPI-382) The api-all--sources.jar in central is empty
[ https://issues.apache.org/jira/browse/DIRAPI-382?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17511880#comment-17511880 ] Thomas Jodes commented on DIRAPI-382: - Hi Emmanuel, thank you , I did that. The full build of the aggregation resulted in "all/target/": {code:java} total 3163 drwxr-xr-x 1 jodes 1049089 0 Mrz 24 15:11 ./ drwxr-xr-x 1 jodes 1049089 0 Mrz 24 15:11 ../ -rw-r--r-- 1 jodes 1049089 30 Mrz 24 15:11 .plxarc -rw-r--r-- 1 jodes 1049089 3196531 Mrz 24 15:11 api-all-2.1.0.jar -rw-r--r-- 1 jodes 1049089 7818 Mrz 24 15:11 api-all-2.1.0-sources.jar -rw-r--r-- 1 jodes 1049089 89 Mrz 24 15:11 checkstyle-cachefile -rw-r--r-- 1 jodes 1049089 9353 Mrz 24 15:11 checkstyle-checker.xml -rw-r--r-- 1 jodes 1049089 84 Mrz 24 15:11 checkstyle-result.xml drwxr-xr-x 1 jodes 1049089 0 Mrz 24 15:11 classes/ drwxr-xr-x 1 jodes 1049089 0 Mrz 24 15:11 maven-archiver/ drwxr-xr-x 1 jodes 1049089 0 Mrz 24 15:11 maven-shared-archive-resources/ -rw-r--r-- 1 jodes 1049089 8356 Mrz 24 15:11 original-api-all-2.1.0.jar drwxr-xr-x 1 jodes 1049089 0 Mrz 24 15:11 test-classes/ {code} Where one can see, that "api-all-2.1.0-sources.jar" is practically empty, just 7818 bytes. In your case show above, I wonder the larger file size. However, the small sources-jar should explain, why this artifact without sources can land at Maven Central... > The api-all--sources.jar in central is empty > - > > Key: DIRAPI-382 > URL: https://issues.apache.org/jira/browse/DIRAPI-382 > Project: Directory Client API > Issue Type: Bug >Affects Versions: 2.1.0 >Reporter: Thomas Jodes >Priority: Major > > As a developer using an IDE, I want to hop into the sources of the LDAP-API > project. > Tracing the downloaded sources jar of "api-all-2.1.0.jar", i.e. > "api-all-2.1.0-sources.jar", it is empty, thus containing no java file that > an IDE can use to see either code nor documentation. > It would be appreciable to add the api-all's sources to maven central as well. -- This message was sent by Atlassian Jira (v8.20.1#820001) - To unsubscribe, e-mail: dev-unsubscr...@directory.apache.org For additional commands, e-mail: dev-h...@directory.apache.org
[jira] [Created] (DIRAPI-382) The api-all--sources.jar in central is empty
Thomas Jodes created DIRAPI-382: --- Summary: The api-all--sources.jar in central is empty Key: DIRAPI-382 URL: https://issues.apache.org/jira/browse/DIRAPI-382 Project: Directory Client API Issue Type: Bug Affects Versions: 2.1.0 Reporter: Thomas Jodes As a developer using an IDE, I want to hop into the sources of the LDAP-API project. Tracing the downloaded sources jar of "api-all-2.1.0.jar", i.e. "api-all-2.1.0-sources.jar", it is empty, thus containing no java file that an IDE can use to see either code nor documentation. It would be appreciable to add the api-all's sources to maven central as well. -- This message was sent by Atlassian Jira (v8.20.1#820001) - To unsubscribe, e-mail: dev-unsubscr...@directory.apache.org For additional commands, e-mail: dev-h...@directory.apache.org