You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/05/07 10:48:50 UTC

[syncope] 01/02: [SYNCOPE-1552] Completing with support for JPA JSON

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

commit 2c97d9d1993f282e5bbed67d9ba78d6243edb011
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu May 7 12:29:35 2020 +0200

    [SYNCOPE-1552] Completing with support for JPA JSON
---
 .../client/console/rest/LoggerRestClient.java      |  8 +++---
 .../syncope/common/rest/api/beans/AuditQuery.java  | 14 +++++-----
 .../org/apache/syncope/core/logic/LoggerLogic.java | 30 ++++++++++++----------
 .../persistence/jpa/dao/MyJPAJSONLoggerDAO.java    | 22 ++++++++++------
 .../persistence/jpa/dao/PGJPAJSONLoggerDAO.java    | 22 ++++++++++------
 .../src/test/resources/domains/MasterContent.xml   |  2 ++
 .../core/persistence/jpa/DomainConfFactory.java    | 16 +++++-------
 .../syncope/core/persistence/jpa/MasterDomain.java | 27 ++++++++-----------
 .../main/resources/application-embedded.properties |  5 ++--
 .../org/apache/syncope/fit/core/AuditITCase.java   | 18 +++++++------
 .../org/apache/syncope/fit/core/LoggerITCase.java  | 29 +++++++++++----------
 11 files changed, 104 insertions(+), 89 deletions(-)

diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
index aefccb9..6ec8c85 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/rest/LoggerRestClient.java
@@ -57,7 +57,7 @@ public class LoggerRestClient extends BaseRestClient {
 
         return result;
     }
