2016-07-14 1 views
0

Я пытаюсь интегрировать Swagger в мой Джерси применение следующего руководства они обеспечивают: https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-Jersey-1.X-Project-Setup-1.5Кураж ApiListingResource не признаются в качестве действительного ресурса

Я использую Jersy v1.17, и я использую пользовательское приложение а не web.xml

Следующее - все, что у меня есть, в моем простом тестовом проекте, который терпит неудачу!

public class ResConfig extends DefaultResourceConfig { // custom app 
    public ResConfig() { 
     super(); 
     BeanConfig beanConfig = new BeanConfig(); 
     beanConfig.setVersion("1.0.2"); 
     beanConfig.setSchemes(new String[] { "http" }); 
     beanConfig.setHost("localhost:9998"); 
     beanConfig.setBasePath("/api"); 
     beanConfig.setResourcePackage("test.resources"); // the package containing my resource 
     beanConfig.setScan(true); 
    } 
} 

Простой ресурс У меня есть

@Path("hello") 
@Produces("application/json") 
public class Res { 
    public Res() { 
    } 


    @GET 
    public Response getHello() { 
     Result result = new Result(); // Result is annotated with XmlRootElement and contains one field String str; 
     result.setStr("hello"); 
     return Response.status(Status.OK).entity(result).build(); 
    } 
} 

Главное:

public static void main(String[] args) throws Exception { 
    ResConfig resConfig = new ResConfig(); 

    resConfig.getClasses().add(Res.class); 
    resConfig.getClasses().add(io.swagger.jaxrs.listing.ApiListingResource.class); 
    resConfig.getClasses().add(io.swagger.jaxrs.listing.SwaggerSerializers.class); 

    GrizzlyServerFactory.createHttpServer("http://localhost:9998/", resConfig); 

    System.in.read(); 
} 

ПОМ содержит следующее:

<dependencies> 
    <dependency> 
     <groupId>io.swagger</groupId> 
     <artifactId>swagger-jersey-jaxrs</artifactId> 
     <version>1.5.9</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>${jersey-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-json</artifactId> 
     <version>${jersey-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-servlet</artifactId> 
     <version>${jersey-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>${jersey-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey.contribs</groupId> 
     <artifactId>jersey-multipart</artifactId> 
     <version>${jersey-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-grizzly2</artifactId> 
     <version>${jersey-version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
    </dependency> 
</dependencies> 
сервер

Джерси Grizzly терпит неудачу на старте по исключение бросания:

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 io.swagger.jaxrs.listing.ApiListingResource.getListing(javax.ws.rs.core.Application,javax.servlet.ServletConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo,java.lang.String) at parameter at index 1 
    SEVERE: Method, public javax.ws.rs.core.Response io.swagger.jaxrs.listing.ApiListingResource.getListing(javax.ws.rs.core.Application,javax.servlet.ServletConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo,java.lang.String), annotated with GET of resource, class io.swagger.jaxrs.listing.ApiListingResource, is not recognized as valid resource method. 
    SEVERE: Missing dependency for field: javax.servlet.ServletContext io.swagger.jaxrs.listing.ApiListingResource.context 
Exception in thread "main" com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795) 
    at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:172) 
    at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:134) 
    at com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory.createHttpServer(GrizzlyServerFactory.java:243) 
    at com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory.createHttpServer(GrizzlyServerFactory.java:137) 

Я искал первые 2 страницы Google для ответа, но ничего не помогло!

ответ

0

Swagger использует API-интерфейсы Servlet, поэтому приложение ДОЛЖНО запускаться в среде сервлетов. Способ настройки Grizzly делает не настроен контейнер сервлетов. Это только HTTP-сервер.

Вместо этого вы хотите использовать зависимость jersey-grizzly2-servlet и используйте GrizzlyWebContainerFactory для загрузки приложения. Это создаст контейнер сервлетов.

<dependency> 
    <groupId>com.sun.jersey</groupId> 
    <artifactId>jersey-grizzly2-servlet</artifactId> 
    <version>1.19.1</version> 
</dependency> 

Map<String, String> initParams = new HashMap<>(); 
initParams.put("javax.ws.rs.Application", "com.package.ResConfig"); 
GrizzlyWebContainerFactory.create(uri, initParams); 
+0

хорошо теперь ошибка также включает в себя класс в Swagger: 'аннотацию GET ресурса, класс io.swagger.jaxrs.listing.AcceptHeaderApiListingResource, не признается действительным method' ресурсов –

Смежные вопросы