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/26 10:24:22 UTC
[syncope] branch 2_0_X updated: [SYNCOPE-1565] Fix JAXB
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_0_X by this push:
new 9dd15ce [SYNCOPE-1565] Fix JAXB
9dd15ce is described below
commit 9dd15ced2455457c75b76849c8ea0e73ee57829e
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Mon May 25 16:25:03 2020 +0200
[SYNCOPE-1565] Fix JAXB
---
.../apache/syncope/client/console/pages/Audit.java | 28 +--
.../syncope/common/lib/AbstractBaseBean.java | 5 +-
.../apache/syncope/common/lib/info/SystemInfo.java | 1 -
.../apache/syncope/common/lib/log/LogAppender.java | 5 +-
.../syncope/common/lib/patch/AnyObjectPatch.java | 31 ++++
.../apache/syncope/common/lib/patch/AnyPatch.java | 44 ++++-
.../syncope/common/lib/patch/GroupPatch.java | 37 ++++
.../apache/syncope/common/lib/patch/UserPatch.java | 41 +++++
.../lib/policy/AbstractPasswordRuleConf.java | 2 +-
.../apache/syncope/common/lib/policy/PolicyTO.java | 1 -
.../org/apache/syncope/common/lib/to/ErrorTO.java | 5 +-
.../org/apache/syncope/common/lib/to/SchemaTO.java | 1 -
.../syncope/common/lib/types/AuditLoggerName.java | 196 ++++++++++++++-------
.../apache/syncope/core/logic/SyncopeLogic.java | 1 -
.../syncope/core/logic/init/LoggerLoader.java | 4 +-
.../syncope/core/provisioning/java/AuditEntry.java | 154 +++++++++-------
.../provisioning/java/DefaultAuditManager.java | 72 ++++++--
.../java/job/report/AuditReportlet.java | 8 +-
.../syncope/core/rest/cxf/OpenApiFilter.java | 77 ++++++++
.../core/rest/cxf/RestServiceExceptionMapper.java | 15 +-
.../SyncopeSwaggerToOpenApiConversionFilter.java | 114 ------------
.../core/rest/cxf/service/WorkflowServiceImpl.java | 3 +-
.../src/main/resources/META-INF/web-fragment.xml | 8 +
.../rest-cxf/src/main/resources/restCXFContext.xml | 2 -
.../workflow/api/WorkflowDefinitionFormat.java | 15 +-
.../apache/syncope/common/lib/scim/SCIMConf.java | 1 -
.../syncope/common/lib/scim/SCIMGeneralConf.java | 1 -
.../syncope/common/lib/scim/SCIMUserConf.java | 1 -
.../syncope/common/lib/scim/SCIMUserNameConf.java | 5 +-
fit/core-reference/pom.xml | 10 ++
.../core/reference/SyslogRewriteAuditAppender.java | 36 ++--
.../fit/core/reference/TestFileAuditAppender.java | 24 ++-
.../reference/TestFileRewriteAuditAppender.java | 16 +-
.../src/main/resources/jboss/restCXFContext.xml | 2 -
.../syncope/fit/core/AuthenticationITCase.java | 6 +-
.../apache/syncope/fit/core/DerSchemaITCase.java | 1 +
.../org/apache/syncope/fit/core/LoggerITCase.java | 33 ++--
.../apache/syncope/fit/core/PullTaskITCase.java | 1 -
.../org/apache/syncope/fit/core/ReportITCase.java | 11 +-
.../org/apache/syncope/fit/core/SCIMITCase.java | 36 +---
.../apache/syncope/fit/core/SchedTaskITCase.java | 7 +-
.../apache/syncope/fit/core/UserSelfITCase.java | 19 +-
.../syncope/fit/core/UserWorkflowITCase.java | 22 ++-
43 files changed, 683 insertions(+), 419 deletions(-)
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
index 33df05a..d6e11ad 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Audit.java
@@ -93,13 +93,13 @@ public class Audit extends BasePage {
Pair<EventCategoryTO, AuditElements.Result> eventCategory =
AuditLoggerName.parseEventCategory(toBeRemoved);
- AuditLoggerName auditLoggerName = new AuditLoggerName(
- eventCategory.getKey().getType(),
- eventCategory.getKey().getCategory(),
- eventCategory.getKey().getSubcategory(),
- CollectionUtils.isEmpty(eventCategory.getKey().getEvents())
- ? null : eventCategory.getKey().getEvents().iterator().next(),
- eventCategory.getValue());
+ AuditLoggerName auditLoggerName = new AuditLoggerName.Builder().
+ type(eventCategory.getKey().getType()).
+ category(eventCategory.getKey().getCategory()).
+ subcategory(eventCategory.getKey().getSubcategory()).
+ event(CollectionUtils.isEmpty(eventCategory.getKey().getEvents())
+ ? null : eventCategory.getKey().getEvents().iterator().next()).
+ result(eventCategory.getValue()).build();
loggerRestClient.disableAudit(auditLoggerName);
}
@@ -108,13 +108,13 @@ public class Audit extends BasePage {
Pair<EventCategoryTO, AuditElements.Result> eventCategory =
AuditLoggerName.parseEventCategory(toBeAdded);
- AuditLoggerName auditLoggerName = new AuditLoggerName(
- eventCategory.getKey().getType(),
- eventCategory.getKey().getCategory(),
- eventCategory.getKey().getSubcategory(),
- CollectionUtils.isEmpty(eventCategory.getKey().getEvents())
- ? null : eventCategory.getKey().getEvents().iterator().next(),
- eventCategory.getValue());
+ AuditLoggerName auditLoggerName = new AuditLoggerName.Builder().
+ type(eventCategory.getKey().getType()).
+ category(eventCategory.getKey().getCategory()).
+ subcategory(eventCategory.getKey().getSubcategory()).
+ event(CollectionUtils.isEmpty(eventCategory.getKey().getEvents())
+ ? null : eventCategory.getKey().getEvents().iterator().next()).
+ result(eventCategory.getValue()).build();
loggerRestClient.enableAudit(auditLoggerName);
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AbstractBaseBean.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AbstractBaseBean.java
index 4562f70..0481a65 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AbstractBaseBean.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AbstractBaseBean.java
@@ -25,15 +25,18 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.syncope.common.lib.policy.PolicyTO;
import org.apache.syncope.common.lib.to.TaskTO;
import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.ReportTO;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.to.WorkflowFormTO;
@XmlType
// Reporting here only classes used via PagedResult
-@XmlSeeAlso({ TaskTO.class, ReportTO.class, GroupTO.class, UserTO.class, AnyObjectTO.class })
+@XmlSeeAlso({ TaskTO.class, ReportTO.class, GroupTO.class, UserTO.class, AnyObjectTO.class,
+ PolicyTO.class, WorkflowFormTO.class })
public abstract class AbstractBaseBean implements Serializable {
private static final long serialVersionUID = 3119542005279892164L;
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java b/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
index 2a0f1f4..6023b1d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/info/SystemInfo.java
@@ -148,5 +148,4 @@ public class SystemInfo extends AbstractBaseBean {
this.maxMemory = maxMemory;
}
}
-
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/log/LogAppender.java b/common/lib/src/main/java/org/apache/syncope/common/lib/log/LogAppender.java
index 317ed59..5d8b68d 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/log/LogAppender.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/log/LogAppender.java
@@ -19,7 +19,11 @@
package org.apache.syncope.common.lib.log;
import org.apache.syncope.common.lib.AbstractBaseBean;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+@XmlRootElement(name = "logAppender")
+@XmlType
public class LogAppender extends AbstractBaseBean {
private static final long serialVersionUID = 5975199884460548302L;
@@ -33,5 +37,4 @@ public class LogAppender extends AbstractBaseBean {
public void setName(final String name) {
this.name = name;
}
-
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyObjectPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyObjectPatch.java
index 19794a1..0de3cd3 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyObjectPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyObjectPatch.java
@@ -27,6 +27,8 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
@XmlRootElement(name = "anyObjectPatch")
@XmlType
@@ -75,4 +77,33 @@ public class AnyObjectPatch extends AnyPatch {
return super.isEmpty() && name == null && relationships.isEmpty() && memberships.isEmpty();
}
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ appendSuper(super.hashCode()).
+ append(name).
+ append(relationships).
+ append(memberships).
+ build();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final AnyObjectPatch other = (AnyObjectPatch) obj;
+ return new EqualsBuilder().
+ appendSuper(super.equals(obj)).
+ append(name, other.name).
+ append(relationships, other.relationships).
+ append(memberships, other.memberships).
+ build();
+ }
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
index 0ab8551..3200ffc 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/AnyPatch.java
@@ -24,6 +24,7 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.PathParam;
@@ -32,7 +33,8 @@ import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
-import org.apache.syncope.common.lib.AbstractBaseBean;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.syncope.common.lib.to.AttrTO;
@XmlType
@@ -40,7 +42,7 @@ import org.apache.syncope.common.lib.to.AttrTO;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "@class")
@JsonPropertyOrder(value = { "@class", "key" })
@ApiModel(subTypes = { UserPatch.class, GroupPatch.class, AnyObjectPatch.class }, discriminator = "@class")
-public abstract class AnyPatch extends AbstractBaseBean implements AttributablePatch {
+public abstract class AnyPatch implements Serializable, AttributablePatch {
private static final long serialVersionUID = -7445489774552440544L;
@@ -60,7 +62,7 @@ public abstract class AnyPatch extends AbstractBaseBean implements AttributableP
private final Set<StringPatchItem> resources = new HashSet<>();
- @ApiModelProperty(name = "@class", required = true, readOnly = false)
+ @ApiModelProperty(name = "@class", required = true)
public abstract String getDiscriminator();
public void setDiscriminator(final String discriminator) {
@@ -126,4 +128,40 @@ public abstract class AnyPatch extends AbstractBaseBean implements AttributableP
&& plainAttrs.isEmpty() && virAttrs.isEmpty()
&& resources.isEmpty();
}
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ append(discriminator).
+ append(key).
+ append(realm).
+ append(auxClasses).
+ append(plainAttrs).
+ append(virAttrs).
+ append(resources).
+ build();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final AnyPatch other = (AnyPatch) obj;
+ return new EqualsBuilder().
+ append(discriminator, other.discriminator).
+ append(key, other.key).
+ append(realm, other.realm).
+ append(auxClasses, other.auxClasses).
+ append(plainAttrs, other.plainAttrs).
+ append(virAttrs, other.virAttrs).
+ append(resources, other.resources).
+ build();
+ }
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
index 575012c..b14d9ff 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/GroupPatch.java
@@ -33,6 +33,8 @@ import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.Predicate;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter;
import org.apache.syncope.common.lib.to.TypeExtensionTO;
@@ -124,4 +126,39 @@ public class GroupPatch extends AnyPatch {
&& name == null && userOwner == null && groupOwner == null;
}
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ appendSuper(super.hashCode()).
+ append(name).
+ append(userOwner).
+ append(groupOwner).
+ append(udynMembershipCond).
+ append(adynMembershipConds).
+ append(typeExtensions).
+ build();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final GroupPatch other = (GroupPatch) obj;
+ return new EqualsBuilder().
+ appendSuper(super.equals(obj)).
+ append(name, other.name).
+ append(userOwner, other.userOwner).
+ append(groupOwner, other.groupOwner).
+ append(udynMembershipCond, other.udynMembershipCond).
+ append(adynMembershipConds, other.adynMembershipConds).
+ append(typeExtensions, other.typeExtensions).
+ build();
+ }
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
index 7fbb3a3..b1f0d02 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/patch/UserPatch.java
@@ -27,6 +27,8 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
@XmlRootElement(name = "userPatch")
@XmlType
@@ -125,4 +127,43 @@ public class UserPatch extends AnyPatch {
&& username == null && password == null && securityQuestion == null && securityAnswer == null
&& mustChangePassword == null && relationships.isEmpty() && memberships.isEmpty() && roles.isEmpty();
}
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ appendSuper(super.hashCode()).
+ append(username).
+ append(password).
+ append(securityQuestion).
+ append(securityAnswer).
+ append(mustChangePassword).
+ append(relationships).
+ append(memberships).
+ append(roles).
+ build();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final UserPatch other = (UserPatch) obj;
+ return new EqualsBuilder().
+ appendSuper(super.equals(obj)).
+ append(username, other.username).
+ append(securityQuestion, other.securityQuestion).
+ append(securityAnswer, other.securityAnswer).
+ append(mustChangePassword, other.mustChangePassword).
+ append(relationships, other.relationships).
+ append(memberships, other.memberships).
+ append(roles, other.roles).
+ build();
+ }
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPasswordRuleConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPasswordRuleConf.java
index 6d35abd..33031c1 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPasswordRuleConf.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/AbstractPasswordRuleConf.java
@@ -24,7 +24,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.AbstractBaseBean;
@XmlType
-@XmlSeeAlso({ DefaultPasswordRuleConf.class })
+@XmlSeeAlso({ DefaultPasswordRuleConf.class, HaveIBeenPwnedPasswordRuleConf.class })
public abstract class AbstractPasswordRuleConf extends AbstractBaseBean implements PasswordRuleConf {
private static final long serialVersionUID = -5814018872387142339L;
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java
index cff315e..a647af0 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/policy/PolicyTO.java
@@ -101,5 +101,4 @@ public abstract class PolicyTO extends AbstractBaseBean implements EntityTO {
public List<String> getUsedByRealms() {
return usedByRealms;
}
-
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ErrorTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ErrorTO.java
index f643b88..055ebf7 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ErrorTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ErrorTO.java
@@ -19,18 +19,18 @@
package org.apache.syncope.common.lib.to;
import com.fasterxml.jackson.annotation.JsonProperty;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
-import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.syncope.common.lib.types.ClientExceptionType;
@XmlRootElement(name = "error")
@XmlType
-public class ErrorTO extends AbstractBaseBean {
+public class ErrorTO implements Serializable {
private static final long serialVersionUID = 2435764161719225927L;
@@ -62,5 +62,4 @@ public class ErrorTO extends AbstractBaseBean {
public List<String> getElements() {
return elements;
}
-
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java
index b5ff3aa..f0999f3 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SchemaTO.java
@@ -73,5 +73,4 @@ public abstract class SchemaTO extends AbstractBaseBean implements EntityTO {
public void setAnyTypeClass(final String anyTypeClass) {
this.anyTypeClass = anyTypeClass;
}
-
}
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
index 31622ec..b3f5863 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
@@ -18,17 +18,21 @@
*/
package org.apache.syncope.common.lib.types;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
import java.text.ParseException;
import java.util.Map;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.syncope.common.lib.log.EventCategoryTO;
import org.apache.syncope.common.lib.types.AuditElements.EventCategoryType;
import org.apache.syncope.common.lib.types.AuditElements.Result;
+@XmlRootElement(name = "auditLoggerName")
+@XmlType
public class AuditLoggerName extends AbstractBaseBean {
private static final long serialVersionUID = -647989486671786839L;
@@ -41,58 +45,6 @@ public class AuditLoggerName extends AbstractBaseBean {
return domain + "." + loggerName;
}
- private final AuditElements.EventCategoryType type;
-
- private final String category;
-
- private final String subcategory;
-
- private final String event;
-
- private final Result result;
-
- @JsonCreator
- public AuditLoggerName(
- @JsonProperty("type") final AuditElements.EventCategoryType type,
- @JsonProperty("category") final String category,
- @JsonProperty("subcategory") final String subcategory,
- @JsonProperty("event") final String event,
- @JsonProperty("result") final Result result) {
-
- super();
-
- this.type = type == null ? AuditElements.EventCategoryType.CUSTOM : type;
- this.category = category;
- this.subcategory = subcategory;
- this.event = event;
- this.result = result == null ? Result.SUCCESS : result;
- }
-
- public AuditElements.EventCategoryType getType() {
- return type;
- }
-
- public String getEvent() {
- return event;
- }
-
- public String getCategory() {
- return category;
- }
-
- public Result getResult() {
- return result;
- }
-
- public String getSubcategory() {
- return subcategory;
- }
-
- public String toLoggerName() {
- return new StringBuilder().append(LoggerType.AUDIT.getPrefix()).append('.').
- append(buildEvent(type, category, subcategory, event, result)).toString();
- }
-
public static AuditLoggerName fromLoggerName(final String loggerName)
throws ParseException {
@@ -107,13 +59,14 @@ public class AuditLoggerName extends AbstractBaseBean {
final Map.Entry<EventCategoryTO, Result> eventCategory = parseEventCategory(
loggerName.replaceAll(LoggerType.AUDIT.getPrefix() + ".", ""));
- return new AuditLoggerName(
- eventCategory.getKey().getType(),
- eventCategory.getKey().getCategory(),
- eventCategory.getKey().getSubcategory(),
- eventCategory.getKey().getEvents().isEmpty()
- ? StringUtils.EMPTY : eventCategory.getKey().getEvents().iterator().next(),
- eventCategory.getValue());
+ return new AuditLoggerName.Builder().
+ type(eventCategory.getKey().getType()).
+ category(eventCategory.getKey().getCategory()).
+ subcategory(eventCategory.getKey().getSubcategory()).
+ event(eventCategory.getKey().getEvents().isEmpty()
+ ? StringUtils.EMPTY : eventCategory.getKey().getEvents().iterator().next()).
+ result(eventCategory.getValue()).
+ build();
}
public static Pair<EventCategoryTO, Result> parseEventCategory(final String event) {
@@ -209,4 +162,125 @@ public class AuditLoggerName extends AbstractBaseBean {
return eventBuilder.toString();
}
+
+ public static class Builder {
+
+ private final AuditLoggerName instance = new AuditLoggerName();
+
+ public Builder type(final AuditElements.EventCategoryType type) {
+ instance.type = type;
+ return this;
+ }
+
+ public Builder category(final String category) {
+ instance.category = category;
+ return this;
+ }
+
+ public Builder subcategory(final String subcategory) {
+ instance.subcategory = subcategory;
+ return this;
+ }
+
+ public Builder event(final String event) {
+ instance.event = event;
+ return this;
+ }
+
+ public Builder result(final Result result) {
+ instance.result = result;
+ return this;
+ }
+
+ public AuditLoggerName build() {
+ return instance;
+ }
+ }
+
+ private EventCategoryType type = AuditElements.EventCategoryType.CUSTOM;
+
+ private String category;
+
+ private String subcategory;
+
+ private String event;
+
+ private Result result = Result.SUCCESS;
+
+ public EventCategoryType getType() {
+ return type;
+ }
+
+ public void setType(final EventCategoryType type) {
+ this.type = type;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(final String category) {
+ this.category = category;
+ }
+
+ public String getSubcategory() {
+ return subcategory;
+ }
+
+ public void setSubcategory(final String subcategory) {
+ this.subcategory = subcategory;
+ }
+
+ public String getEvent() {
+ return event;
+ }
+
+ public void setEvent(final String event) {
+ this.event = event;
+ }
+
+ public Result getResult() {
+ return result;
+ }
+
+ public void setResult(final Result result) {
+ this.result = result;
+ }
+
+ public String toLoggerName() {
+ return new StringBuilder().append(LoggerType.AUDIT.getPrefix()).append('.').
+ append(buildEvent(type, category, subcategory, event, result)).toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ append(type).
+ append(category).
+ append(subcategory).
+ append(event).
+ append(result).
+ build();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final AuditLoggerName other = (AuditLoggerName) obj;
+ return new EqualsBuilder().
+ append(type, other.type).
+ append(category, other.category).
+ append(subcategory, other.subcategory).
+ append(event, other.event).
+ append(result, other.result).
+ build();
+ }
}
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 55cf16f..c7dd791 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -469,5 +469,4 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
throw new UnresolvedReferenceException();
}
-
}
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java b/core/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java
index bc9f7b9..333ad89 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/init/LoggerLoader.java
@@ -97,8 +97,8 @@ public class LoggerLoader implements SyncopeLoader {
Appender appender = ctx.getConfiguration().getAppender("audit_for_" + entry.getKey());
if (appender == null) {
appender = JdbcAppender.newBuilder().
- withName("audit_for_" + entry.getKey()).
- withIgnoreExceptions(false).
+ setName("audit_for_" + entry.getKey()).
+ setIgnoreExceptions(false).
setConnectionSource(new DataSourceConnectionSource(entry.getKey(), entry.getValue())).
setBufferSize(0).
setTableName("SYNCOPEAUDIT").
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java
index 35d5297..b0d77f2 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/AuditEntry.java
@@ -3,106 +3,138 @@
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License; Version 2.0 (the
+ * to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing;
+ * Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
- * "AS IS" BASIS; WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND; either express or implied. See the License for the
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.syncope.core.provisioning.java;
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.SerializationUtils;
-import org.apache.syncope.common.lib.AbstractBaseBean;
-import org.apache.syncope.common.lib.patch.UserPatch;
-import org.apache.syncope.common.lib.to.UserTO;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.syncope.common.lib.types.AuditLoggerName;
-public class AuditEntry extends AbstractBaseBean {
+public class AuditEntry implements Serializable {
- private static final long serialVersionUID = -2299082316063743582L;
+ private static final long serialVersionUID = 1215115961911228005L;
- private static final String MASKED_VALUE = "<MASKED>";
+ private String who;
- private final String who;
+ private Date date;
- private final AuditLoggerName logger;
+ private AuditLoggerName logger;
- private final Object before;
+ private String before;
- private final Object output;
+ private final List<String> inputs = new ArrayList<>();
- private final Object[] input;
+ private String output;
- @JsonCreator
- public AuditEntry(
- @JsonProperty("who") final String who,
- @JsonProperty("logger") final AuditLoggerName logger,
- @JsonProperty("before") final Object before,
- @JsonProperty("output") final Object output,
- @JsonProperty("input") final Object[] input) {
+ private String throwable;
- super();
+ public String getWho() {
+ return who;
+ }
+ public void setWho(final String who) {
this.who = who;
- this.logger = logger;
- this.before = maskSensitive(before);
- this.output = maskSensitive(output);
- this.input = ArrayUtils.clone(input);
- if (this.input != null) {
- for (int i = 0; i < this.input.length; i++) {
- this.input[i] = maskSensitive(this.input[i]);
- }
- }
}
- private Object maskSensitive(final Object object) {
- Object filtered;
-
- if (object instanceof UserTO) {
- filtered = SerializationUtils.clone((UserTO) object);
- if (((UserTO) filtered).getPassword() != null) {
- ((UserTO) filtered).setPassword(MASKED_VALUE);
- }
- if (((UserTO) filtered).getSecurityAnswer() != null) {
- ((UserTO) filtered).setSecurityAnswer(MASKED_VALUE);
- }
- } else if (object instanceof UserPatch && ((UserPatch) object).getPassword() != null) {
- filtered = SerializationUtils.clone((UserPatch) object);
- ((UserPatch) filtered).getPassword().setValue(MASKED_VALUE);
- } else {
- filtered = object;
- }
-
- return filtered;
+ public Date getDate() {
+ return date == null
+ ? null
+ : new Date(date.getTime());
}
- public String getWho() {
- return who;
+ public void setDate(final Date date) {
+ this.date = date == null
+ ? null
+ : new Date(date.getTime());
}
public AuditLoggerName getLogger() {
return logger;
}
- public Object getBefore() {
+ public void setLogger(final AuditLoggerName logger) {
+ this.logger = logger;
+ }
+
+ public String getBefore() {
return before;
}
- public Object getOutput() {
+ public List<String> getInputs() {
+ return inputs;
+ }
+
+ public void setBefore(final String before) {
+ this.before = before;
+ }
+
+ public String getOutput() {
return output;
}
- public Object[] getInput() {
- return input;
+ public void setOutput(final String output) {
+ this.output = output;
+ }
+
+ public String getThrowable() {
+ return throwable;
+ }
+
+ public void setThrowable(final String throwable) {
+ this.throwable = throwable;
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder().
+ appendSuper(super.hashCode()).
+ append(who).
+ append(date).
+ append(logger).
+ append(before).
+ append(inputs).
+ append(output).
+ append(throwable).
+ build();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final AuditEntry other = (AuditEntry) obj;
+ return new EqualsBuilder().
+ appendSuper(super.equals(obj)).
+ append(who, other.who).
+ append(date, other.date).
+ append(logger, other.logger).
+ append(before, other.before).
+ append(inputs, other.inputs).
+ append(output, other.output).
+ append(throwable, other.throwable).
+ build();
}
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java
index 05225fa..a785188 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java
@@ -18,6 +18,10 @@
*/
package org.apache.syncope.core.provisioning.java;
+import java.util.Date;
+import org.apache.commons.lang3.SerializationUtils;
+import org.apache.syncope.common.lib.patch.UserPatch;
+import org.apache.syncope.common.lib.to.UserTO;
import org.apache.syncope.core.provisioning.api.AuditManager;
import org.apache.syncope.common.lib.types.AuditElements;
import org.apache.syncope.common.lib.types.AuditElements.Result;
@@ -26,6 +30,7 @@ import org.apache.syncope.common.lib.types.LoggerLevel;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
import org.apache.syncope.core.persistence.api.dao.LoggerDAO;
import org.apache.syncope.core.provisioning.api.event.AfterHandlingEvent;
+import org.apache.syncope.core.provisioning.api.utils.ExceptionUtils2;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,6 +40,29 @@ import org.springframework.transaction.annotation.Transactional;
@Transactional(readOnly = true)
public class DefaultAuditManager implements AuditManager {
+ private static final String MASKED_VALUE = "<MASKED>";
+
+ private static Object maskSensitive(final Object object) {
+ Object masked;
+
+ if (object instanceof UserTO) {
+ masked = SerializationUtils.clone((UserTO) object);
+ if (((UserTO) masked).getPassword() != null) {
+ ((UserTO) masked).setPassword(MASKED_VALUE);
+ }
+ if (((UserTO) masked).getSecurityAnswer() != null) {
+ ((UserTO) masked).setSecurityAnswer(MASKED_VALUE);
+ }
+ } else if (object instanceof UserPatch && ((UserPatch) object).getPassword() != null) {
+ masked = SerializationUtils.clone((UserPatch) object);
+ ((UserPatch) masked).getPassword().setValue(MASKED_VALUE);
+ } else {
+ masked = object;
+ }
+
+ return masked;
+ }
+
@Autowired
private LoggerDAO loggerDAO;
@@ -46,12 +74,12 @@ public class DefaultAuditManager implements AuditManager {
final String subcategory,
final String event) {
- AuditEntry auditEntry = new AuditEntry(
- who,
- new AuditLoggerName(type, category, subcategory, event, Result.SUCCESS),
- null,
- null,
- null);
+ AuditEntry auditEntry = new AuditEntry();
+ auditEntry.setWho(who);
+ auditEntry.setLogger(new AuditLoggerName.Builder().
+ type(type).category(category).subcategory(subcategory).event(event).result(Result.SUCCESS).build());
+ auditEntry.setDate(new Date());
+
org.apache.syncope.core.persistence.api.entity.Logger syncopeLogger =
loggerDAO.find(auditEntry.getLogger().toLoggerName());
boolean auditRequested = syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG;
@@ -60,12 +88,9 @@ public class DefaultAuditManager implements AuditManager {
return true;
}
- auditEntry = new AuditEntry(
- who,
- new AuditLoggerName(type, category, subcategory, event, Result.FAILURE),
- null,
- null,
- null);
+ auditEntry.setLogger(new AuditLoggerName.Builder().
+ type(type).category(category).subcategory(subcategory).event(event).result(Result.FAILURE).build());
+
syncopeLogger = loggerDAO.find(auditEntry.getLogger().toLoggerName());
auditRequested = syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG;
@@ -103,12 +128,23 @@ public class DefaultAuditManager implements AuditManager {
throwable = (Throwable) output;
}
- AuditEntry auditEntry = new AuditEntry(
- who,
- new AuditLoggerName(type, category, subcategory, event, condition),
- before,
- throwable == null ? output : throwable.getMessage(),
- input);
+ AuditEntry auditEntry = new AuditEntry();
+ auditEntry.setWho(who);
+ auditEntry.setLogger(new AuditLoggerName.Builder().
+ type(type).category(category).subcategory(subcategory).event(event).result(condition).build());
+ auditEntry.setDate(new Date());
+ auditEntry.setBefore(POJOHelper.serialize((maskSensitive(before))));
+ if (throwable == null) {
+ auditEntry.setOutput(POJOHelper.serialize((maskSensitive(output))));
+ } else {
+ auditEntry.setOutput(throwable.getMessage());
+ auditEntry.setThrowable(ExceptionUtils2.getFullStackTrace(throwable));
+ }
+ if (input != null) {
+ for (Object obj : input) {
+ auditEntry.getInputs().add(POJOHelper.serialize(obj));
+ }
+ }
org.apache.syncope.core.persistence.api.entity.Logger syncopeLogger =
loggerDAO.find(auditEntry.getLogger().toLoggerName());
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AuditReportlet.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AuditReportlet.java
index 6ba9a53..7576875 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AuditReportlet.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AuditReportlet.java
@@ -95,13 +95,11 @@ public class AuditReportlet extends AbstractReportlet {
handler.endElement("", "", "before");
}
- if (auditEntry.getInput() != null) {
+ if (!auditEntry.getInputs().isEmpty()) {
handler.startElement("", "", "inputs", null);
- for (Object inputObj : auditEntry.getInput()) {
- char[] input = ToStringBuilder.reflectionToString(
- inputObj, ToStringStyle.JSON_STYLE).toCharArray();
+ for (String input : auditEntry.getInputs()) {
handler.startElement("", "", "input", null);
- handler.characters(input, 0, input.length);
+ handler.characters(input.toCharArray(), 0, input.length());
handler.endElement("", "", "input");
}
handler.endElement("", "", "inputs");
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/OpenApiFilter.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/OpenApiFilter.java
new file mode 100644
index 0000000..381b676
--- /dev/null
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/OpenApiFilter.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.rest.cxf;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Collections;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.cxf.jaxrs.json.basic.JsonMapObject;
+import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter;
+import org.apache.cxf.jaxrs.swagger.openapi.SwaggerToOpenApiConversionUtils;
+
+public class OpenApiFilter implements Filter {
+
+ @Override
+ public void init(final FilterConfig config) throws ServletException {
+ // nothing to do
+ }
+
+ @Override
+ public void doFilter(
+ final ServletRequest request,
+ final ServletResponse response,
+ final FilterChain chain) throws IOException, ServletException {
+
+ HttpServletRequest httpReq = (HttpServletRequest) request;
+ Response swagger = WebClient.create(
+ StringUtils.substringBeforeLast(httpReq.getRequestURL().toString(), "/") + "/swagger.json").
+ accept(MediaType.APPLICATION_JSON_TYPE).get();
+
+ String swaggerJson = IOUtils.toString((InputStream) swagger.getEntity(), StandardCharsets.UTF_8);
+ String openApiJson = SwaggerToOpenApiConversionUtils.getOpenApiFromSwaggerJson(swaggerJson);
+
+ JsonMapObjectReaderWriter readerWriter = new JsonMapObjectReaderWriter();
+ JsonMapObject openapi = readerWriter.fromJsonToJsonObject(openApiJson);
+
+ String basePath = StringUtils.substringBeforeLast(httpReq.getRequestURI(), "/");
+ openapi.setProperty("servers", Arrays.asList(Collections.singletonMap("url", basePath)));
+
+ response.setContentType(MediaType.APPLICATION_JSON);
+ response.getOutputStream().write(readerWriter.toJson(openapi).getBytes(StandardCharsets.UTF_8));
+ }
+
+ @Override
+ public void destroy() {
+ // nothing to do
+ }
+}
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
index 2e77b37..149f298 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/RestServiceExceptionMapper.java
@@ -75,13 +75,15 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
@Autowired
private Environment env;
+ private static final String UNIQUE_MSG_KEY = "UniqueConstraintViolation";
+
private static final Map<String, String> EXCEPTION_CODE_MAP = new HashMap<String, String>() {
private static final long serialVersionUID = -7688359318035249200L;
{
- put("23000", "UniqueConstraintViolation");
- put("23505", "UniqueConstraintViolation");
+ put("23000", UNIQUE_MSG_KEY);
+ put("23505", UNIQUE_MSG_KEY);
}
};
@@ -107,9 +109,9 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
|| ex instanceof PersistenceException && ex.getCause() instanceof EntityExistsException) {
builder = builder(ClientExceptionType.EntityExists,
- getJPAMessage(ex instanceof PersistenceException ? ex.getCause() : ex));
+ getPersistenceErrorMessage(ex instanceof PersistenceException ? ex.getCause() : ex));
} else if (ex instanceof DataIntegrityViolationException || ex instanceof JpaSystemException) {
- builder = builder(ClientExceptionType.DataIntegrityViolation, getJPAMessage(ex));
+ builder = builder(ClientExceptionType.DataIntegrityViolation, getPersistenceErrorMessage(ex));
} else if (ex instanceof ConnectorException) {
builder = builder(ClientExceptionType.ConnectorException, ExceptionUtils.getRootCauseMessage(ex));
} else if (ex instanceof NotFoundException) {
@@ -303,14 +305,17 @@ public class RestServiceExceptionMapper implements ExceptionMapper<Exception> {
return builder;
}
- private String getJPAMessage(final Throwable ex) {
+ private String getPersistenceErrorMessage(final Throwable ex) {
Throwable throwable = ExceptionUtils.getRootCause(ex);
+
String message = null;
if (throwable instanceof SQLException) {
String messageKey = EXCEPTION_CODE_MAP.get(((SQLException) throwable).getSQLState());
if (messageKey != null) {
message = env.getProperty("errMessage." + messageKey);
}
+ } else if (throwable instanceof EntityExistsException || throwable instanceof DuplicateException) {
+ message = env.getProperty("errMessage." + UNIQUE_MSG_KEY);
}
return message == null
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java
deleted file mode 100644
index 44aaabd..0000000
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeSwaggerToOpenApiConversionFilter.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.core.rest.cxf;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Objects;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.container.ContainerRequestContext;
-import javax.ws.rs.container.ContainerRequestFilter;
-import javax.ws.rs.container.PreMatching;
-import javax.ws.rs.ext.Provider;
-import javax.ws.rs.ext.WriterInterceptor;
-import javax.ws.rs.ext.WriterInterceptorContext;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.cxf.io.CachedOutputStream;
-import org.apache.cxf.jaxrs.ext.MessageContext;
-import org.apache.cxf.jaxrs.json.basic.JsonMapObject;
-import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter;
-import org.apache.cxf.jaxrs.swagger.openapi.OpenApiConfiguration;
-import org.apache.cxf.jaxrs.swagger.openapi.SwaggerToOpenApiConversionUtils;
-import org.apache.cxf.jaxrs.utils.JAXRSUtils;
-
-@Provider
-@PreMatching
-public final class SyncopeSwaggerToOpenApiConversionFilter implements ContainerRequestFilter, WriterInterceptor {
-
- private static final String SWAGGER_PATH = "swagger.json";
-
- private static final String OPEN_API_PATH = "openapi.json";
-
- private static final String OPEN_API_PROPERTY = "openapi";
-
- private OpenApiConfiguration openApiConfig;
-
- private String openApiJsonPath = OPEN_API_PATH;
-
- @Override
- public void filter(final ContainerRequestContext reqCtx) throws IOException {
- String path = reqCtx.getUriInfo().getPath();
- if (path.endsWith(openApiJsonPath)) {
- reqCtx.setRequestUri(URI.create(SWAGGER_PATH));
- JAXRSUtils.getCurrentMessage().getExchange().put(OPEN_API_PROPERTY, Boolean.TRUE);
- }
- }
-
- public OpenApiConfiguration getOpenApiConfig() {
- return openApiConfig;
- }
-
- public void setOpenApiConfig(final OpenApiConfiguration openApiConfig) {
- this.openApiConfig = openApiConfig;
- }
-
- @Override
- public void aroundWriteTo(final WriterInterceptorContext context) throws IOException, WebApplicationException {
- if (isOpenApiRequested()) {
- OutputStream os = context.getOutputStream();
- CachedOutputStream cos = new CachedOutputStream();
-
- context.setOutputStream(cos);
- context.proceed();
-
- MessageContext ctx = createMessageContext();
- String swaggerJson = IOUtils.toString(cos.getInputStream(), StandardCharsets.UTF_8);
- String openApiJson = SwaggerToOpenApiConversionUtils.getOpenApiFromSwaggerJson(
- ctx, swaggerJson, openApiConfig);
-
- JsonMapObjectReaderWriter readerWriter = new JsonMapObjectReaderWriter();
- JsonMapObject openapi = readerWriter.fromJsonToJsonObject(openApiJson);
-
- String basePath = StringUtils.substringBeforeLast(ctx.getHttpServletRequest().getRequestURI(), "/");
- openapi.setProperty("servers", Arrays.asList(Collections.singletonMap("url", basePath)));
-
- os.write(readerWriter.toJson(openapi).getBytes(StandardCharsets.UTF_8));
- os.flush();
- } else {
- context.proceed();
- }
- }
-
- private MessageContext createMessageContext() {
- return JAXRSUtils.createContextValue(JAXRSUtils.getCurrentMessage(), null, MessageContext.class);
- }
-
- private boolean isOpenApiRequested() {
- return Objects.equals(Boolean.TRUE, JAXRSUtils.getCurrentMessage().getExchange().get(OPEN_API_PROPERTY));
- }
-
- public void setOpenApiJsonPath(final String openApiJsonPath) {
- this.openApiJsonPath = openApiJsonPath;
- }
-}
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java
index 2642853..462f1d5 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/WorkflowServiceImpl.java
@@ -59,8 +59,7 @@ public class WorkflowServiceImpl extends AbstractServiceImpl implements Workflow
};
return Response.ok(sout).
- type(format == WorkflowDefinitionFormat.JSON
- ? MediaType.APPLICATION_JSON_TYPE : MediaType.APPLICATION_XHTML_XML_TYPE).
+ type(format.getMediaType()).
build();
}
diff --git a/core/rest-cxf/src/main/resources/META-INF/web-fragment.xml b/core/rest-cxf/src/main/resources/META-INF/web-fragment.xml
index 9e75b2d..6704150 100644
--- a/core/rest-cxf/src/main/resources/META-INF/web-fragment.xml
+++ b/core/rest-cxf/src/main/resources/META-INF/web-fragment.xml
@@ -65,6 +65,10 @@ under the License.
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
+ <filter>
+ <filter-name>openapiFilter</filter-name>
+ <filter-class>org.apache.syncope.core.rest.cxf.OpenApiFilter</filter-class>
+ </filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
@@ -74,5 +78,9 @@ under the License.
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
+ <filter-mapping>
+ <filter-name>openapiFilter</filter-name>
+ <url-pattern>/rest/openapi.json</url-pattern>
+ </filter-mapping>
</web-fragment>
diff --git a/core/rest-cxf/src/main/resources/restCXFContext.xml b/core/rest-cxf/src/main/resources/restCXFContext.xml
index 45fb5cb..db7a3f4 100644
--- a/core/rest-cxf/src/main/resources/restCXFContext.xml
+++ b/core/rest-cxf/src/main/resources/restCXFContext.xml
@@ -131,7 +131,6 @@ under the License.
</map>
</property>
</bean>
- <bean id="sw2OpenAPI" class="org.apache.syncope.core.rest.cxf.SyncopeSwaggerToOpenApiConversionFilter"/>
<jaxrs:server id="restContainer" address="/"
basePackages="org.apache.syncope.common.rest.api.service, org.apache.syncope.core.rest.cxf.service"
@@ -160,7 +159,6 @@ under the License.
<ref bean="addDomainFilter"/>
<ref bean="addETagFilter"/>
<ref bean="wadlGenerator"/>
- <ref bean="sw2OpenAPI"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature"/>
diff --git a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowDefinitionFormat.java b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowDefinitionFormat.java
index f7d67f2..03de2f8 100644
--- a/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowDefinitionFormat.java
+++ b/core/workflow-api/src/main/java/org/apache/syncope/core/workflow/api/WorkflowDefinitionFormat.java
@@ -18,12 +18,23 @@
*/
package org.apache.syncope.core.workflow.api;
+import javax.ws.rs.core.MediaType;
+
/**
* Format for import / export of workflow definition.
*/
public enum WorkflowDefinitionFormat {
- XML,
- JSON
+ XML(MediaType.APPLICATION_XML_TYPE),
+ JSON(MediaType.APPLICATION_JSON_TYPE);
+
+ private final MediaType mediaType;
+
+ WorkflowDefinitionFormat(final MediaType mediaType) {
+ this.mediaType = mediaType;
+ }
+ public MediaType getMediaType() {
+ return mediaType;
+ }
}
diff --git a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMConf.java b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMConf.java
index 1875eba..d6161cb 100644
--- a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMConf.java
+++ b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMConf.java
@@ -55,5 +55,4 @@ public class SCIMConf implements Serializable {
public void setEnterpriseUserConf(final SCIMEnterpriseUserConf enterpriseUserConf) {
this.enterpriseUserConf = enterpriseUserConf;
}
-
}
diff --git a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMGeneralConf.java b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMGeneralConf.java
index cf9bc71..fe29e94 100644
--- a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMGeneralConf.java
+++ b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMGeneralConf.java
@@ -100,5 +100,4 @@ public class SCIMGeneralConf implements Serializable {
public void setFilterMaxResults(final int filterMaxResults) {
this.filterMaxResults = filterMaxResults;
}
-
}
diff --git a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserConf.java b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserConf.java
index c2c0d15..1ed62a9 100644
--- a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserConf.java
+++ b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserConf.java
@@ -191,5 +191,4 @@ public class SCIMUserConf implements Serializable {
public List<String> getX509Certificates() {
return x509Certificates;
}
-
}
diff --git a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserNameConf.java b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserNameConf.java
index 2af8005..1f632f0 100644
--- a/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserNameConf.java
+++ b/ext/scimv2/common-lib/src/main/java/org/apache/syncope/common/lib/scim/SCIMUserNameConf.java
@@ -23,7 +23,11 @@ import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+@XmlRootElement(name = "scimUserNameConf")
+@XmlType
public class SCIMUserNameConf implements Serializable {
private static final long serialVersionUID = -2256008193008290376L;
@@ -113,5 +117,4 @@ public class SCIMUserNameConf implements Serializable {
public void setHonorificSuffix(final String honorificSuffix) {
this.honorificSuffix = honorificSuffix;
}
-
}
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index a4d0f51..6776d05 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -266,6 +266,16 @@ under the License.
<!-- By default, only core IT cases are run, use the 'full-it' profile for running all IT cases -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <inherited>true</inherited>
+ <configuration>
+ <systemPropertyVariables>
+ <jaxrsContentType>${jaxrs.content.type}</jaxrsContentType>
+ </systemPropertyVariables>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<inherited>true</inherited>
<configuration>
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SyslogRewriteAuditAppender.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SyslogRewriteAuditAppender.java
index 0f9fa20..7f16967 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SyslogRewriteAuditAppender.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SyslogRewriteAuditAppender.java
@@ -35,27 +35,21 @@ public class SyslogRewriteAuditAppender extends DefaultRewriteAuditAppender {
@Override
public Set<AuditLoggerName> getEvents() {
Set<AuditLoggerName> events = new HashSet<>();
- events.add(
- new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- ResourceLogic.class.getSimpleName(),
- null,
- "update",
- AuditElements.Result.SUCCESS));
- events.add(
- new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- ConnectorLogic.class.getSimpleName(),
- null,
- "update",
- AuditElements.Result.SUCCESS));
- events.add(
- new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- ResourceLogic.class.getSimpleName(),
- null,
- "delete",
- AuditElements.Result.SUCCESS));
+ events.add(new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category(ResourceLogic.class.getSimpleName()).
+ event("update").
+ result(AuditElements.Result.SUCCESS).build());
+ events.add(new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category(ConnectorLogic.class.getSimpleName()).
+ event("update").
+ result(AuditElements.Result.SUCCESS).build());
+ events.add(new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category(ResourceLogic.class.getSimpleName()).
+ event("delete").
+ result(AuditElements.Result.SUCCESS).build());
return events;
}
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileAuditAppender.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileAuditAppender.java
index cc9cd3e..44b54e5 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileAuditAppender.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileAuditAppender.java
@@ -38,20 +38,16 @@ public class TestFileAuditAppender extends DefaultAuditAppender {
@Override
public Set<AuditLoggerName> getEvents() {
Set<AuditLoggerName> events = new HashSet<>();
- events.add(
- new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- ResourceLogic.class.getSimpleName(),
- null,
- "create",
- AuditElements.Result.SUCCESS));
- events.add(
- new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- ConnectorLogic.class.getSimpleName(),
- null,
- "update",
- AuditElements.Result.SUCCESS));
+ events.add(new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category(ResourceLogic.class.getSimpleName()).
+ event("create").
+ result(AuditElements.Result.SUCCESS).build());
+ events.add(new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category(ConnectorLogic.class.getSimpleName()).
+ event("update").
+ result(AuditElements.Result.SUCCESS).build());
return events;
}
diff --git a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileRewriteAuditAppender.java b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileRewriteAuditAppender.java
index 8ce0d99..0816ff2 100644
--- a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileRewriteAuditAppender.java
+++ b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestFileRewriteAuditAppender.java
@@ -18,7 +18,7 @@
*/
package org.apache.syncope.fit.core.reference;
-import java.util.HashSet;
+import java.util.Collections;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
@@ -36,15 +36,11 @@ public class TestFileRewriteAuditAppender extends DefaultRewriteAuditAppender {
@Override
public Set<AuditLoggerName> getEvents() {
- Set<AuditLoggerName> events = new HashSet<>();
- events.add(
- new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- ResourceLogic.class.getSimpleName(),
- null,
- "update",
- AuditElements.Result.SUCCESS));
- return events;
+ return Collections.singleton(new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category(ResourceLogic.class.getSimpleName()).
+ event("update").
+ result(AuditElements.Result.SUCCESS).build());
}
@Override
diff --git a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
index 89fbd19..59dcdd3 100644
--- a/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
+++ b/fit/core-reference/src/main/resources/jboss/restCXFContext.xml
@@ -145,7 +145,6 @@ under the License.
</map>
</property>
</bean>
- <bean id="sw2OpenAPI" class="org.apache.syncope.core.rest.cxf.SyncopeSwaggerToOpenApiConversionFilter"/>
<jaxrs:server id="restContainer" address="/"
basePackages="org.apache.syncope.common.rest.api.service, org.apache.syncope.core.rest.cxf.service"
@@ -174,7 +173,6 @@ under the License.
<ref bean="addDomainFilter"/>
<ref bean="addETagFilter"/>
<ref bean="wadlGenerator"/>
- <ref bean="sw2OpenAPI"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature"/>
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
index 0c64d12..5e10fe1 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import java.security.AccessControlException;
import java.util.HashSet;
@@ -40,6 +42,7 @@ import org.apache.syncope.client.lib.AnonymousAuthenticationHandler;
import org.apache.syncope.client.lib.BasicAuthenticationHandler;
import org.apache.syncope.client.lib.SyncopeClient;
import org.apache.syncope.common.lib.EntityTOUtils;
+import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.patch.DeassociationPatch;
@@ -498,7 +501,8 @@ public class AuthenticationITCase extends AbstractITCase {
@Test
public void issueSYNCOPE434() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// 1. create user with group 'groupForWorkflowApproval'
// (users with group groupForWorkflowApproval are defined in workflow as subject to approval)
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DerSchemaITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DerSchemaITCase.java
index f1dc795..e1858a4 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DerSchemaITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/DerSchemaITCase.java
@@ -28,6 +28,7 @@ import java.util.List;
import javax.ws.rs.core.Response;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.DerSchemaTO;
+import org.apache.syncope.common.lib.to.SchemaTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.EntityViolationType;
import org.apache.syncope.common.lib.types.SchemaType;
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 7e79efe..564633f 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
@@ -136,12 +136,11 @@ public class LoggerITCase extends AbstractITCase {
@Test
public void enableDisableAudit() {
- AuditLoggerName auditLoggerName = new AuditLoggerName(
- EventCategoryType.LOGIC,
- ReportLogic.class.getSimpleName(),
- null,
- "deleteExecution",
- AuditElements.Result.FAILURE);
+ AuditLoggerName auditLoggerName = new AuditLoggerName.Builder().
+ type(EventCategoryType.LOGIC).
+ category(ReportLogic.class.getSimpleName()).
+ event("deleteExecution").
+ result(AuditElements.Result.FAILURE).build();
List<AuditLoggerName> audits = LoggerWrapper.wrap(loggerService.list(LoggerType.AUDIT));
assertNotNull(audits);
@@ -275,21 +274,19 @@ public class LoggerITCase extends AbstractITCase {
@Test
public void customAuditAppender() throws IOException, InterruptedException {
- AuditLoggerName auditLoggerResUpd = new AuditLoggerName(
- EventCategoryType.LOGIC,
- ResourceLogic.class.getSimpleName(),
- null,
- "update",
- AuditElements.Result.SUCCESS);
+ AuditLoggerName auditLoggerResUpd = new AuditLoggerName.Builder().
+ type(EventCategoryType.LOGIC).
+ category(ResourceLogic.class.getSimpleName()).
+ event("update").
+ result(AuditElements.Result.SUCCESS).build();
LoggerTO resUpd = new LoggerTO();
resUpd.setKey(auditLoggerResUpd.toLoggerName());
- AuditLoggerName auditLoggerConnUpd = new AuditLoggerName(
- EventCategoryType.LOGIC,
- ConnectorLogic.class.getSimpleName(),
- null,
- "update",
- AuditElements.Result.SUCCESS);
+ AuditLoggerName auditLoggerConnUpd = new AuditLoggerName.Builder().
+ type(EventCategoryType.LOGIC).
+ category(ConnectorLogic.class.getSimpleName()).
+ event("update").
+ result(AuditElements.Result.SUCCESS).build();
LoggerTO connUpd = new LoggerTO();
connUpd.setKey(auditLoggerConnUpd.toLoggerName());
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index ae9ab69..13b268a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -80,7 +80,6 @@ import org.apache.syncope.common.rest.api.beans.AnyQuery;
import org.apache.syncope.common.rest.api.beans.TaskQuery;
import org.apache.syncope.common.rest.api.service.ConnectorService;
import org.apache.syncope.common.rest.api.service.TaskService;
-import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningReport;
import org.apache.syncope.core.provisioning.java.pushpull.DBPasswordPullActions;
import org.apache.syncope.core.provisioning.java.pushpull.LDAPPasswordPullActions;
import org.apache.syncope.core.spring.security.Encryptor;
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
index ea4bef5..fa29d48 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReportITCase.java
@@ -251,12 +251,11 @@ public class ReportITCase extends AbstractITCase {
@Test
public void auditReport() throws IOException {
- AuditLoggerName auditLoggerName = new AuditLoggerName(
- AuditElements.EventCategoryType.LOGIC,
- "UserLogic",
- null,
- "selfRead",
- AuditElements.Result.SUCCESS);
+ AuditLoggerName auditLoggerName = new AuditLoggerName.Builder().
+ type(AuditElements.EventCategoryType.LOGIC).
+ category("UserLogic").
+ event("selfRead").
+ result(AuditElements.Result.SUCCESS).build();
try {
LoggerTO loggerTO = new LoggerTO();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
index 693c85b..ae37b46 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SCIMITCase.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -39,6 +40,7 @@ import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.jaxrs.client.WebClient;
+import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.scim.SCIMComplexConf;
import org.apache.syncope.common.lib.scim.SCIMConf;
@@ -65,7 +67,7 @@ import org.apache.syncope.ext.scimv2.api.type.Resource;
import org.apache.syncope.ext.scimv2.cxf.JacksonSCIMJsonProvider;
import org.apache.syncope.fit.AbstractITCase;
import org.apache.syncope.fit.SCIMDetector;
-import org.junit.Assume;
+import org.junit.Before;
import org.junit.Test;
public class SCIMITCase extends AbstractITCase {
@@ -112,10 +114,14 @@ public class SCIMITCase extends AbstractITCase {
header(HttpHeaders.AUTHORIZATION, "Bearer " + adminClient.getJWT());
}
+ @Before
+ public void check() {
+ assumeTrue(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.JSON);
+ assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
+ }
+
@Test
public void serviceProviderConfig() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
Response response = webClient().path("ServiceProviderConfig").get();
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertEquals(
@@ -133,8 +139,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void resourceTypes() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
Response response = webClient().path("ResourceTypes").get();
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertEquals(
@@ -157,8 +161,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void schemas() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
Response response = webClient().path("Schemas").get();
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertEquals(
@@ -182,8 +184,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void read() throws IOException {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
Response response = webClient().path("Users").path("missing").get();
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
@@ -220,8 +220,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void conf() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
SCIMConf conf = scimConfService.get();
assertNotNull(conf);
@@ -240,8 +238,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void list() throws IOException {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
Response response = webClient().path("Groups").query("count", 1100000).get();
assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
SCIMError error = response.readEntity(SCIMError.class);
@@ -271,8 +267,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void search() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
// invalid filter
Response response = webClient().path("Groups").query("filter", "invalid").get();
assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatus());
@@ -359,8 +353,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void createUser() throws JsonProcessingException {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
scimConfService.set(CONF);
SCIMUser user = getSampleUser(UUID.randomUUID().toString());
@@ -389,8 +381,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void replaceUser() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
scimConfService.set(CONF);
SCIMUser user = getSampleUser(UUID.randomUUID().toString());
@@ -412,8 +402,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void deleteUser() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
scimConfService.set(CONF);
SCIMUser user = getSampleUser(UUID.randomUUID().toString());
@@ -436,8 +424,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void createGroup() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
String displayName = UUID.randomUUID().toString();
SCIMGroup group = new SCIMGroup(null, null, displayName);
@@ -470,8 +456,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void replaceGroup() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
SCIMGroup group = new SCIMGroup(null, null, UUID.randomUUID().toString());
group.getMembers().add(new Member("b3cbc78d-32e6-4bd4-92e0-bbe07566a2ee", null, null));
Response response = webClient().path("Groups").post(group);
@@ -505,8 +489,6 @@ public class SCIMITCase extends AbstractITCase {
@Test
public void deleteGroup() {
- Assume.assumeTrue(SCIMDetector.isSCIMAvailable(webClient()));
-
SCIMGroup group = new SCIMGroup(null, null, UUID.randomUUID().toString());
Response response = webClient().path("Groups").post(group);
assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
index ec1fe71..216a854 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SchedTaskITCase.java
@@ -24,6 +24,8 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import java.util.Date;
import java.util.List;
@@ -32,6 +34,7 @@ import javax.ws.rs.core.Response;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.lang3.time.DateUtils;
+import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
import org.apache.syncope.common.lib.to.JobTO;
import org.apache.syncope.common.lib.to.PagedResult;
import org.apache.syncope.common.lib.to.PushTaskTO;
@@ -50,7 +53,6 @@ import org.apache.syncope.common.rest.api.beans.WorkflowFormQuery;
import org.apache.syncope.common.rest.api.service.TaskService;
import org.apache.syncope.fit.ActivitiDetector;
import org.apache.syncope.fit.core.reference.TestSampleJobDelegate;
-import org.junit.Assume;
import org.junit.Test;
public class SchedTaskITCase extends AbstractTaskITCase {
@@ -135,7 +137,8 @@ public class SchedTaskITCase extends AbstractTaskITCase {
@Test
public void recertification() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
execTask(taskService, TaskType.SCHEDULED, "e95555d2-1b09-42c8-b25b-f4c4ec598989", "JOB_FIRED", 50, false);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
index cb4678e..4cdc7ba 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
@@ -18,8 +18,6 @@
*/
package org.apache.syncope.fit.core;
-import org.apache.syncope.fit.ActivitiDetector;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
@@ -27,6 +25,8 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import java.util.Map;
import java.util.Set;
@@ -37,6 +37,7 @@ import javax.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.patch.BooleanReplacePatchItem;
import org.apache.syncope.common.lib.patch.MembershipPatch;
@@ -57,8 +58,8 @@ import org.apache.syncope.common.rest.api.service.AccessTokenService;
import org.apache.syncope.common.rest.api.service.UserSelfService;
import org.apache.syncope.common.rest.api.service.UserService;
import org.apache.syncope.fit.AbstractITCase;
+import org.apache.syncope.fit.ActivitiDetector;
import org.apache.syncope.fit.ElasticsearchDetector;
-import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -80,7 +81,8 @@ public class UserSelfITCase extends AbstractITCase {
@Test
public void create() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// 1. self-registration as admin: failure
try {
@@ -102,7 +104,8 @@ public class UserSelfITCase extends AbstractITCase {
@Test
public void createAndApprove() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// 1. self-create user with membership: goes 'createApproval' with resources and membership but no propagation
UserTO userTO = UserITCase.getUniqueSampleTO("anonymous@syncope.apache.org");
@@ -139,7 +142,8 @@ public class UserSelfITCase extends AbstractITCase {
@Test
public void createAndUnclaim() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// 1. self-create user with membership: goes 'createApproval' with resources and membership but no propagation
UserTO userTO = UserITCase.getUniqueSampleTO("anonymous@syncope.apache.org");
@@ -238,7 +242,8 @@ public class UserSelfITCase extends AbstractITCase {
@Test
public void updateWithApproval() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// 1. create user as admin
UserTO created = createUser(UserITCase.getUniqueSampleTO("anonymous@syncope.apache.org")).getEntity();
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
index cbbce1f..6520433 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserWorkflowITCase.java
@@ -26,6 +26,8 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
+import static org.junit.Assume.assumeTrue;
import java.util.Collections;
import java.util.List;
@@ -35,6 +37,7 @@ import javax.ws.rs.core.Response;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.syncope.client.lib.SyncopeClient;
+import org.apache.syncope.client.lib.SyncopeClientFactoryBean;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.patch.MembershipPatch;
import org.apache.syncope.common.lib.patch.PasswordPatch;
@@ -53,7 +56,6 @@ import org.apache.syncope.common.rest.api.beans.WorkflowFormQuery;
import org.apache.syncope.common.rest.api.service.UserSelfService;
import org.apache.syncope.common.rest.api.service.UserWorkflowService;
import org.apache.syncope.fit.AbstractITCase;
-import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -71,7 +73,8 @@ public class UserWorkflowITCase extends AbstractITCase {
@Test
public void createWithReject() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
UserTO userTO = UserITCase.getUniqueSampleTO("createWithReject@syncope.apache.org");
userTO.getResources().add(RESOURCE_NAME_TESTDB);
@@ -157,7 +160,8 @@ public class UserWorkflowITCase extends AbstractITCase {
@Test
public void createWithApproval() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// read forms *before* any operation
PagedResult<WorkflowFormTO> forms =
@@ -242,7 +246,8 @@ public class UserWorkflowITCase extends AbstractITCase {
@Test
public void createAndUnclaim() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// read forms *before* any operation
PagedResult<WorkflowFormTO> forms =
@@ -353,7 +358,8 @@ public class UserWorkflowITCase extends AbstractITCase {
@Test
public void updateApproval() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// read forms *before* any operation
PagedResult<WorkflowFormTO> forms = userWorkflowService.getForms(
@@ -410,7 +416,8 @@ public class UserWorkflowITCase extends AbstractITCase {
@Test
public void availableTasks() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
UserTO user = createUser(UserITCase.getUniqueSampleTO("availableTasks@apache.org")).getEntity();
assertEquals("active", user.getStatus());
@@ -442,7 +449,8 @@ public class UserWorkflowITCase extends AbstractITCase {
@Test
public void issueSYNCOPE15() {
- Assume.assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
+ assumeFalse(clientFactory.getContentType() == SyncopeClientFactoryBean.ContentType.XML);
+ assumeTrue(ActivitiDetector.isActivitiEnabledForUsers(syncopeService));
// read forms *before* any operation
PagedResult<WorkflowFormTO> forms = userWorkflowService.getForms(