Which version of Jersey do you use?

 

 

 

From: <swagger-swaggersocket@googlegroups.com> on behalf of janet vanderpuye 
<rhy...@gmail.com>
Reply-To: "swagger-swaggersocket@googlegroups.com" 
<swagger-swaggersocket@googlegroups.com>
Date: Thursday, 22 December 2016 at 11:10
To: Swagger <swagger-swaggersocket@googlegroups.com>
Subject: Re: Cant locate swagger.json on java + embedded jetty + httpservlet + 
swagger integration

 

So for my servlets, I just tried: 

 

apiservlet = servletContextHandler.addServlet(ProfileServlet.class, "/user/*");
apiservlet.setInitOrder(3);
apiservlet.setInitParameter("com.sun.jersey.config.property.packages", 
"com.coreservices.servlets;package com.coreservices.datatypes");
 

and  

 

apiservlet = servletContextHandler.addServlet(ProfileServlet.class, "/user/*");
apiservlet.setInitOrder(3);
apiservlet.setInitParameter("com.sun.jersey.config.property.packages", 
"com.api.resources;io.swagger.jaxrs.json;io.swagger.jaxrs.listing;com.coreservices.servlets;package
 com.coreservices.datatypes");

 

I am still getting the default swagger response 

{"swagger":"2.0","info":{"version":"1.0.0","title":""}}

Am I missing any annotation or configuration in the files?

Secondly to access the swagger ui annotation for my custom servlet 
"ProfileServlet.class", do I use the same url as 
"http://host:7000/api/swagger.json";? 

 

Really appreciate the quick feedback on this


On Thursday, 22 December 2016 13:52:18 UTC-5, tony tam wrote: 

Sounds like the issue then is how it’s scanning your code.  Put your API 
package here: 

 

    apiservlet.setInitParameter("com.sun.jersey.config.property.packages", 
"com.api.resources;io.swagger.jaxrs.json;io.swagger.jaxrs.listing");
so they can be scanned.

 

On Dec 22, 2016, at 10:50 AM, janet vanderpuye <rhy...@gmail.com> wrote:

 

Quick update. After modifying the initializeAPI method to the original Servlet 
class in the blog(see below),  I was able to get some response from the 
swagger-ui on http://host:7000/api/swagger.json. But I it seems like swagger 
wasnt able to parse my servlet annotations 

http://host:7000/api/swagger.json ===> 
{"swagger":"2.0","info":{"version":"1.0.0","title":""}}

 

private static Server initializeApi(Properties properties) {
    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);
    //Setup APIs
    ServletHolder apiservlet = 
servletContextHandler.addServlet(ServletContainer.class, "/api/*");
    apiservlet.setInitOrder(1);
    apiservlet.setInitParameter("com.sun.jersey.config.property.packages", 
"com.api.resources;io.swagger.jaxrs.json;io.swagger.jaxrs.listing");

    apiservlet = servletContextHandler.addServlet(ProfileServlet.class, 
"/user/*");
    //apiservlet.setInitOrder(1);
    apiservlet.setInitParameter("com.sun.jersey.config.property.packages", 
"com.api.resources;io.swagger.jaxrs.json;io.swagger.jaxrs.listing");
    logger.info("User profile server initialized.");

    // Setup Swagger servlet
    ServletHolder swaggerServlet = 
servletContextHandler.addServlet(DefaultJaxrsConfig.class, "/swagger-core");
    swaggerServlet.setInitOrder(2);
    swaggerServlet.setInitParameter("api.version", "1.0.0");

    // Setup Swagger-UI static resources
    String resourceBasePath = 
Main.class.getResource("/webapp").toExternalForm();
    servletContextHandler.setWelcomeFiles(new String[] {"index.html"});
    servletContextHandler.setResourceBase(resourceBasePath);
    servletContextHandler.addServlet(new ServletHolder(new DefaultServlet()), 
"/*");

    return server;
}

On Thursday, 22 December 2016 13:31:03 UTC-5, janet vanderpuye wrote: 

