Small improvements to build-tools, including Swagger
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/e073cc43 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/e073cc43 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/e073cc43 Branch: refs/heads/master Commit: e073cc43225bbeb4c8ea670750b8f5a0829d6676 Parents: d505627 Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Thu Mar 1 15:47:13 2018 +0100 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Fri Mar 2 12:13:18 2018 +0100 ---------------------------------------------------------------------- fit/build-tools/pom.xml | 16 ++++++++++++- .../syncope/fit/buildtools/cxf/UserService.java | 3 ++- .../fit/buildtools/cxf/UserServiceImpl.java | 13 ++++++++-- .../META-INF/cxf/org.apache.cxf.Logger | 1 + .../src/main/resources/cxfContext.xml | 25 ++++++++++++++++++++ 5 files changed, 54 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/pom.xml ---------------------------------------------------------------------- diff --git a/fit/build-tools/pom.xml b/fit/build-tools/pom.xml index 9f0d783..a4172e7 100644 --- a/fit/build-tools/pom.xml +++ b/fit/build-tools/pom.xml @@ -45,6 +45,11 @@ under the License. </dependency> <dependency> + <groupId>javax.validation</groupId> + <artifactId>validation-api</artifactId> + </dependency> + + <dependency> <groupId>org.apache.directory.server</groupId> <artifactId>apacheds-all</artifactId> </dependency> @@ -88,13 +93,22 @@ under the License. <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description</artifactId> - </dependency> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-rs-service-description-openapi-v3</artifactId> + </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> </dependency> <dependency> + <groupId>org.webjars</groupId> + <artifactId>swagger-ui</artifactId> + </dependency> + + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java ---------------------------------------------------------------------- diff --git a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java index 5d64cfc..f02cae4 100644 --- a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java +++ b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java @@ -30,6 +30,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; @Path("users") public interface UserService { @@ -44,7 +45,7 @@ public interface UserService { @POST @Consumes({ MediaType.APPLICATION_JSON }) - void create(User user); + Response create(User user); @PUT @Path("{key}") http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java ---------------------------------------------------------------------- diff --git a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java index dea0f63..6b04515 100644 --- a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java +++ b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java @@ -23,8 +23,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.ForbiddenException; import javax.ws.rs.NotFoundException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriInfo; import org.springframework.stereotype.Service; @Service @@ -32,6 +36,9 @@ public class UserServiceImpl implements UserService { private static final Map<UUID, User> USERS = new HashMap<UUID, User>(); + @Context + private UriInfo uriInfo; + @Override public List<User> list() { return new ArrayList<>(USERS.values()); @@ -47,14 +54,16 @@ public class UserServiceImpl implements UserService { } @Override - public void create(final User user) { + public Response create(final User user) { if (user.getKey() == null) { user.setKey(UUID.randomUUID()); } if (USERS.containsKey(user.getKey())) { - throw new IllegalArgumentException("User already exists: " + user.getKey()); + throw new ClientErrorException("User already exists: " + user.getKey(), Response.Status.CONFLICT); } USERS.put(user.getKey(), user); + + return Response.created(uriInfo.getAbsolutePathBuilder().path(user.getKey().toString()).build()).build(); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger ---------------------------------------------------------------------- diff --git a/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger b/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger new file mode 100644 index 0000000..6e7bd36 --- /dev/null +++ b/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger @@ -0,0 +1 @@ +org.apache.cxf.common.logging.Slf4jLogger http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/resources/cxfContext.xml ---------------------------------------------------------------------- diff --git a/fit/build-tools/src/main/resources/cxfContext.xml b/fit/build-tools/src/main/resources/cxfContext.xml index 9a6c959..7384e55 100644 --- a/fit/build-tools/src/main/resources/cxfContext.xml +++ b/fit/build-tools/src/main/resources/cxfContext.xml @@ -38,6 +38,28 @@ under the License. <jaxws:endpoint id="soapProvisioning" address="/soap" implementor="#provisioningImpl"/> + <bean id="openApiCustomizer" class="org.apache.cxf.jaxrs.openapi.OpenApiCustomizer"> + <property name="dynamicBasePath" value="true"/> + <property name="replaceTags" value="false"/> + </bean> + <bean id="openapiFeature" class="org.apache.cxf.jaxrs.openapi.OpenApiFeature"> + <property name="title" value="Apache Syncope FIT Build Tools"/> + <property name="version" value="${syncope.version}"/> + <property name="description" value="Apache Syncope ${syncope.version}"/> + <property name="contactName" value="The Apache Syncope community"/> + <property name="contactEmail" value="d...@syncope.apache.org"/> + <property name="contactUrl" value="http://syncope.apache.org"/> + + <property name="scan" value="false"/> + <property name="resourcePackages"> + <set> + <value>org.apache.syncope.fit.buildtools.cxf</value> + </set> + </property> + + <property name="customizer" ref="openApiCustomizer"/> + </bean> + <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/> <jaxrs:server id="restProvisioning" address="/rest" basePackages="org.apache.syncope.fit.buildtools.cxf" @@ -45,6 +67,9 @@ under the License. <jaxrs:providers> <ref bean="jsonProvider"/> </jaxrs:providers> + <jaxrs:features> + <ref bean="openapiFeature"/> + </jaxrs:features> </jaxrs:server> </beans>