2013-02-11 116 views
2

我试图用Swagger启动我们的API服务器。我们根本不使用web.xml,而是用Java配置所有的东西。我试图按照the Swagger JAX-RS tutorial的说明操作,但仍然有问题。我用从SVN最新的代码(本地安装1.2.1-SNAPSHOT)在Java中配置的Swagger缺少依赖关系

final Server jetty = injector.getInstance(Server.class); 

ServletContextHandler sch = injector.getInstance(ServletContextHandler.class); 
sch.setInitParameter("swagger.api.basepath", "http://localhost:8090"); 
sch.setInitParameter("api.version", "0.1"); 

JuiceContainer unprotected = new JuiceContainer(injector, ApiListingResource.class); 
sch.addFilter(new FilterHolder(unprotected), "/*", null); 
sch.addServlet(DefaultServlet.class, "/"); 

而且ApiListingResource是究竟是如何在本教程建议:

@Path("/resources.json") 
@Api("/resources") 
@Produces(MediaType.APPLICATION_JSON) 
public class ApiListingResource extends JavaApiListing { } 

不幸的是,启动服务器时,我得到这个错误:

SEVERE: The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.wordnik.swagger.jaxrs.JavaApiListing.getAllApis(javax.servlet.ServletConfig,javax.ws.rs.core.Application,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo) at parameter at index 0 
    SEVERE: Method, public javax.ws.rs.core.Response com.wordnik.swagger.jaxrs.JavaApiListing.getAllApis(javax.servlet.ServletConfig,javax.ws.rs.core.Application,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo), annotated with GET of resource, class com.wordnik.swagger.jaxrs.JavaApiListing, is not recognized as valid resource method. 
+0

你在使用Grizzly2吗?这似乎是泽西和灰熊2已知的问题,请参阅http://java.net/jira/browse/JERSEY-1047。 Swagger提出了一个要求解决(或解决)问题的拉取请求,但它所做的更改被稍后的拉取请求(https://github.com/wordnik/swagger-core/pull/64)取消。我通过切换到使用Jetty而不是Grizzly2来修复问题 – InPursuit 2013-02-19 01:26:07

+0

不,我正在使用Jetty。 – 2013-02-19 04:39:39

+0

当使用servlet而不是过滤器时它工作正常 - 请参阅https://www.bountysource.com/issues/38004856-jersey1-19-swagger-have-a-exception-for-com-sun-jersey-spi-注 - 错误 - errormessagesexception空 – koppor 2017-10-03 17:40:39

回答

2

我自己在Swagger中解决了这个问题;有一个pull request现在打开。