-    
+
     public static List<LoggerTO> listLogs() {
         List<LoggerTO> logs = getService(LoggerService.class).list(LoggerType.LOG);
         logs.sort(Comparator.comparing(LoggerTO::getKey));
@@ -119,7 +119,8 @@ public class LoggerRestClient extends BaseRestClient {
             final AuditElements.Result result,
             final SortParam<String> sort) {
 
-        AuditQuery query = new AuditQuery.Builder(key).
+        AuditQuery query = new AuditQuery.Builder().
+                entityKey(key).
                 size(size).
                 page(page).
                 type(type).
@@ -139,7 +140,8 @@ public class LoggerRestClient extends BaseRestClient {
             final List<String> events,
             final AuditElements.Result result) {
 
-        AuditQuery query = new AuditQuery.Builder(key).
+        AuditQuery query = new AuditQuery.Builder().
+                entityKey(key).
                 page(1).
                 size(1).
                 type(type).
diff --git a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java
index 5992024..ab5fa65 100644
--- a/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java
+++ b/common/idrepo/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/AuditQuery.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.common.rest.api.beans;
 
 import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
 import io.swagger.v3.oas.annotations.media.ArraySchema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import java.util.ArrayList;
@@ -34,16 +35,16 @@ public class AuditQuery extends AbstractQuery {
 
     public static class Builder extends AbstractQuery.Builder<AuditQuery, Builder> {
 
-        public Builder(final String entityKey) {
-            super();
-            getInstance().setEntityKey(entityKey);
-        }
-
         @Override
         protected AuditQuery newInstance() {
             return new AuditQuery();
         }
 
+        public Builder entityKey(final String entityKey) {
+            getInstance().setEntityKey(entityKey);
+            return this;
+        }
+
         public Builder type(final AuditElements.EventCategoryType type) {
             getInstance().setType(type);
             return this;
@@ -87,7 +88,8 @@ public class AuditQuery extends AbstractQuery {
 
     private AuditElements.Result result;
 
-    @Parameter(name = JAXRSService.PARAM_ENTITY_KEY, description = "audit entity key to match", schema =
+    @Parameter(name = JAXRSService.PARAM_ENTITY_KEY, in = ParameterIn.QUERY,
+            description = "audit entity key to match", schema =
             @Schema(implementation = String.class, example = "50592942-73ec-44c4-a377-e859524245e4"))
     public String getEntityKey() {
         return entityKey;
diff --git a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
index c450ce5..67157f1 100644
--- a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
+++ b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
@@ -101,7 +101,7 @@ public class LoggerLogic extends AbstractTransactionalLogic<EntityTO> {
 
     @Autowired
     private AuditManager auditManager;
-    
+
     @PreAuthorize("hasRole('" + IdRepoEntitlement.LOG_LIST + "') and authentication.details.domain == "
             + "T(org.apache.syncope.common.lib.SyncopeConstants).MASTER_DOMAIN")
     @Transactional(readOnly = true)
@@ -421,22 +421,24 @@ public class LoggerLogic extends AbstractTransactionalLogic<EntityTO> {
 
     @PreAuthorize("hasRole('" + IdRepoEntitlement.AUDIT_CREATE + "')")
     public void create(final AuditEntry auditEntry) {
-        boolean auditRequested = auditManager.auditRequested(auditEntry.getWho(),
-            auditEntry.getLogger().getType(),
-            auditEntry.getLogger().getCategory(),
-            auditEntry.getLogger().getSubcategory(),
-            auditEntry.getLogger().getEvent());
-
-        if (auditRequested) {
-            auditManager.audit(auditEntry.getWho(),
+        boolean auditRequested = auditManager.auditRequested(
+                auditEntry.getWho(),
                 auditEntry.getLogger().getType(),
                 auditEntry.getLogger().getCategory(),
                 auditEntry.getLogger().getSubcategory(),
-                auditEntry.getLogger().getEvent(),
-                auditEntry.getLogger().getResult(),
-                auditEntry.getBefore(),
-                auditEntry.getOutput(),
-                auditEntry.getInputs());
+                auditEntry.getLogger().getEvent());
+
+        if (auditRequested) {
+            auditManager.audit(
+                    auditEntry.getWho(),
+                    auditEntry.getLogger().getType(),
+                    auditEntry.getLogger().getCategory(),
+                    auditEntry.getLogger().getSubcategory(),
+                    auditEntry.getLogger().getEvent(),
+                    auditEntry.getLogger().getResult(),
+                    auditEntry.getBefore(),
+                    auditEntry.getOutput(),
+                    auditEntry.getInputs());
         }
     }
 
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONLoggerDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONLoggerDAO.java
index bbffaed..cd9be15 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONLoggerDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/MyJPAJSONLoggerDAO.java
@@ -29,17 +29,23 @@ public class MyJPAJSONLoggerDAO extends AbstractJPAJSONLoggerDAO {
 
         @Override
         protected String doBuild(final List<ObjectNode> containers) {
-            query.append('(').append(AUDIT_MESSAGE_COLUMN).append(" -> '$.before' LIKE '%").append(entityKey).
-                    append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append(" -> '$.input' LIKE '%").append(entityKey).
-                    append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append(" -> '$.output' LIKE '%").append(entityKey).
-                    append("%')");
+            if (entityKey != null) {
+                query.append('(').append(AUDIT_MESSAGE_COLUMN).append("->'$.before' LIKE '%").append(entityKey).
+                        append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append("->'$.input' LIKE '%").append(entityKey).
+                        append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append("->'$.output' LIKE '%").append(entityKey).
+                        append("%')");
+            }
 
             if (!containers.isEmpty()) {
-                query.append(" AND (").
-                        append(containers.stream().map(container -> "JSON_CONTAINS(" + AUDIT_MESSAGE_COLUMN + ", '"
+                if (entityKey != null) {
+                    query.append(" AND (");
+                }
+                query.append(containers.stream().map(container -> "JSON_CONTAINS(" + AUDIT_MESSAGE_COLUMN + ", '"
                         + POJOHelper.serialize(container).replace("'", "''")
-                        + "')").collect(Collectors.joining(" OR "))).
-                        append(')');
+                        + "')").collect(Collectors.joining(" OR ")));
+                if (entityKey != null) {
+                    query.append(')');
+                }
             }
 
             return query.toString();
diff --git a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONLoggerDAO.java b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONLoggerDAO.java
index c9ee797..7663f7e 100644
--- a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONLoggerDAO.java
+++ b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/PGJPAJSONLoggerDAO.java
@@ -30,17 +30,23 @@ public class PGJPAJSONLoggerDAO extends AbstractJPAJSONLoggerDAO {
 
         @Override
         protected String doBuild(final List<ObjectNode> containers) {
-            query.append('(').append(AUDIT_MESSAGE_COLUMN).append(" ->> 'before' LIKE '%").append(entityKey).
-                    append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append(" ->> 'input' LIKE '%").append(entityKey).
-                    append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append(" ->> 'output' LIKE '%").append(entityKey).
-                    append("%')");
+            if (entityKey != null) {
+                query.append('(').append(AUDIT_MESSAGE_COLUMN).append(" ->> 'before' LIKE '%").append(entityKey).
+                        append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append(" ->> 'input' LIKE '%").append(entityKey).
+                        append("%' OR ").append(AUDIT_MESSAGE_COLUMN).append(" ->> 'output' LIKE '%").append(entityKey).
+                        append("%')");
+            }
 
             if (!containers.isEmpty()) {
-                query.append(" AND (").
-                        append(containers.stream().map(container -> AUDIT_MESSAGE_COLUMN + " @> '"
+                if (entityKey != null) {
+                    query.append(" AND (");
+                }
+                query.append(containers.stream().map(container -> AUDIT_MESSAGE_COLUMN + " @> '"
                         + POJOHelper.serialize(container).replace("'", "''")
-                        + "'::jsonb").collect(Collectors.joining(" OR "))).
-                        append(')');
+                        + "'::jsonb").collect(Collectors.joining(" OR ")));
+                if (entityKey != null) {
+                    query.append(')');
+                }
             }
 
             return query.toString();
diff --git a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
index 4388d1c..1683d0b 100644
--- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
@@ -2382,6 +2382,8 @@ $$ }&#10;
 
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[SyncopeLogic]:[]:[isSelfRegAllowed]:[SUCCESS]" logLevel="DEBUG"/>
 
+  <SyncopeLogger logType="AUDIT" logName="syncope.audit.[WA]:[LoggerLogic]:[AUTHENTICATION]:[validate]:[SUCCESS]" logLevel="DEBUG"/>
+
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ConnectorLogic]:[]:[create]:[SUCCESS]" logLevel="DEBUG"/>
   <SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[ConnectorLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
 
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
index 117ad84..a596eeb 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/DomainConfFactory.java
@@ -24,12 +24,14 @@ import java.io.ByteArrayInputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.Objects;
-
 import javax.persistence.EntityManagerFactory;
 import javax.sql.DataSource;
 import org.apache.syncope.common.keymaster.client.api.model.Domain;
+import org.apache.syncope.core.persistence.api.DomainRegistry;
 import org.apache.syncope.core.persistence.jpa.spring.DomainEntityManagerFactoryBean;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
@@ -44,9 +46,6 @@ import org.springframework.jndi.JndiObjectFactoryBean;
 import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter;
 import org.springframework.stereotype.Component;
-import org.apache.syncope.core.persistence.api.DomainRegistry;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @Component
 public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
@@ -84,7 +83,6 @@ public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
 
     @Override
     public void register(final Domain domain) {
-        // localDomainDataSource
         HikariConfig hikariConfig = new HikariConfig();
         hikariConfig.setDriverClassName(domain.getJdbcDriver());
         hikariConfig.setJdbcUrl(domain.getJdbcURL());
@@ -95,14 +93,12 @@ public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
         hikariConfig.setMaximumPoolSize(domain.getPoolMaxActive());
         hikariConfig.setMinimumIdle(domain.getPoolMinIdle());
 
-        HikariDataSource localDomainDataSource = new HikariDataSource(hikariConfig);
-
         // domainDataSource
         registerBeanDefinition(
                 domain.getKey() + "DataSource",
                 BeanDefinitionBuilder.rootBeanDefinition(JndiObjectFactoryBean.class).
                         addPropertyValue("jndiName", "java:comp/env/jdbc/syncope" + domain.getKey() + "DataSource").
-                        addPropertyValue("defaultObject", localDomainDataSource).
+                        addPropertyValue("defaultObject", new HikariDataSource(hikariConfig)).
                         getBeanDefinition());
         DataSource initedDataSource = ApplicationContextProvider.getBeanFactory().
                 getBean(domain.getKey() + "DataSource", DataSource.class);
@@ -137,8 +133,8 @@ public class DomainConfFactory implements DomainRegistry, EnvironmentAware {
         if (env.containsProperty("openjpaMetaDataFactory")) {
             emf.addPropertyValue("jpaPropertyMap", Map.of(
                     "openjpa.MetaDataFactory",
-                    Objects.requireNonNull(env.getProperty("openjpaMetaDataFactory"))
-                        .replace("##orm##", domain.getOrm())));
+                    Objects.requireNonNull(env.getProperty("openjpaMetaDataFactory")).
+                            replace("##orm##", domain.getOrm())));
         }
         registerBeanDefinition(domain.getKey() + "EntityManagerFactory", emf.getBeanDefinition());
         ApplicationContextProvider.getBeanFactory().getBean(domain.getKey() + "EntityManagerFactory");
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java
index aeb8c7b..954386e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/MasterDomain.java
@@ -59,7 +59,7 @@ public class MasterDomain {
 
     @Autowired
     private Environment env;
-    
+
     @Value("${Master.driverClassName}")
     private String driverClassName;
 
@@ -96,9 +96,9 @@ public class MasterDomain {
     @Value("${content.directory}")
     private String contentDirectory;
 
-    @Bean
-    @ConditionalOnMissingBean(name = "localMasterDataSource")
-    public DataSource localMasterDataSource() {
+    @Bean(name = "MasterDataSource")
+    @ConditionalOnMissingBean(name = "MasterDataSource")
+    public JndiObjectFactoryBean masterDataSource() {
         HikariConfig hikariConfig = new HikariConfig();
         hikariConfig.setDriverClassName(driverClassName);
         hikariConfig.setJdbcUrl(url);
@@ -107,15 +107,10 @@ public class MasterDomain {
         hikariConfig.setTransactionIsolation(transactionIsolation);
         hikariConfig.setMaximumPoolSize(maximumPoolSize);
         hikariConfig.setMinimumIdle(minimumIdle);
-        return new HikariDataSource(hikariConfig);
-    }
 
-    @Bean(name = "MasterDataSource")
-    @ConditionalOnMissingBean(name = "MasterDataSource")
-    public JndiObjectFactoryBean masterDataSource() {
         JndiObjectFactoryBean masterDataSource = new JndiObjectFactoryBean();
         masterDataSource.setJndiName("java:comp/env/jdbc/syncopeMasterDataSource");
-        masterDataSource.setDefaultObject(localMasterDataSource());
+        masterDataSource.setDefaultObject(new HikariDataSource(hikariConfig));
         return masterDataSource;
     }
 
@@ -151,21 +146,21 @@ public class MasterDomain {
         DomainEntityManagerFactoryBean masterEntityManagerFactory = new DomainEntityManagerFactoryBean();
         masterEntityManagerFactory.setMappingResources(orm);
         masterEntityManagerFactory.setPersistenceUnitName("Master");
-        
+
         masterEntityManagerFactory.setDataSource(Objects.requireNonNull((DataSource) masterDataSource().getObject()));
         masterEntityManagerFactory.setJpaVendorAdapter(vendorAdapter);
         masterEntityManagerFactory.setCommonEntityManagerFactoryConf(commonEMFConf);
 
         if (env.containsProperty("openjpaMetaDataFactory")) {
             masterEntityManagerFactory.setJpaPropertyMap(Map.of(
-                "openjpa.MetaDataFactory",
-                Objects.requireNonNull(env.getProperty("openjpaMetaDataFactory")).replace("##orm##", orm)));
+                    "openjpa.MetaDataFactory",
+                    Objects.requireNonNull(env.getProperty("openjpaMetaDataFactory")).replace("##orm##", orm)));
         }
 
         return masterEntityManagerFactory;
     }
 
-    @Bean(name = {"MasterTransactionManager", "Master"})
+    @Bean(name = { "MasterTransactionManager", "Master" })
     @ConditionalOnMissingBean(name = "MasterTransactionManager")
     public PlatformTransactionManager transactionManager() {
         return new JpaTransactionManager(Objects.requireNonNull(masterEntityManagerFactory().getObject()));
@@ -184,7 +179,7 @@ public class MasterDomain {
     @ConditionalOnMissingBean(name = "MasterContentXML")
     public InputStream masterContentXML() throws IOException {
         ResourceWithFallbackLoader masterContentXML =
-            ctx.getBeanFactory().createBean(ResourceWithFallbackLoader.class);
+                ctx.getBeanFactory().createBean(ResourceWithFallbackLoader.class);
         masterContentXML.setPrimary("file:" + contentDirectory + "/domains/MasterContent.xml");
         masterContentXML.setFallback("classpath:domains/MasterContent.xml");
         return masterContentXML.getResource().getInputStream();
@@ -194,7 +189,7 @@ public class MasterDomain {
     @ConditionalOnMissingBean(name = "MasterKeymasterConfParamsJSON")
     public InputStream masterKeymasterConfParamsJSON() throws IOException {
         ResourceWithFallbackLoader keymasterConfParamsJSON =
-            ctx.getBeanFactory().createBean(ResourceWithFallbackLoader.class);
+                ctx.getBeanFactory().createBean(ResourceWithFallbackLoader.class);
         keymasterConfParamsJSON.setPrimary("file:" + contentDirectory + "/domains/MasterKeymasterConfParams.json");
         keymasterConfParamsJSON.setFallback("classpath:domains/MasterKeymasterConfParams.json");
         return keymasterConfParamsJSON.getResource().getInputStream();
diff --git a/fit/core-reference/src/main/resources/application-embedded.properties b/fit/core-reference/src/main/resources/application-embedded.properties
index b13cc44..c96481a 100644
--- a/fit/core-reference/src/main/resources/application-embedded.properties
+++ b/fit/core-reference/src/main/resources/application-embedded.properties
@@ -20,8 +20,9 @@ spring.devtools.livereload.enabled=false
 spring.devtools.restart.enabled=false
 
 # H2
-#spring.h2.console.enabled=true
-#spring.h2.console.path=/h2
+spring.h2.console.enabled=true
+spring.h2.console.path=/h2
+
 # Datasource
 spring.datasource.url=jdbc:h2:mem:syncopedb;DB_CLOSE_DELAY=-1
 spring.datasource.username=sa
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
index 7aa36ab..3fb543b 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuditITCase.java
@@ -77,7 +77,7 @@ public class AuditITCase extends AbstractITCase {
         UserTO userTO = createUser(UserITCase.getUniqueSample("audit@syncope.org")).getEntity();
         assertNotNull(userTO.getKey());
 
-        AuditQuery query = new AuditQuery.Builder(userTO.getKey()).build();
+        AuditQuery query = new AuditQuery.Builder().entityKey(userTO.getKey()).build();
         List<AuditEntry> entries = query(query, MAX_WAIT_SECONDS);
         assertEquals(1, entries.size());
 
@@ -98,7 +98,7 @@ public class AuditITCase extends AbstractITCase {
         UserTO userTO = createUser(UserITCase.getUniqueSample("audit@syncope.org")).getEntity();
         assertNotNull(userTO.getKey());
 
-        AuditQuery query = new AuditQuery.Builder(userTO.getKey()).orderBy("event_date desc").
+        AuditQuery query = new AuditQuery.Builder().entityKey(userTO.getKey()).orderBy("event_date desc").
                 page(1).size(1).build();
         AuditEntry entry = query(query, MAX_WAIT_SECONDS, true);
         assertNotNull(entry);
@@ -110,7 +110,8 @@ public class AuditITCase extends AbstractITCase {
         UserTO userTO = createUser(UserITCase.getUniqueSample("audit-2@syncope.org")).getEntity();
         assertNotNull(userTO.getKey());
 
-        AuditQuery query = new AuditQuery.Builder(userTO.getKey()).
+        AuditQuery query = new AuditQuery.Builder().
+                entityKey(userTO.getKey()).
                 orderBy("event_date desc").
                 page(1).
                 size(1).
@@ -129,7 +130,7 @@ public class AuditITCase extends AbstractITCase {
         GroupTO groupTO = createGroup(GroupITCase.getBasicSample("AuditGroup")).getEntity();
         assertNotNull(groupTO.getKey());
 
-        AuditQuery query = new AuditQuery.Builder(groupTO.getKey()).orderBy("event_date desc").
+        AuditQuery query = new AuditQuery.Builder().entityKey(groupTO.getKey()).orderBy("event_date desc").
                 page(1).size(1).build();
         AuditEntry entry = query(query, MAX_WAIT_SECONDS, true);
         assertNotNull(entry);
@@ -141,7 +142,7 @@ public class AuditITCase extends AbstractITCase {
         GroupTO groupTO = createGroup(GroupITCase.getBasicSample("AuditGroupSearch")).getEntity();
         assertNotNull(groupTO.getKey());
 
-        AuditQuery query = new AuditQuery.Builder(groupTO.getKey()).build();
+        AuditQuery query = new AuditQuery.Builder().entityKey(groupTO.getKey()).build();
         List<AuditEntry> entries = query(query, MAX_WAIT_SECONDS);
         assertEquals(1, entries.size());
 
@@ -161,7 +162,7 @@ public class AuditITCase extends AbstractITCase {
     public void findByAnyObject() {
         AnyObjectTO anyObjectTO = createAnyObject(AnyObjectITCase.getSample("Italy")).getEntity();
         assertNotNull(anyObjectTO.getKey());
-        AuditQuery query = new AuditQuery.Builder(anyObjectTO.getKey()).orderBy("event_date desc").
+        AuditQuery query = new AuditQuery.Builder().entityKey(anyObjectTO.getKey()).orderBy("event_date desc").
                 page(1).size(1).build();
         AuditEntry entry = query(query, MAX_WAIT_SECONDS, true);
         assertNotNull(entry);
@@ -173,7 +174,7 @@ public class AuditITCase extends AbstractITCase {
         AnyObjectTO anyObjectTO = createAnyObject(AnyObjectITCase.getSample("USA")).getEntity();
         assertNotNull(anyObjectTO);
 
-        AuditQuery query = new AuditQuery.Builder(anyObjectTO.getKey()).build();
+        AuditQuery query = new AuditQuery.Builder().entityKey(anyObjectTO.getKey()).build();
         List<AuditEntry> entries = query(query, MAX_WAIT_SECONDS);
         assertEquals(1, entries.size());
 
@@ -192,7 +193,8 @@ public class AuditITCase extends AbstractITCase {
     public void findByConnector() throws JsonProcessingException {
         String connectorKey = "74141a3b-0762-4720-a4aa-fc3e374ef3ef";
 
-        AuditQuery query = new AuditQuery.Builder(connectorKey).
+        AuditQuery query = new AuditQuery.Builder().
+                entityKey(connectorKey).
                 orderBy("event_date desc").
                 type(AuditElements.EventCategoryType.LOGIC).
                 category("ConnectorLogic").
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
index fea40c9..960da37 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
@@ -38,7 +38,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Properties;
 import java.util.UUID;
-
 import javax.ws.rs.core.Response;
 import javax.xml.ws.WebServiceException;
 import org.apache.commons.lang3.StringUtils;
@@ -276,25 +275,27 @@ public class LoggerITCase extends AbstractITCase {
 
     @Test
     public void saveAuditEvent() {
-        AuditLoggerName logger = new AuditLoggerName(EventCategoryType.WA, "LoggerLogic",
-            AuditElements.AUTHENTICATION_CATEGORY.toUpperCase(), "validate",
-            AuditElements.Result.SUCCESS);
         AuditEntry auditEntry = new AuditEntry();
-        String who = "syncope-user " + UUID.randomUUID().toString();
-        auditEntry.setWho(who);
-        auditEntry.setLogger(logger);
+        auditEntry.setWho("syncope-user " + UUID.randomUUID().toString());
+        auditEntry.setLogger(new AuditLoggerName(
+                EventCategoryType.WA,
+                "LoggerLogic",
+                AuditElements.AUTHENTICATION_CATEGORY.toUpperCase(),
+                "validate",
+                AuditElements.Result.SUCCESS));
         auditEntry.setDate(new Date());
         auditEntry.setBefore(UUID.randomUUID().toString());
         auditEntry.setOutput(UUID.randomUUID().toString());
         assertDoesNotThrow(() -> loggerService.create(auditEntry));
 
-        AuditQuery query = new AuditQuery();
-        query.setSize(1);
-        query.setType(auditEntry.getLogger().getType());
-        query.setResult(auditEntry.getLogger().getResult());
-        query.setCategory(auditEntry.getLogger().getCategory());
-        query.setEvents(List.of(auditEntry.getLogger().getEvent()));
-        PagedResult<AuditEntry> events = loggerService.search(query);
+        PagedResult<AuditEntry> events = loggerService.search(new AuditQuery.Builder().
+                size(1).
+                type(auditEntry.getLogger().getType()).
+                category(auditEntry.getLogger().getCategory()).
+                subcategory(auditEntry.getLogger().getSubcategory()).
+                event(auditEntry.getLogger().getEvent()).
+                result(auditEntry.getLogger().getResult()).
+                build());
         assertNotNull(events);
         assertEquals(1, events.getSize());
     }