Merge branch 'release/2.18'
diff --git a/pom.xml b/pom.xml
index 84b9ec2..7fa95d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
<packaging>pom</packaging>
<name>SCIM - Parent</name>
<description>Penn State's Open Source JavaEE implmentation of the SCIM version 2.0 specification (RFC7642, RFC7643 and RFC7644)</description>
diff --git a/scim-client/pom.xml b/scim-client/pom.xml
index 7338e5e..62c2ac4 100644
--- a/scim-client/pom.xml
+++ b/scim-client/pom.xml
@@ -3,7 +3,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-client</artifactId>
<name>SCIM - Client</name>
diff --git a/scim-common/pom.xml b/scim-common/pom.xml
index 601743b..9101d31 100644
--- a/scim-common/pom.xml
+++ b/scim-common/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-common</artifactId>
@@ -14,12 +14,12 @@
<dependency>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-spec-protocol</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</dependency>
<dependency>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-spec-schema</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</dependency>
</dependencies>
diff --git a/scim-compliance/pom.xml b/scim-compliance/pom.xml
index 03d519f..a86471e 100644
--- a/scim-compliance/pom.xml
+++ b/scim-compliance/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-compliance</artifactId>
diff --git a/scim-compliance/scim-compliance-client/pom.xml b/scim-compliance/scim-compliance-client/pom.xml
index 3202199..eb7aff6 100644
--- a/scim-compliance/scim-compliance-client/pom.xml
+++ b/scim-compliance/scim-compliance-client/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-compliance</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-compliance-client</artifactId>
diff --git a/scim-compliance/scim-compliance-server/pom.xml b/scim-compliance/scim-compliance-server/pom.xml
index df0a030..098fc33 100644
--- a/scim-compliance/scim-compliance-server/pom.xml
+++ b/scim-compliance/scim-compliance-server/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-compliance</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-compliance-server</artifactId>
diff --git a/scim-errai/pom.xml b/scim-errai/pom.xml
index 46226e1..9c1bf4a 100644
--- a/scim-errai/pom.xml
+++ b/scim-errai/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-errai</artifactId>
diff --git a/scim-server/pom.xml b/scim-server/pom.xml
index 7b39058..fa56bf8 100644
--- a/scim-server/pom.xml
+++ b/scim-server/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-server</artifactId>
diff --git a/scim-server/scim-server-common/pom.xml b/scim-server/scim-server-common/pom.xml
index c4e4d94..6c8c03b 100644
--- a/scim-server/scim-server-common/pom.xml
+++ b/scim-server/scim-server-common/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-server</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-server-common</artifactId>
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/exception/UnableToResolveIdException.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/exception/UnableToResolveIdException.java
new file mode 100644
index 0000000..ebc94f4
--- /dev/null
+++ b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/exception/UnableToResolveIdException.java
@@ -0,0 +1,28 @@
+package edu.psu.swe.scim.server.exception;
+
+import javax.ws.rs.core.Response.Status;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper=true)
+public class UnableToResolveIdException extends Exception {
+
+ private static final long serialVersionUID = -7401709416973728017L;
+
+ private Status status;
+
+ public UnableToResolveIdException(Status status, String what) {
+ super(what);
+
+ this.status = status;
+ }
+
+ public UnableToResolveIdException(Status status, String what, Throwable why) {
+ super(what, why);
+
+ this.status = status;
+ }
+
+}
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/SelfIdResolver.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/SelfIdResolver.java
index 8e2f488..e991de1 100644
--- a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/SelfIdResolver.java
+++ b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/SelfIdResolver.java
@@ -2,6 +2,8 @@
import java.security.Principal;
+import edu.psu.swe.scim.server.exception.UnableToResolveIdException;
+
public interface SelfIdResolver {
String resolveToInternalId(Principal principal) throws UnableToResolveIdException;
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UnableToResolveIdException.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UnableToResolveIdException.java
deleted file mode 100644
index 1b83309..0000000
--- a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UnableToResolveIdException.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package edu.psu.swe.scim.server.provider;
-
-public class UnableToResolveIdException extends Exception {
-
- private static final long serialVersionUID = -7401709416973728017L;
-
- public UnableToResolveIdException() {
- }
-
- public UnableToResolveIdException(String message) {
- super(message);
- }
-
- public UnableToResolveIdException(Throwable cause) {
- super(cause);
- }
-
- public UnableToResolveIdException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public UnableToResolveIdException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-
-}
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/SelfResourceImpl.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/SelfResourceImpl.java
index 93de10d..66c0715 100644
--- a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/SelfResourceImpl.java
+++ b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/rest/SelfResourceImpl.java
@@ -9,9 +9,9 @@
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
+import edu.psu.swe.scim.server.exception.UnableToResolveIdException;
import edu.psu.swe.scim.server.provider.ProviderRegistry;
import edu.psu.swe.scim.server.provider.SelfIdResolver;
-import edu.psu.swe.scim.server.provider.UnableToResolveIdException;
import edu.psu.swe.scim.spec.protocol.SelfResource;
import edu.psu.swe.scim.spec.protocol.UserResource;
import edu.psu.swe.scim.spec.protocol.attribute.AttributeReferenceListWrapper;
@@ -42,7 +42,9 @@
try {
String internalId = getInternalId();
return userResource.getById(internalId, attributes, excludedAttributes);
- } catch (UnableToResolveIdException | ScimException e) {
+ } catch (UnableToResolveIdException e) {
+ return createErrorResponse(e);
+ } catch (ScimException e) {
return createErrorResponse(e);
}
}
@@ -60,7 +62,9 @@
try {
String internalId = getInternalId();
return userResource.update(resource, internalId, attributes, excludedAttributes);
- } catch (UnableToResolveIdException | ScimException e) {
+ } catch (UnableToResolveIdException e) {
+ return createErrorResponse(e);
+ } catch (ScimException e) {
return createErrorResponse(e);
}
}
@@ -70,7 +74,9 @@
try {
String internalId = getInternalId();
return userResource.patch(patchRequest, internalId, attributes, excludedAttributes);
- } catch (UnableToResolveIdException | ScimException e) {
+ } catch (UnableToResolveIdException e) {
+ return createErrorResponse(e);
+ } catch (ScimException e) {
return createErrorResponse(e);
}
}
@@ -80,13 +86,21 @@
try {
String internalId = getInternalId();
return userResource.delete(internalId);
- } catch (UnableToResolveIdException | ScimException e) {
+ } catch (UnableToResolveIdException e) {
+ return createErrorResponse(e);
+ } catch (ScimException e) {
return createErrorResponse(e);
}
}
- private Response createErrorResponse(Exception e) {
- ErrorResponse er = new ErrorResponse(Status.BAD_REQUEST, "Error");
+ private Response createErrorResponse(ScimException e) {
+ ErrorResponse er = new ErrorResponse(e.getStatus(), "Error");
+ er.addErrorMessage(e.getMessage());
+ return er.toResponse();
+ }
+
+ private Response createErrorResponse(UnableToResolveIdException e) {
+ ErrorResponse er = new ErrorResponse(e.getStatus(), "Error");
er.addErrorMessage(e.getMessage());
return er.toResponse();
}
@@ -97,7 +111,7 @@
if (callerPrincipal != null) {
log.info("Resolved SelfResource principal to : {}", callerPrincipal.getName());
} else {
- throw new UnableToResolveIdException("Caller Principal was null");
+ throw new UnableToResolveIdException(Status.UNAUTHORIZED, "Unauthorized");
}
String internalId = selfIdResolver.resolveToInternalId(callerPrincipal);
diff --git a/scim-server/scim-server-example/pom.xml b/scim-server/scim-server-example/pom.xml
index 4068e9e..557c84d 100644
--- a/scim-server/scim-server-example/pom.xml
+++ b/scim-server/scim-server-example/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-server</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-server-examples</artifactId>
diff --git a/scim-server/scim-server-example/scim-server-couchdb/pom.xml b/scim-server/scim-server-example/scim-server-couchdb/pom.xml
index 7101376..2bd4f1d 100644
--- a/scim-server/scim-server-example/scim-server-couchdb/pom.xml
+++ b/scim-server/scim-server-example/scim-server-couchdb/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-server-examples</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-server-couchdb</artifactId>
diff --git a/scim-server/scim-server-example/scim-server-memory/pom.xml b/scim-server/scim-server-example/scim-server-memory/pom.xml
index ab330c8..e72f745 100644
--- a/scim-server/scim-server-example/scim-server-memory/pom.xml
+++ b/scim-server/scim-server-example/scim-server-memory/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-server-examples</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-server-memory</artifactId>
diff --git a/scim-server/scim-server-example/scim-server-memory/src/main/java/edu/psu/swe/scim/memory/service/InMemorySelfResolverImpl.java b/scim-server/scim-server-example/scim-server-memory/src/main/java/edu/psu/swe/scim/memory/service/InMemorySelfResolverImpl.java
index 0b68f13..079486c 100644
--- a/scim-server/scim-server-example/scim-server-memory/src/main/java/edu/psu/swe/scim/memory/service/InMemorySelfResolverImpl.java
+++ b/scim-server/scim-server-example/scim-server-memory/src/main/java/edu/psu/swe/scim/memory/service/InMemorySelfResolverImpl.java
@@ -3,16 +3,17 @@
import java.security.Principal;
import javax.ejb.Stateless;
+import javax.ws.rs.core.Response.Status;
+import edu.psu.swe.scim.server.exception.UnableToResolveIdException;
import edu.psu.swe.scim.server.provider.SelfIdResolver;
-import edu.psu.swe.scim.server.provider.UnableToResolveIdException;
@Stateless
public class InMemorySelfResolverImpl implements SelfIdResolver {
@Override
public String resolveToInternalId(Principal principal) throws UnableToResolveIdException {
- throw new UnableToResolveIdException("Caller Principal not available");
+ throw new UnableToResolveIdException(Status.NOT_IMPLEMENTED, "Caller Principal not available");
}
}
diff --git a/scim-server/scim-server-example/scim-server-rdbms/pom.xml b/scim-server/scim-server-example/scim-server-rdbms/pom.xml
index 7e0eb19..232ce3c 100644
--- a/scim-server/scim-server-example/scim-server-rdbms/pom.xml
+++ b/scim-server/scim-server-example/scim-server-rdbms/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-server-examples</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-server-rdbms</artifactId>
diff --git a/scim-spec/pom.xml b/scim-spec/pom.xml
index b11217c..38ff75f 100644
--- a/scim-spec/pom.xml
+++ b/scim-spec/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-spec</artifactId>
diff --git a/scim-spec/scim-spec-protocol/pom.xml b/scim-spec/scim-spec-protocol/pom.xml
index a13af73..bd63cf9 100644
--- a/scim-spec/scim-spec-protocol/pom.xml
+++ b/scim-spec/scim-spec-protocol/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-spec</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-spec-protocol</artifactId>
diff --git a/scim-spec/scim-spec-protocol/src/main/java/edu/psu/swe/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java b/scim-spec/scim-spec-protocol/src/main/java/edu/psu/swe/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java
index c290fa9..221d83b 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/edu/psu/swe/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/edu/psu/swe/scim/spec/protocol/attribute/AttributeReferenceListWrapper.java
@@ -27,4 +27,10 @@
attributeReferences.add(attributeReference);
}
}
+
+ public static AttributeReferenceListWrapper of(Set<AttributeReference> attributeReferences) {
+ AttributeReferenceListWrapper wrapper = new AttributeReferenceListWrapper("");
+ wrapper.attributeReferences = attributeReferences;
+ return wrapper;
+ }
}
diff --git a/scim-spec/scim-spec-schema/pom.xml b/scim-spec/scim-spec-schema/pom.xml
index c404447..4b05b77 100644
--- a/scim-spec/scim-spec-schema/pom.xml
+++ b/scim-spec/scim-spec-schema/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-spec</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-spec-schema</artifactId>
diff --git a/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/ScimUser.java b/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/ScimUser.java
index 702b204..2b4e275 100644
--- a/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/ScimUser.java
+++ b/scim-spec/scim-spec-schema/src/main/java/edu/psu/swe/scim/spec/resources/ScimUser.java
@@ -17,8 +17,10 @@
import edu.psu.swe.scim.spec.schema.Schema.Attribute.Uniqueness;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import lombok.ToString;
@Data
+@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@ScimResourceType(id = ScimUser.RESOURCE_NAME, name = ScimUser.RESOURCE_NAME, schema = ScimUser.SCHEMA_URI, description = "Top level ScimUser", endpoint = "/Users")
@XmlRootElement(name = ScimUser.RESOURCE_NAME)
@@ -123,20 +125,32 @@
}
public Optional<Address> getPrimaryAddress() {
+ if (addresses == null) {
+ return Optional.empty();
+ }
+
return addresses.stream()
- .filter(a -> a.primary)
+ .filter(Address::getPrimary)
.findFirst();
}
public Optional<Email> getPrimaryEmailAddress() {
+ if (emails == null) {
+ return Optional.empty();
+ }
+
return emails.stream()
- .filter(e -> e.getPrimary())
+ .filter(Email::getPrimary)
.findFirst();
}
public Optional<PhoneNumber> getPrimaryPhoneNumber() {
+ if (phoneNumbers == null) {
+ return Optional.empty();
+ }
+
return phoneNumbers.stream()
- .filter(p -> p.getPrimary())
+ .filter(PhoneNumber::getPrimary)
.findFirst();
}
}
diff --git a/scim-tools/pom.xml b/scim-tools/pom.xml
index c7ffbce..a594216 100644
--- a/scim-tools/pom.xml
+++ b/scim-tools/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-parent</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-tools</artifactId>
diff --git a/scim-tools/scim-tools-cli/pom.xml b/scim-tools/scim-tools-cli/pom.xml
index 03568e5..3e9ed90 100644
--- a/scim-tools/scim-tools-cli/pom.xml
+++ b/scim-tools/scim-tools-cli/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-tools</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-tools-cli</artifactId>
diff --git a/scim-tools/scim-tools-common/pom.xml b/scim-tools/scim-tools-common/pom.xml
index 06d6aad..44248aa 100644
--- a/scim-tools/scim-tools-common/pom.xml
+++ b/scim-tools/scim-tools-common/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-tools</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-tools-common</artifactId>
diff --git a/scim-tools/scim-tools-studio/pom.xml b/scim-tools/scim-tools-studio/pom.xml
index 3aff30d..6f1dc5b 100644
--- a/scim-tools/scim-tools-studio/pom.xml
+++ b/scim-tools/scim-tools-studio/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>edu.psu.swe.scim</groupId>
<artifactId>scim-tools</artifactId>
- <version>2.17</version>
+ <version>2.18</version>
</parent>
<artifactId>scim-tools-studio</artifactId>