I recently followed this blog to integrate swagger in my embedded jetty project 
but after running, I'm not able to access the swagger.json file on any path 
combination. Accessing the servlets for the resources work with no error but I 
get the following errors when I try to get the swagger.json file
http://host:7000/swagger-core  ===> HTTP ERROR 405
http://host:7000/swagger-core/swagger.json ===> HTTP ERROR 404
http://host:7000/user/swagger.json ===> HTTP ProfileServlet response, not 
swagger.json
http://host:7000/user ===> HTTP ProfileServlet response, not swagger.json
http://host:7000/swagger.json ===> HTTP ERROR 404
http://host:7000/api/swagger.json ===> HTTP ERROR 404
http://host:7000/ ===> Static swagger sample page (Pet store), not swagger.json
Main.java
 public static void main(String[] args) throws Exception {
   Server server = initializeApi(properties);
    server.start();
    logger.info("Api resource service started");
    server.join();
 }
 
 private static Server initializeApi(Properties properties) {
    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);
    //Setup APIs
 
    ServletHolder apiservlet = 
servletContextHandler.addServlet(ProfileServlet.class, "/user/*");
    apiservlet.setInitOrder(1);
    apiservlet.setInitParameter("com.sun.jersey.config.property.packages", 
"com.api.resources;io.swagger.jaxrs.json;io.swagger.jaxrs.listing");
    logger.info("User profile server initialized.");
 
        // Setup Swagger servlet
        ServletHolder swaggerServlet = 
servletContextHandler.addServlet(DefaultJaxrsConfig.class, "/swagger-core");
        swaggerServlet.setInitOrder(2);
        swaggerServlet.setInitParameter("api.version", "1.0.0");
 
        // Setup Swagger-UI static resources
        String resourceBasePath = 
Main.class.getResource("/webapp").toExternalForm();
        servletContextHandler.setWelcomeFiles(new String[] {"index.html"});
        servletContextHandler.setResourceBase(resourceBasePath);
        servletContextHandler.addServlet(new ServletHolder(new 
DefaultServlet()), "/*");
 
        return server;
    }
}
ProfileServlet.java
@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());
 
    public ProfileServlet(){
 
    }
 
    @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(), new Date().getTime() );
        logger.debug("Received request: GET");
        handleGet(req, resp, logTemplate);
        logTemplate.setResponseTimestamp(new Date().getTime());
        //LoggerService.INSTANCE.addLog(logTemplate);
    }
 
    private void handleGet(HttpServletRequest request, HttpServletResponse 
response, RpcLogTemplate logTemplate) throws IOException {
        Gson gson = new Gson();
        String param = null;
        param = request.getParameter("id");
        if(param!= null){
            logger.info("Query by ID received. All other params would be 
ignored");
            UserDatatype userDatatype = UserDao.INSTANCE.findById(param);
            if(userDatatype == null){
                response.setStatus(HttpServletResponse.SC_OK);
                logger.info("Null object returned");
                return;
            }else{
                response.setStatus(HttpServletResponse.SC_OK);
                PrintWriter printWriter = response.getWriter();
                printWriter.write(gson.toJson(userDatatype, 
UserDatatype.class));
                printWriter.flush();
                printWriter.close();
            }
        }else{
            Map<String, String> queryString = new HashMap<>();
            //TODO: optimize this
            param = request.getParameter("firstname");
            if(param != null)
                queryString.put("firstname", param);
            param = request.getParameter("lastname");
            if(param != null)
                queryString.put("lastname", param);
            param = request.getParameter("phone");
            if(param != null)
                queryString.put("phone", param);
            param = request.getParameter("signup");
            if(param != null)
                queryString.put("signup", param);
            UserDatatype[] userDatatypes = 
UserDao.INSTANCE.findByParams(queryString);
            if(userDatatypes == null){
                response.setStatus(HttpServletResponse.SC_OK);
                logger.info("Null object returned");
                return;
            }else{
                response.setStatus(HttpServletResponse.SC_OK);
                PrintWriter printWriter = response.getWriter();
                printWriter.write(gson.toJson(userDatatypes, 
UserDatatype[].class));
                printWriter.flush();
                printWriter.close();
            }
        }
    }
 
 }
Bootstrap.java
public class Bootstrap  extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
 
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[]{"http"});
    beanConfig.setHost("localhost:7000");
    beanConfig.setBasePath("/");
    beanConfig.setResourcePackage("io.swagger.resources");
    beanConfig.setScan(true);
    beanConfig.setPrettyPrint(true);
}
}

All help appreciated.

 

-- 
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.

Reply via email to