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 2019/10/31 15:24:16 UTC

[syncope] branch 2_1_X updated: Fixing ErrorTO schema with OpenAPI

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

ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/2_1_X by this push:
     new 46fa279  Fixing ErrorTO schema with OpenAPI
46fa279 is described below

commit 46fa27905e7038bef8291cd952a194d1c4b8bf80
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Thu Oct 31 16:23:53 2019 +0100

    Fixing ErrorTO schema with OpenAPI
---
 .../core/rest/cxf/SyncopeOpenApiCustomizer.java    | 24 +++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java
index bf37246..fd5f9b3 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/SyncopeOpenApiCustomizer.java
@@ -21,9 +21,12 @@ package org.apache.syncope.core.rest.cxf;
 import io.swagger.v3.oas.integration.api.OpenAPIConfiguration;
 import io.swagger.v3.oas.models.Operation;
 import io.swagger.v3.oas.models.headers.Header;
+import io.swagger.v3.oas.models.media.ArraySchema;
 import io.swagger.v3.oas.models.media.Content;
+import io.swagger.v3.oas.models.media.IntegerSchema;
 import io.swagger.v3.oas.models.media.MediaType;
 import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.media.StringSchema;
 import io.swagger.v3.oas.models.parameters.HeaderParameter;
 import io.swagger.v3.oas.models.parameters.Parameter;
 import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -36,6 +39,8 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.cxf.jaxrs.ext.MessageContext;
@@ -127,22 +132,31 @@ public class SyncopeOpenApiCustomizer extends OpenApiCustomizer {
                 new Header().schema(new Schema<>().type("string")).description("Error code"));
         headers.put(
                 RESTHeaders.ERROR_INFO,
-                new Header().schema(new Schema<>().type("string")).description("Error message"));
+                new Header().schema(new Schema<>().type("string")).description("Error message(s)"));
 
         ErrorTO sampleError = new ErrorTO();
         sampleError.setStatus(Response.Status.BAD_REQUEST.getStatusCode());
         sampleError.setType(ClientExceptionType.InvalidEntity);
-        sampleError.getElements().add("additional information");
+        sampleError.getElements().add("error message");
+
+        Schema<ErrorTO> errorSchema = new Schema<>();
+        errorSchema.example(sampleError).
+                addProperties("status", new IntegerSchema().description("HTTP status code")).
+                addProperties("type", new StringSchema().
+                        _enum(Stream.of(ClientExceptionType.values()).map(Enum::name).collect(Collectors.toList())).
+                        description("Error code")).
+                addProperties("elements", new ArraySchema().type("string").description("Error message(s)"));
+
         Content content = new Content();
         content.addMediaType(
                 javax.ws.rs.core.MediaType.APPLICATION_JSON,
-                new MediaType().schema(new Schema<ErrorTO>().example(sampleError)));
+                new MediaType().schema(errorSchema));
         content.addMediaType(
                 RESTHeaders.APPLICATION_YAML,
-                new MediaType().schema(new Schema<ErrorTO>().example(sampleError)));
+                new MediaType().schema(errorSchema));
         content.addMediaType(
                 javax.ws.rs.core.MediaType.APPLICATION_XML,
-                new MediaType().schema(new Schema<ErrorTO>().example(sampleError)));
+                new MediaType().schema(errorSchema));
 
         responses.addApiResponse("400", new ApiResponse().
                 description("An error occurred; HTTP status code can vary depending on the actual error: "