This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push: new ff01074199 Elasticsearch and OpenSearch: avoid duplicating id property ff01074199 is described below commit ff01074199c5da170f4c4ccd6bdf0859ef8bf77a Author: Francesco Chicchiriccò <ilgro...@apache.org> AuthorDate: Wed Jul 16 13:48:37 2025 +0200 Elasticsearch and OpenSearch: avoid duplicating id property --- .../client/ElasticsearchIndexManager.java | 2 - .../elasticsearch/client/ElasticsearchUtils.java | 2 - .../dao/ElasticsearchAnySearchDAO.java | 19 +++++++- .../dao/ElasticsearchRealmSearchDAO.java | 5 +++ .../dao/ElasticsearchAnySearchDAOTest.java | 50 +++++++++++----------- .../opensearch/client/OpenSearchIndexManager.java | 2 - .../ext/opensearch/client/OpenSearchUtils.java | 2 - .../opensearch/dao/OpenSearchAnySearchDAO.java | 19 +++++++- .../opensearch/dao/OpenSearchRealmSearchDAO.java | 5 +++ .../opensearch/dao/OpenSearchAnySearchDAOTest.java | 50 +++++++++++----------- .../org/apache/syncope/fit/core/SearchITCase.java | 15 +++++-- pom.xml | 2 +- 12 files changed, 106 insertions(+), 67 deletions(-) diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java index 9df9e33c93..df7c8c8f7b 100644 --- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java +++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchIndexManager.java @@ -49,7 +49,6 @@ import org.apache.syncope.core.persistence.api.entity.AuditEvent; import org.apache.syncope.core.persistence.api.entity.Entity; import org.apache.syncope.core.persistence.api.entity.Realm; import org.apache.syncope.core.provisioning.api.event.EntityLifecycleEvent; -import org.apache.syncope.core.spring.security.SecureRandomUtils; import org.identityconnectors.framework.common.objects.SyncDeltaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -342,7 +341,6 @@ public class ElasticsearchIndexManager { IndexRequest<Map<String, Object>> request = new IndexRequest.Builder<Map<String, Object>>(). index(ElasticsearchUtils.getAuditIndex(domain)). - id(SecureRandomUtils.generateRandomUUID().toString()). document(elasticsearchUtils.document(auditEvent)). build(); IndexResponse response = client.index(request); diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java index 1f887cd7c8..68ad03f96e 100644 --- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java +++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java @@ -116,7 +116,6 @@ public class ElasticsearchUtils { @Transactional public Map<String, Object> document(final Any any) { Map<String, Object> builder = new HashMap<>(); - builder.put("id", any.getKey()); builder.put("realm", any.getRealm().getKey()); builder.put("anyType", any.getType().getKey()); builder.put("creationDate", any.getCreationDate()); @@ -229,7 +228,6 @@ public class ElasticsearchUtils { public Map<String, Object> document(final Realm realm) { Map<String, Object> builder = new HashMap<>(); - builder.put("id", realm.getKey()); builder.put("name", realm.getName()); builder.put("parent_id", realm.getParent() == null ? null : realm.getParent().getKey()); builder.put("fullPath", realm.getFullPath()); diff --git a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java index 697e7a59db..2998833c1e 100644 --- a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java +++ b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java @@ -237,8 +237,8 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO { orderBy.forEach(clause -> { String sortName = null; - // Manage difference among external key attribute and internal JPA @Id - String fieldName = "key".equals(clause.getProperty()) ? "id" : clause.getProperty(); + // Manage difference between external key attribute and internal _id + String fieldName = "key".equals(clause.getProperty()) ? "_id" : clause.getProperty(); Field anyField = anyUtils.getField(fieldName).orElse(null); if (anyField == null) { @@ -602,6 +602,21 @@ public class ElasticsearchAnySearchDAO extends AbstractAnySearchDAO { return fillAttrQuery(checked.getLeft(), checked.getRight(), cond); } + @Override + protected Triple<PlainSchema, PlainAttrValue, AnyCond> check(final AnyCond cond, final AnyTypeKind kind) { + Triple<PlainSchema, PlainAttrValue, AnyCond> checked = super.check(cond, kind); + + // Manage difference between external id attribute and internal _id + if ("id".equals(checked.getRight().getSchema())) { + checked.getRight().setSchema("_id"); + } + if ("id".equals(checked.getLeft().getKey())) { + checked.getLeft().setKey("_id"); + } + + return checked; + } + protected Query getQuery(final AnyCond cond, final AnyTypeKind kind) { if (JAXRSService.PARAM_REALM.equals(cond.getSchema()) && cond.getExpression().startsWith("/")) { Realm realm = realmSearchDAO.findByFullPath(cond.getExpression()). diff --git a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java index 59fb30b7fe..b71124383a 100644 --- a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java +++ b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchRealmSearchDAO.java @@ -30,6 +30,7 @@ import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders; import co.elastic.clients.elasticsearch.core.CountRequest; import co.elastic.clients.elasticsearch.core.SearchRequest; import co.elastic.clients.elasticsearch.core.search.Hit; +import co.elastic.clients.elasticsearch.core.search.SourceConfig; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -93,6 +94,7 @@ public class ElasticsearchRealmSearchDAO implements RealmSearchDAO { query(new Query.Builder().term(QueryBuilders.term(). field("fullPath").value(fullPath).build()).build()). size(1). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); try { @@ -113,6 +115,7 @@ public class ElasticsearchRealmSearchDAO implements RealmSearchDAO { searchType(SearchType.QueryThenFetch). query(query). sort(REALM_SORT_OPTIONS). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); try { @@ -214,6 +217,7 @@ public class ElasticsearchRealmSearchDAO implements RealmSearchDAO { from(pageable.isUnpaged() ? 0 : pageable.getPageSize() * pageable.getPageNumber()). size(pageable.isUnpaged() ? indexMaxResultWindow : pageable.getPageSize()). sort(REALM_SORT_OPTIONS). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); List<String> result = List.of(); @@ -249,6 +253,7 @@ public class ElasticsearchRealmSearchDAO implements RealmSearchDAO { from(0). size(indexMaxResultWindow). sort(REALM_SORT_OPTIONS). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); List<String> result = List.of(); diff --git a/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java b/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java index 16bf74f0b2..15b985a0a2 100644 --- a/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java +++ b/ext/elasticsearch/persistence/src/test/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAOTest.java @@ -195,7 +195,7 @@ public class ElasticsearchAnySearchDAOTest { assertThat( new Query.Builder().bool(QueryBuilders.bool(). - filter(new Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()). + filter(new Query.Builder().exists(QueryBuilders.exists().field("_id").build()).build()). filter(new Query.Builder().term(QueryBuilders.term().field("memberships").value("groupKey"). build()).build()).build()).build()). usingRecursiveComparison(). @@ -260,17 +260,17 @@ public class ElasticsearchAnySearchDAOTest { assertThat( new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("1").build()).build()). + QueryBuilders.term().field("_id").value("1").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("2").build()).build()). + QueryBuilders.term().field("_id").value("2").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("3").build()).build()). + QueryBuilders.term().field("_id").value("3").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("4").build()).build()). + QueryBuilders.term().field("_id").value("4").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("5").build()).build()). + QueryBuilders.term().field("_id").value("5").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("6").build()).build()). + QueryBuilders.term().field("_id").value("6").build()).build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -287,17 +287,17 @@ public class ElasticsearchAnySearchDAOTest { assertThat( new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("1").build()).build()). + QueryBuilders.term().field("_id").value("1").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("2").build()).build()). + QueryBuilders.term().field("_id").value("2").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("3").build()).build()). + QueryBuilders.term().field("_id").value("3").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("4").build()).build()). + QueryBuilders.term().field("_id").value("4").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("5").build()).build()). + QueryBuilders.term().field("_id").value("5").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("6").build()).build()). + QueryBuilders.term().field("_id").value("6").build()).build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -323,19 +323,19 @@ public class ElasticsearchAnySearchDAOTest { new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("1").build()).build()). + QueryBuilders.term().field("_id").value("1").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("2").build()).build()). + QueryBuilders.term().field("_id").value("2").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("3").build()).build()).build()). + QueryBuilders.term().field("_id").value("3").build()).build()).build()). build()). filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("4").build()).build()). + QueryBuilders.term().field("_id").value("4").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("5").build()).build()). + QueryBuilders.term().field("_id").value("5").build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value("6").build()).build()).build()). + QueryBuilders.term().field("_id").value("6").build()).build()).build()). build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -362,19 +362,19 @@ public class ElasticsearchAnySearchDAOTest { new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("1").build()).build()). + QueryBuilders.term().field("_id").value("1").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("2").build()).build()). + QueryBuilders.term().field("_id").value("2").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("3").build()).build()).build()). + QueryBuilders.term().field("_id").value("3").build()).build()).build()). build()). queries(new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("4").build()).build()). + QueryBuilders.term().field("_id").value("4").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("5").build()).build()). + QueryBuilders.term().field("_id").value("5").build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value("6").build()).build()).build()). + QueryBuilders.term().field("_id").value("6").build()).build()).build()). build()). build()).build()). usingRecursiveComparison().isEqualTo(query); diff --git a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java index d499b5c297..99aae23a4e 100644 --- a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java +++ b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchIndexManager.java @@ -27,7 +27,6 @@ import org.apache.syncope.core.persistence.api.entity.AuditEvent; import org.apache.syncope.core.persistence.api.entity.Entity; import org.apache.syncope.core.persistence.api.entity.Realm; import org.apache.syncope.core.provisioning.api.event.EntityLifecycleEvent; -import org.apache.syncope.core.spring.security.SecureRandomUtils; import org.identityconnectors.framework.common.objects.SyncDeltaType; import org.opensearch.client.opensearch.OpenSearchClient; import org.opensearch.client.opensearch._types.OpenSearchException; @@ -341,7 +340,6 @@ public class OpenSearchIndexManager { IndexRequest<Map<String, Object>> request = new IndexRequest.Builder<Map<String, Object>>(). index(OpenSearchUtils.getAuditIndex(domain)). - id(SecureRandomUtils.generateRandomUUID().toString()). document(openSearchUtils.document(auditEvent)). build(); IndexResponse response = client.index(request); diff --git a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java index b94ee902dc..28f2f65eb8 100644 --- a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java +++ b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java @@ -116,7 +116,6 @@ public class OpenSearchUtils { @Transactional public Map<String, Object> document(final Any any) { Map<String, Object> builder = new HashMap<>(); - builder.put("id", any.getKey()); builder.put("realm", any.getRealm().getKey()); builder.put("anyType", any.getType().getKey()); builder.put("creationDate", any.getCreationDate()); @@ -229,7 +228,6 @@ public class OpenSearchUtils { public Map<String, Object> document(final Realm realm) { Map<String, Object> builder = new HashMap<>(); - builder.put("id", realm.getKey()); builder.put("name", realm.getName()); builder.put("parent_id", realm.getParent() == null ? null : realm.getParent().getKey()); builder.put("fullPath", realm.getFullPath()); diff --git a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java index 53712910bb..15216979d2 100644 --- a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java +++ b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java @@ -236,8 +236,8 @@ public class OpenSearchAnySearchDAO extends AbstractAnySearchDAO { orderBy.forEach(clause -> { String sortName = null; - // Manage difference among external key attribute and internal JPA @Id - String fieldName = "key".equals(clause.getProperty()) ? "id" : clause.getProperty(); + // Manage difference between external key attribute and internal _id + String fieldName = "key".equals(clause.getProperty()) ? "_id" : clause.getProperty(); Field anyField = anyUtils.getField(fieldName).orElse(null); if (anyField == null) { @@ -596,6 +596,21 @@ public class OpenSearchAnySearchDAO extends AbstractAnySearchDAO { return fillAttrQuery(checked.getLeft(), checked.getRight(), cond); } + @Override + protected Triple<PlainSchema, PlainAttrValue, AnyCond> check(final AnyCond cond, final AnyTypeKind kind) { + Triple<PlainSchema, PlainAttrValue, AnyCond> checked = super.check(cond, kind); + + // Manage difference between external id attribute and internal _id + if ("id".equals(checked.getRight().getSchema())) { + checked.getRight().setSchema("_id"); + } + if ("id".equals(checked.getLeft().getKey())) { + checked.getLeft().setKey("_id"); + } + + return checked; + } + protected Query getQuery(final AnyCond cond, final AnyTypeKind kind) { if (JAXRSService.PARAM_REALM.equals(cond.getSchema()) && cond.getExpression().startsWith("/")) { Realm realm = realmSearchDAO.findByFullPath(cond.getExpression()). diff --git a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java index 46d8f4cc6c..942e8a9fcd 100644 --- a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java +++ b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchRealmSearchDAO.java @@ -43,6 +43,7 @@ import org.opensearch.client.opensearch._types.query_dsl.QueryBuilders; import org.opensearch.client.opensearch.core.CountRequest; import org.opensearch.client.opensearch.core.SearchRequest; import org.opensearch.client.opensearch.core.search.Hit; +import org.opensearch.client.opensearch.core.search.SourceConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.domain.Pageable; @@ -94,6 +95,7 @@ public class OpenSearchRealmSearchDAO implements RealmSearchDAO { query(new Query.Builder().term(QueryBuilders.term(). field("fullPath").value(FieldValue.of(fullPath)).build()).build()). size(1). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); try { @@ -114,6 +116,7 @@ public class OpenSearchRealmSearchDAO implements RealmSearchDAO { searchType(SearchType.QueryThenFetch). query(query). sort(REALM_SORT_OPTIONS). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); try { @@ -214,6 +217,7 @@ public class OpenSearchRealmSearchDAO implements RealmSearchDAO { from(pageable.isUnpaged() ? 0 : pageable.getPageSize() * pageable.getPageNumber()). size(pageable.isUnpaged() ? indexMaxResultWindow : pageable.getPageSize()). sort(REALM_SORT_OPTIONS). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); List<String> result = List.of(); @@ -249,6 +253,7 @@ public class OpenSearchRealmSearchDAO implements RealmSearchDAO { from(0). size(indexMaxResultWindow). sort(REALM_SORT_OPTIONS). + fields(List.of()).source(new SourceConfig.Builder().fetch(false).build()). build(); List<String> result = List.of(); diff --git a/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java b/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java index 740083b6bf..c8b9c6935c 100644 --- a/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java +++ b/ext/opensearch/persistence/src/test/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAOTest.java @@ -196,7 +196,7 @@ public class OpenSearchAnySearchDAOTest { assertThat( new Query.Builder().bool(QueryBuilders.bool(). - filter(new Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()). + filter(new Query.Builder().exists(QueryBuilders.exists().field("_id").build()).build()). filter(new Query.Builder().term(QueryBuilders.term().field("memberships"). value(FieldValue.of("groupKey")).build()).build()).build()).build()). usingRecursiveComparison(). @@ -261,17 +261,17 @@ public class OpenSearchAnySearchDAOTest { assertThat( new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("1")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("1")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("2")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("2")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("3")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("3")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("4")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("4")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("5")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("5")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("6")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("6")).build()).build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -288,17 +288,17 @@ public class OpenSearchAnySearchDAOTest { assertThat( new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("1")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("1")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("2")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("2")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("3")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("3")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("4")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("4")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("5")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("5")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id").value(FieldValue.of("6")).build()).build()). + QueryBuilders.term().field("_id").value(FieldValue.of("6")).build()).build()). build()).build()). usingRecursiveComparison().isEqualTo(query); @@ -324,24 +324,24 @@ public class OpenSearchAnySearchDAOTest { new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("1")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("2")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("3")).build()).build()).build()). build()). filter(new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("4")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("5")).build()).build()). queries(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("6")).build()).build()).build()). build()). build()).build()). @@ -369,24 +369,24 @@ public class OpenSearchAnySearchDAOTest { new Query.Builder().disMax(QueryBuilders.disMax(). queries(new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("1")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("2")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("3")).build()).build()).build()). build()). queries(new Query.Builder().bool(QueryBuilders.bool(). filter(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("4")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("5")).build()).build()). filter(new Query.Builder().term( - QueryBuilders.term().field("id"). + QueryBuilders.term().field("_id"). value(FieldValue.of("6")).build()).build()).build()). build()). build()).build()). diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java index 73f1b0c808..afc5a1cb87 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java @@ -86,6 +86,13 @@ public class SearchITCase extends AbstractITCase { fiql(SyncopeClient.getUserSearchConditionBuilder().isNull("loginDate").query()).build()); assertNotNull(matchingUsers); assertFalse(matchingUsers.getResult().isEmpty()); + + // by key + matchingUsers = USER_SERVICE.search(new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM). + fiql(SyncopeClient.getUserSearchConditionBuilder(). + is("key").equalTo("1417acbe-cbf6-4277-9372-e75e04f97000").query()).build()); + assertNotNull(matchingUsers); + assertFalse(matchingUsers.getResult().isEmpty()); } @Test @@ -93,7 +100,7 @@ public class SearchITCase extends AbstractITCase { PagedResult<UserTO> matchingUsers = USER_SERVICE.search( new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder(). - is("username").equalToIgnoreCase("RoSsINI").and("key").lessThan(2).query()).build()); + is("username").equalToIgnoreCase("RoSsINI").and("key").notNullValue().query()).build()); assertNotNull(matchingUsers); assertEquals(1, matchingUsers.getResult().size()); assertEquals("rossini", matchingUsers.getResult().getFirst().getUsername()); @@ -118,7 +125,7 @@ public class SearchITCase extends AbstractITCase { PagedResult<UserTO> matchingUsers = USER_SERVICE.search( new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM). fiql(SyncopeClient.getUserSearchConditionBuilder(). - is("username").equalTo("rossini").and("key").lessThan(2).query()).build()); + is("key").notNullValue().and().is("username").equalTo("rossini").query()).build()); assertNotNull(matchingUsers); assertEquals(1, matchingUsers.getResult().size()); assertEquals("rossini", matchingUsers.getResult().getFirst().getUsername()); @@ -1033,7 +1040,7 @@ public class SearchITCase extends AbstractITCase { assertFalse(users.getResult().isEmpty()); assertTrue(users.getResult().stream(). allMatch(u -> "ve...@syncope.org".equals(u.getPlainAttr("email"). - orElseThrow().getValues().getFirst()))); + orElseThrow().getValues().getFirst()))); // 1. create user with similar email UserTO user = createUser(UserITCase.getSample("bisve...@syncope.org")).getEntity(); @@ -1055,7 +1062,7 @@ public class SearchITCase extends AbstractITCase { assertFalse(users.getResult().isEmpty()); assertTrue(users.getResult().stream(). allMatch(u -> "ve...@syncope.org".equals(u.getPlainAttr("email"). - orElseThrow().getValues().getFirst()))); + orElseThrow().getValues().getFirst()))); assertTrue(users.getResult().stream().noneMatch(u -> user.getKey().equals(u.getKey()))); } diff --git a/pom.xml b/pom.xml index 319ba51b71..2de1d2b46f 100644 --- a/pom.xml +++ b/pom.xml @@ -505,7 +505,7 @@ under the License. <tomcat.version>11.0.9</tomcat.version> <wildfly.version>36.0.1.Final</wildfly.version> - <payara.version>6.2025.6</payara.version> + <payara.version>6.2025.7</payara.version> <jakarta.faces.version>4.1.3</jakarta.faces.version> <docker.postgresql.version>17-alpine</docker.postgresql.version>