diff --git a/pom.xml b/pom.xml
index 960eb1cb..e9878b73 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,22 +138,6 @@
-
- org.codehaus.enunciate
- maven-enunciate-plugin
- 1.26.2
-
-
- package
-
- assemble
-
-
- ${project.basedir}/src/main/enunciate/enunciate.xml
-
-
-
-
com.github.searls
jasmine-maven-plugin
@@ -278,9 +262,9 @@
- com.google.code.gson
- gson
- 2.2.2
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ 2.1.4
org.slf4j
@@ -305,9 +289,9 @@
- org.codehaus.enunciate
- enunciate-core-annotations
- 1.26.2
+ com.wordnik
+ swagger-jaxrs_2.9.1
+ 1.2.2
diff --git a/src/main/java/com/commafeed/frontend/CommaFeedSession.java b/src/main/java/com/commafeed/frontend/CommaFeedSession.java
index 80c264e0..15675b5b 100644
--- a/src/main/java/com/commafeed/frontend/CommaFeedSession.java
+++ b/src/main/java/com/commafeed/frontend/CommaFeedSession.java
@@ -15,9 +15,10 @@ import com.commafeed.backend.model.UserRole.Role;
import com.commafeed.backend.services.UserService;
import com.google.common.collect.Sets;
-@SuppressWarnings("serial")
public class CommaFeedSession extends AuthenticatedWebSession {
+ private static final long serialVersionUID = 1L;
+
@Inject
UserService userService;
diff --git a/src/main/java/com/commafeed/frontend/rest/ApiListingResource.java b/src/main/java/com/commafeed/frontend/rest/ApiListingResource.java
new file mode 100644
index 00000000..5b092a29
--- /dev/null
+++ b/src/main/java/com/commafeed/frontend/rest/ApiListingResource.java
@@ -0,0 +1,101 @@
+package com.commafeed.frontend.rest;
+
+import java.util.Enumeration;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import com.commafeed.frontend.model.Entries;
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+import com.wordnik.swagger.core.SwaggerSpec;
+import com.wordnik.swagger.jaxrs.ConfigReader;
+import com.wordnik.swagger.jaxrs.JavaApiListing;
+
+@Path("/resources")
+@Api("/resources")
+@Produces({ "application/json" })
+public class ApiListingResource extends JavaApiListing {
+
+ @Override
+ @GET
+ @ApiOperation(value = "Returns list of all available api endpoints", responseClass = "List[DocumentationEndPoint]")
+ public Response getAllApis(@Context final ServletConfig sc,
+ @Context Application app, @Context HttpHeaders headers,
+ @Context UriInfo uriInfo) {
+
+ return super.getAllApis(new ServletConfigProxy(sc), app, headers,
+ uriInfo);
+ }
+
+ public static class ServletConfigProxy implements ServletConfig {
+
+ private ServletConfig sc;
+
+ public ServletConfigProxy(ServletConfig sc) {
+ this.sc = sc;
+ }
+
+ @Override
+ public String getServletName() {
+ return sc.getServletName();
+ }
+
+ @Override
+ public ServletContext getServletContext() {
+ return sc.getServletContext();
+ }
+
+ @Override
+ public String getInitParameter(String name) {
+ if ("swagger.config.reader".equals(name)) {
+ return CustomConfigReader.class.getName();
+ }
+ return sc.getInitParameter(name);
+ }
+
+ @Override
+ public Enumeration getInitParameterNames() {
+ return sc.getInitParameterNames();
+ }
+ }
+
+ public static class CustomConfigReader extends ConfigReader {
+
+ public CustomConfigReader(ServletConfig config) {
+ }
+
+ @Override
+ public String basePath() {
+ return "http://localhost:8082/commafeed/rest";
+ }
+
+ @Override
+ public String swaggerVersion() {
+ return SwaggerSpec.version();
+ }
+
+ @Override
+ public String apiVersion() {
+ return "1.0";
+ }
+
+ @Override
+ public String modelPackages() {
+ return Entries.class.getPackage().getName();
+ }
+
+ @Override
+ public String apiFilterClassName() {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java b/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java
deleted file mode 100644
index 9b43feed..00000000
--- a/src/main/java/com/commafeed/frontend/rest/JSONMessageBodyReaderWriter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package com.commafeed.frontend.rest;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-
-import org.apache.commons.lang.time.DateUtils;
-
-import com.commafeed.frontend.CommaFeedSession;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-@Provider
-@Produces({ MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
-@Consumes(MediaType.APPLICATION_JSON)
-public class JSONMessageBodyReaderWriter implements MessageBodyWriter