2016-07-14 5 views
0

として認識されませんむしろweb.xml闊歩ApiListingResourceは、私は、彼らが提供するガイド以下の私のジャージーアプリケーションに闊歩を統合しようとしている有効なリソース

次は、私が失敗した私の簡単なテストプロジェクトにあるすべてです!

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(); 
} 

POMには以下が含まれています。

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

ジャージーグリズリーサーバがで起動に失敗しますスロー例外:

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) 

私はGoogleの最初の2ページを検索しましたが、何の助けにもなりませんでした。

答えて

0

スワッガーはサーブレットAPIを使用するため、アプリケーションはサーブレット環境で実行する必要があります。あなたが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

エラーも闊歩内のクラスが含まれています '、リソース、クラスio.swagger.jaxrs.listing.AcceptHeaderApiListingResourceのGETで注釈さ は有効なリソースmethod'として認識されません –

関連する問題