Okay, since you mentioned using two packages isn’t working, what happens if you only set com.coreservices.servlet for the resource packing?
From: <swagger-swaggersocket@googlegroups.com> on behalf of janet vanderpuye <rhy...@gmail.com> Reply-To: "swagger-swaggersocket@googlegroups.com" <swagger-swaggersocket@googlegroups.com> Date: Tuesday, 27 December 2016 at 13:06 To: Swagger <swagger-swaggersocket@googlegroups.com> Subject: Re: Cant locate swagger.json on java + embedded jetty + httpservlet + swagger integration Maybe. Here is what I have so far. Main.java import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import io.swagger.servlet.listing.ApiDeclarationServlet; import io.swagger.servlet.config.DefaultServletConfig; Server server = new Server(Integer.parseInt(properties.getProperty(Config.JETTY_SERVICE_PORT))); ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); servletContextHandler.setContextPath("/"); server.setHandler(servletContextHandler); //Custom servlet ServletHolder apiservlet = servletContextHandler.addServlet(ProfileServlet.class, "/user/*"); apiservlet.setInitOrder(3); logger.info("User profile server initialized."); // Swagger servlet reader ServletHolder swaggerServlet = servletContextHandler.addServlet(DefaultServletConfig.class, "/swagger-core"); swaggerServlet.setInitOrder(2); swaggerServlet.setInitParameter("api.version", "1.0.0"); //swaggerServlet.setInitParameter("swagger.resource.package", "com.coreservices.servlets,com.coreservices.datatypes"); swaggerServlet.setInitParameter("swagger.resource.package","com.coreservices.servlets"); swaggerServlet.setInitParameter("swagger.api.basepath", "http://localhost:7000"); // Swagger api declaration servletContextHandler.addServlet(ApiDeclarationServlet.class, "/api/*"); server.start(); ProfileServlet.java /**custom httpservlet class**/ import io.swagger.annotations.*; import org.apache.log4j.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created on 12/21/2016. */ @SwaggerDefinition( info = @Info( title = "User Profile Servlet", version = "1.0.0", description = "Servlet that handles basic CRUD operations to the user profile data source", contact = @Contact(name = "XYZ", email = "XYZ", url = "XYZ"), termsOfService = "XYZ", license = @License(name = "XYZ", url = "XYZ") ), basePath = "/", consumes = {"application/json"}, produces = {"application/json"}, schemes = {SwaggerDefinition.Scheme.HTTP, SwaggerDefinition.Scheme.HTTPS}, tags = {@Tag(name = "users", description = "CRUD operations on user datatype")} ) @Api(value = "/user", description = "performs CRUD operations on a user profile") public class ProfileServlet extends HttpServlet { Logger logger = Logger.getLogger(ProfileServlet.class.getSimpleName()); @ApiOperation(httpMethod = "GET", value = "Returns a [list of the] user profile datatype", notes = "", response = UserDatatype.class, nickname = "getUser", tags = ("User")) @ApiResponses(value = { @ApiResponse(code = 200, message = "Succssful retrieval of user profiles", response = UserDatatype.class), @ApiResponse(code = 500, message = "Internal server error") }) @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "profile id", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "firstname", value = "First name of user", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "lastname", value = "Last name of user", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "phone", value = "phone number of user", required = false, dataType = "String", paramType = "query"), @ApiImplicitParam(name = "signup", value = "Sign up date of user, in dd-MM-yyyy forma", required = false, dataType = "java.sql.Date", paramType = "query") }) @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { RpcLogTemplate logTemplate = new RpcLogTemplate(req.getRemoteHost(),req.getParameter("client"), req.getParameter("clientapp"), Config.localhost, Config.SERVICE_INSTANCE, Config.SERVICE_APP, req.getParameterMap(), req.getRequestURI(), new Date().getTime() ); logger.debug("Received request: GET"); logger.debug("Request URI: " + req.getRequestURI()); logger.debug("Request servlet path: " + req.getServletPath()); handleGet(req, resp, logTemplate); logTemplate.setResponseTimestamp(new Date().getTime()); logTemplate.setResponseCode(Integer.toString(resp.getStatus())); Main.loggerService.addLog(logTemplate); } } Finally the dependencies in my pom file <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.coreservice.dataservice</groupId> <artifactId>ServiceUserProfile</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <jetty.version>9.4.0.v20161208</jetty.version> </properties> <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!--Jetty dependencies start --> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>${jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>${jetty.version}</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.10</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-servlet</artifactId> <version>1.5.10</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp</artifactId> <version>0.8.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.2.RELEASE</version> </dependency> <!--Jetty dependencies end --> </dependencies> <!-- Download the Swagger-UI project --> <build> <plugins> <plugin> <groupId>com.googlecode.maven-download-plugin</groupId> <artifactId>download-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <id>swagger-ui</id> <phase>validate</phase> <goals> <goal>wget</goal> </goals> <configuration> <url>https://github.com/swagger-api/swagger-ui/archive/master.tar.gz</url> <unpack>true</unpack> <outputDirectory>${project.build.directory}</outputDirectory> </configuration> </execution> </executions> </plugin> <!-- Load the Swagger-UI components into the src/main/webapp/ directory to enable viewing/testing of the API routes. Accessible at http://<host>:<port>/swagger. --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <id>copy-resources</id> <phase>initialize</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/src/main/resources/webapp</outputDirectory> <resources> <resource> <directory>${project.build.directory}/swagger-ui-master/dist</directory> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project> On Tuesday, 27 December 2016 12:01:47 UTC-5, Ron wrote: The web.xml is not the only way to configure it, and I think you’ve went with different approach(es). What did you end up using? From: <swagger-sw...@googlegroups.com> on behalf of janet vanderpuye <rhy...@gmail.com> Reply-To: "swagger-sw...@googlegroups.com" <swagger-sw...@googlegroups.com> Date: Tuesday, 27 December 2016 at 8:21 To: Swagger <swagger-sw...@googlegroups.com> Subject: Re: Cant locate swagger.json on java + embedded jetty + httpservlet + swagger integration Hi, thanks for the feedback. I will create the ticket for the multiple packages. I did look at the servlet sample you linked here. I followed that example and updated to the latest code i posted above. The only difference now between my implemetation and that sample was I did not use a web.xml to specify the mapping. I only have that one custom servlet which has both the @Api annotation and the @Info annotation. The @info annotation is picked up and displayed but nothing shows up for the @Api contents. On Monday, 26 December 2016 14:23:08 UTC-5, Ron wrote: If scanning multiple packages isn’t working for you, you should open a ticket on the project. We may have some basic bugs with servlet implementation as that’s less commonly used. The scanning should definitely pick up anything that has the @Api annotations on it. The only reason it wouldn’t is if they are not in the package you’ve set to be scanned. Have you had a look at the servlet sample? From: <swagger-sw...@googlegroups.com> on behalf of janet vanderpuye <rhy...@gmail.com> Reply-To: "swagger-sw...@googlegroups.com" <swagger-sw...@googlegroups.com> Date: Friday, 23 December 2016 at 12:25 To: Swagger <swagger-sw...@googlegroups.com> Subject: Re: Cant locate swagger.json on java + embedded jetty + httpservlet + swagger integration Thanks Ron. Last night I double-checked and made sure I had no jersey resources/dependencies in my code. I also looked through the github project link you posted and imitated his dependencies and method calls without using the web.xml ( I really want to avoid web.xml as a number of the existing projects I have run as jars with embedded jetty's and no web.xml). The two things I'm faced with now are: Adding multiple packages(separated by a comma or semi-colon) as a resource through the Servlet.setInitParam() method does not work. Multiple packages delimited by a comma or otherwise result in the default {"swagger":"2.0","info":{"version":"1.0.0","title":""}} response. Secondly, I think I still have an issue in how Swagger scans my project. When I do get the swagger.json to display my annotations, it only captures the information in the @Info annotation on my servlet. Anything withing the @Api, @ApiOperation, @ApiResponses, @ApiModel are effectively ignored. Unless I'm mistaken, all of these are supposed to show up in the swagger.json output right? Or do I have to browse to another path to view those annotations too? I seen some posts use the path http://<host>:<port>/swagger-api/<servlet_name> but that does not work for me Here is what my code for the swagger servlet initialization and configuration looks like now. The custom servlet class I posted above remains largely the same. import org.apache.log4j.Logger; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import io.swagger.servlet.listing.ApiDeclarationServlet; import io.swagger.servlet.config.DefaultServletConfig; . . . logger.info("Initializing user profile server..."); new UserDao(); Server server = new Server(Integer.parseInt(properties.getProperty(Config.JETTY_SERVICE_PORT))); ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); servletContextHandler.setContextPath("/"); server.setHandler(servletContextHandler); //Custom servlet ServletHolder apiservlet = servletContextHandler.addServlet(ProfileServlet.class, "/user/*"); apiservlet.setInitOrder(3); logger.info("User profile server initialized."); // Swagger servlet reader ServletHolder swaggerServlet = servletContextHandler.addServlet(DefaultServletConfig.class, "/swagger-core"); swaggerServlet.setInitOrder(2); swaggerServlet.setInitParameter("api.version", "1.0.0"); //swaggerServlet.setInitParameter("swagger.resource.package", "com.coreservices.servlets,com.coreservices.datatypes"); NOTE::THIS DOES NOT WORK swaggerServlet.setInitParameter("swagger.resource.package","com.coreservices.servlets"); swaggerServlet.setInitParameter("swagger.api.basepath", "http://localhost:7000"); // Swagger api declaration servletContextHandler.addServlet(ApiDeclarationServlet.class, "/api/*"); return server; } Thanks once again for the help. On Thursday, 22 December 2016 17:57:48 UTC-5, Ron wrote: Huh, I misread it as you using jersey. You need to use a different dependency then and a different set up process. We don’t really have documentation for it, but there’s a sample - https://github.com/swagger-api/swagger-samples/tree/master/java/java-servlet From: <swagger-sw...@googlegroups.com> on behalf of janet vanderpuye <rhy...@gmail.com> Reply-To: "swagger-sw...@googlegroups.com" <swagger-sw...@googlegroups.com> Date: Thursday, 22 December 2016 at 14:39 To: Swagger <swagger-sw...@googlegroups.com> Subject: Re: Cant locate swagger.json on java + embedded jetty + httpservlet + swagger integration Oh ok. Maybe I need to read up a bit on Jax-rs but I believe application was built using only servlets. I had only the Bootstrap class and ProfileServlets class, which were written using HttpServlets. Unless one of the default package imports was built on Jax-rs. Thanks for the tip, I will double check for that. On Thursday, 22 December 2016 17:30:02 UTC-5, Ron wrote: What I’m saying is that you can’t use swagger-core for both jax-rs resources and servlets in a single app. From: <swagger-sw...@googlegroups.com> on behalf of janet vanderpuye <rhy...@gmail.com> Reply-To: "swagger-sw...@googlegroups.com" <swagger-sw...@googlegroups.com> Date: Thursday, 22 December 2016 at 14:26 To: Swagger <swagger-sw...@googlegroups.com> Subject: Re: Cant locate swagger.json on java + embedded jetty + httpservlet + swagger integration Ok thanks. On a quick scan -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to swagger-swaggersocket+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to swagger-swaggersocket+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Swagger" group. To unsubscribe from this group and stop receiving emails from it, send an email to swagger-swaggersocket+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.