You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2022/10/26 13:04:33 UTC

[directory-scimple] 01/01: Return a 501 (not implemented) status code when a Repository is not found

This is an automated email from the ASF dual-hosted git repository.

bdemers pushed a commit to branch repo-501-not-found
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git

commit b0e2bdd6a66beb66b99e386d43a096c7a7240737
Author: Brian Demers <bd...@apache.org>
AuthorDate: Fri Sep 30 09:51:37 2022 -0700

    Return a 501 (not implemented) status code when a Repository is not found
    
    ScimExceptionMapper now _correctly_ uses the ErrorResponse object from the ScimException instead of creating a new one and dropping the detail message
---
 .../scim/server/exception/ScimExceptionMapper.java       |  4 +---
 .../scim/server/rest/BaseResourceTypeResourceImpl.java   |  2 +-
 .../server/rest/BaseResourceTypeResourceImplTest.java    | 16 ++++++++++++++++
 .../directory/scim/protocol/exception/ScimException.java |  4 ++--
 4 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/exception/ScimExceptionMapper.java b/scim-server/src/main/java/org/apache/directory/scim/server/exception/ScimExceptionMapper.java
index e8454237..beb58418 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/exception/ScimExceptionMapper.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/exception/ScimExceptionMapper.java
@@ -35,9 +35,7 @@ public class ScimExceptionMapper implements ExceptionMapper<ScimException> {
 
   @Override
   public Response toResponse(ScimException e) {
-    ErrorResponse errorResponse = new ErrorResponse(e.getStatus(), e.getMessage());
-
-    Response response = errorResponse.toResponse();
+    Response response = e.getError().toResponse();
     response.getHeaders().putSingle(HttpHeaders.CONTENT_TYPE, Constants.SCIM_CONTENT_TYPE);
 
     return response;
diff --git a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
index c1850748..afc2a889 100644
--- a/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
+++ b/scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java
@@ -103,7 +103,7 @@ public abstract class BaseResourceTypeResourceImpl<T extends ScimResource> imple
   Repository<T> getRepositoryInternal() throws ScimException {
     Repository<T> repository = getRepository();
     if (repository == null) {
-      throw new ScimException(Status.INTERNAL_SERVER_ERROR, "Provider not defined");
+      throw new ScimException(Status.NOT_IMPLEMENTED, "Provider not defined");
     }
     return repository;
   }
diff --git a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
index 5b2d04ec..8b69d3cf 100644
--- a/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
+++ b/scim-server/src/test/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImplTest.java
@@ -197,6 +197,22 @@ public class BaseResourceTypeResourceImplTest {
     assertThat(exception.getError().getDetail(), is("Cannot include both attributes and excluded attributes in a single request"));
   }
 
+  @Test
+  public void repositoryNotImplemented() throws ScimException {
+    // given
+    @SuppressWarnings("rawtypes")
+    BaseResourceTypeResourceImpl baseResourceImpl = Mockito.mock(BaseResourceTypeResourceImpl.class);
+    when(baseResourceImpl.getRepository()).thenReturn(null);
+    when(baseResourceImpl.getRepositoryInternal()).thenCallRealMethod();
+
+    // when
+    ScimException exception = assertThrows(ScimException.class, baseResourceImpl::getRepositoryInternal);
+
+    // then
+    assertEquals(exception.getStatus(), Status.NOT_IMPLEMENTED);
+    assertThat(exception.getError().getDetail(), is("Provider not defined"));
+  }
+
   private ScimUser getScimUser() throws PhoneNumberParseException {
     ScimUser user = new ScimUser();
 
diff --git a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/exception/ScimException.java b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/exception/ScimException.java
index 63cec55a..2b38e7db 100644
--- a/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/exception/ScimException.java
+++ b/scim-spec/scim-spec-protocol/src/main/java/org/apache/directory/scim/protocol/exception/ScimException.java
@@ -30,8 +30,8 @@ import lombok.EqualsAndHashCode;
 public class ScimException extends Exception {
 
   private static final long serialVersionUID = 3643485564325176463L;
-  private ErrorResponse error;
-  private Status status;
+  private final ErrorResponse error;
+  private final Status status;
 
   public ScimException(Status status, String message, Throwable cause) {
     super(message, cause);