[DOSGI-270] Add swagger documentation example
Project: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/commit/be1d9b7b Tree: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/tree/be1d9b7b Diff: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/diff/be1d9b7b Branch: refs/heads/master Commit: be1d9b7ba01baa4528c7b71a843d30050d225830 Parents: ac8a037 Author: Christian Schneider <ch...@die-schneider.net> Authored: Mon Jul 10 12:15:20 2017 +0200 Committer: Christian Schneider <ch...@die-schneider.net> Committed: Mon Jul 10 12:15:20 2017 +0200 ---------------------------------------------------------------------- distribution/multi-bundle/pom.xml | 1 + distribution/repository/pom.xml | 3 +++ .../features/src/main/resources/features.xml | 3 +++ samples/rest/README.md | 7 ++++++- .../cxf/dosgi/samples/rest/TaskResource.java | 18 ++++++++++++++-- samples/rest/impl-jackson/pom.xml | 4 ++-- .../samples/rest/impl/TaskResourceImpl.java | 19 +++++------------ samples/rest/impl/pom.xml | 12 ++++++++++- .../samples/rest/impl/TaskResourceImpl.java | 22 +++++++++++++++++++- 9 files changed, 68 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/distribution/multi-bundle/pom.xml ---------------------------------------------------------------------- diff --git a/distribution/multi-bundle/pom.xml b/distribution/multi-bundle/pom.xml index 58cb4db..633bb08 100644 --- a/distribution/multi-bundle/pom.xml +++ b/distribution/multi-bundle/pom.xml @@ -65,6 +65,7 @@ <descriptor>mvn:org.apache.cxf.dosgi/cxf-dosgi/${project.version}/xml/features</descriptor> </descriptors> <features> + <feature>cxf-rs-description-swagger2</feature> <feature>cxf-dosgi-base</feature> <feature>aries-rsa-discovery-zookeeper</feature> <feature>cxf-dosgi-provider-ws</feature> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/distribution/repository/pom.xml ---------------------------------------------------------------------- diff --git a/distribution/repository/pom.xml b/distribution/repository/pom.xml index 45eb4da..a72ac6e 100644 --- a/distribution/repository/pom.xml +++ b/distribution/repository/pom.xml @@ -58,4 +58,7 @@ </dependency> </dependencies> + <properties> + <checkstyle.skip>true</checkstyle.skip> + </properties> </project> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/samples/features/src/main/resources/features.xml b/samples/features/src/main/resources/features.xml index 58b9c91..6d62713 100644 --- a/samples/features/src/main/resources/features.xml +++ b/samples/features/src/main/resources/features.xml @@ -19,6 +19,9 @@ <feature name="cxf-dosgi-sample-rest-impl" version="${project.version}"> <feature>cxf-dosgi-provider-rs</feature> <feature>aries-rsa-discovery-zookeeper-server</feature> + <feature>cxf-features-logging</feature> + <feature>cxf-rs-description-swagger2</feature> + <bundle>mvn:org.webjars/swagger-ui/2.2.10-1</bundle> <bundle>mvn:org.apache.cxf.dosgi.samples/cxf-dosgi-samples-rest-api/${project.version}</bundle> <bundle>mvn:org.apache.cxf.dosgi.samples/cxf-dosgi-samples-rest-impl/${project.version}</bundle> </feature> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/rest/README.md ---------------------------------------------------------------------- diff --git a/samples/rest/README.md b/samples/rest/README.md index eda3e1d..2a7311b 100644 --- a/samples/rest/README.md +++ b/samples/rest/README.md @@ -40,13 +40,18 @@ task:add 4 Mytask task:list ``` +### Browse Swagger documentation + +The jaxrs sample also creates swagger documentation for the REST endpoint. + +[Get the swagger documentation for the jaxrs sample] (http://localhost:8181/cxf/tasks/api-docs?url=../swagger.json). + ### Add logging intent Starting with CXF 3.1.9 the CXF logging feature is exported as an intent by default this makes it very easy to add logging to the rest example. ``` -feature:install cxf-features-logging config:property-set -p TaskResource service.exported.intents logging endpoint http://localhost:8181/cxf/tasks ``` http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/rest/api/src/main/java/org/apache/cxf/dosgi/samples/rest/TaskResource.java ---------------------------------------------------------------------- diff --git a/samples/rest/api/src/main/java/org/apache/cxf/dosgi/samples/rest/TaskResource.java b/samples/rest/api/src/main/java/org/apache/cxf/dosgi/samples/rest/TaskResource.java index 2ccedb6..15630f7 100644 --- a/samples/rest/api/src/main/java/org/apache/cxf/dosgi/samples/rest/TaskResource.java +++ b/samples/rest/api/src/main/java/org/apache/cxf/dosgi/samples/rest/TaskResource.java @@ -26,22 +26,36 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; -@Api +@Api(tags = {"tasks"}) @Path("") @Produces("application/xml") public interface TaskResource { + + @ApiOperation(value = "Get task by ID", notes = "Returns a single task", response = Task.class) + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Task not found") + }) @GET @Path("/{id}") Task get(@PathParam("id") Integer id); + @ApiOperation(value = "Add task or update existing task") @PUT void addOrUpdate(Task task); + @ApiOperation(value = "Deletes a task") + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Task not found") + }) @DELETE @Path("/{id}") void delete(Integer id); - + + @ApiOperation(value = "Retrieve all tasks") @GET Task[] getAll(); } http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/rest/impl-jackson/pom.xml ---------------------------------------------------------------------- diff --git a/samples/rest/impl-jackson/pom.xml b/samples/rest/impl-jackson/pom.xml index 1ed144f..3b79b52 100644 --- a/samples/rest/impl-jackson/pom.xml +++ b/samples/rest/impl-jackson/pom.xml @@ -41,13 +41,13 @@ <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description-swagger</artifactId> - <version>3.1.9</version> + <version>${cxf.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.aries.rsa</groupId> <artifactId>org.apache.aries.rsa.spi</artifactId> - <version>1.9.0</version> + <version>${aries.rsa.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java ---------------------------------------------------------------------- diff --git a/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java b/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java index f1855de..8531559 100644 --- a/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java +++ b/samples/rest/impl-jackson/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java @@ -24,16 +24,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; -import io.swagger.annotations.Api; import org.apache.cxf.dosgi.common.api.IntentsProvider; import org.apache.cxf.dosgi.samples.rest.Task; import org.apache.cxf.dosgi.samples.rest.TaskResource; import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.feature.Features; -import org.apache.cxf.jaxrs.swagger.Swagger2Feature; import org.osgi.service.component.annotations.Component; +import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider; + +import io.swagger.annotations.Api; + @Component// (// immediate = true, // @@ -89,17 +90,7 @@ public class TaskResourceImpl implements TaskResource, IntentsProvider { @Override public List<?> getIntents() { - return asList(createSwaggerFeature(), new JacksonJaxbJsonProvider()); - } - - private Swagger2Feature createSwaggerFeature() { - Swagger2Feature swagger = new Swagger2Feature(); - //swagger2Feature.setBasePath("/cxf/"); - swagger.setUsePathBasedConfig(true); - swagger.setPrettyPrint(true); - swagger.setSupportSwaggerUi(true); - swagger.setScan(false); - return swagger; + return asList(new JacksonJaxbJsonProvider()); } } http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/rest/impl/pom.xml ---------------------------------------------------------------------- diff --git a/samples/rest/impl/pom.xml b/samples/rest/impl/pom.xml index 5e28d36..be0591b 100644 --- a/samples/rest/impl/pom.xml +++ b/samples/rest/impl/pom.xml @@ -37,7 +37,17 @@ <groupId>org.apache.aries.rsa</groupId> <artifactId>org.apache.aries.rsa.spi</artifactId> <version>1.9.0</version> - <type>bundle</type> + </dependency> + <dependency> + <groupId>org.apache.cxf.dosgi</groupId> + <artifactId>cxf-dosgi-common</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-rs-service-description-swagger</artifactId> + <version>${cxf.version}</version> + <scope>provided</scope> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/be1d9b7b/samples/rest/impl/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java ---------------------------------------------------------------------- diff --git a/samples/rest/impl/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java b/samples/rest/impl/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java index 3b3e400..c4171bd 100644 --- a/samples/rest/impl/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java +++ b/samples/rest/impl/src/main/java/org/apache/cxf/dosgi/samples/rest/impl/TaskResourceImpl.java @@ -18,11 +18,16 @@ */ package org.apache.cxf.dosgi.samples.rest.impl; +import static java.util.Arrays.asList; + import java.util.HashMap; +import java.util.List; import java.util.Map; +import org.apache.cxf.dosgi.common.api.IntentsProvider; import org.apache.cxf.dosgi.samples.rest.Task; import org.apache.cxf.dosgi.samples.rest.TaskResource; +import org.apache.cxf.jaxrs.swagger.Swagger2Feature; import org.osgi.service.component.annotations.Component; @Component// @@ -36,7 +41,7 @@ import org.osgi.service.component.annotations.Component; "org.apache.cxf.rs.address=/tasks" // } // ) -public class TaskResourceImpl implements TaskResource { +public class TaskResourceImpl implements TaskResource, IntentsProvider { Map<Integer, Task> taskMap; public TaskResourceImpl() { @@ -73,4 +78,19 @@ public class TaskResourceImpl implements TaskResource { taskMap.remove(id); } + @Override + public List<?> getIntents() { + return asList(createSwaggerFeature()); + } + + private Swagger2Feature createSwaggerFeature() { + Swagger2Feature swagger = new Swagger2Feature(); + swagger.setDescription("Sample jaxrs application to organize taks"); + swagger.setTitle("Tasks sample"); + swagger.setUsePathBasedConfig(true); // Necessary for OSGi + swagger.setScan(false); + swagger.setPrettyPrint(true); + swagger.setSupportSwaggerUi(true); + return swagger; + } }