Jboss Swagger集成(RestEasy 3.x+;WildFly)-404找不到资源

Jboss Swagger集成(RestEasy 3.x+;WildFly)-404找不到资源,jboss,jax-rs,wildfly,swagger,resteasy,Jboss,Jax Rs,Wildfly,Swagger,Resteasy,我正试图把招摇过市纳入我的项目中。 我在RestEasy 3.0.11中使用WildFly(10)server,我的资源是EJB驱动的,整个项目是用Ant构建的 狂妄依赖项由WildFly模块提供 问题是,当我尝试获取swagger.json(通过,但我也尝试了它的其他变体)时,浏览器中有一个404响应/空白页,并有以下控制台输出: 09:40:49,893 WARN [org.jboss.resteasy.core.ExceptionHandler] (Log4jLogger.java:13

我正试图把招摇过市纳入我的项目中。 我在RestEasy 3.0.11中使用WildFly(10)server,我的资源是EJB驱动的,整个项目是用Ant构建的

狂妄依赖项由WildFly模块提供

问题是,当我尝试获取swagger.json(通过,但我也尝试了它的其他变体)时,浏览器中有一个404响应/空白页,并有以下控制台输出:

09:40:49,893 WARN  [org.jboss.resteasy.core.ExceptionHandler] (Log4jLogger.java:135) failed to execute: javax.ws.rs.NotFoundException: Could not find resource for full path: http://localhost:8080/app/api/swagger.json
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:112)
at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:43)
at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48)
at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:444)
at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:234)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:171)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:86)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
web.xml配置如下所示:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app>

    <display-name>app</display-name>
    <description>app</description>

    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>

    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>*.json</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>SwaggerServlet</servlet-name>
        <servlet-class>my.example.app.examples.web.SwaggerServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet> 
</web-app>
启动应用程序时,servlet似乎正在初始化:

09:40:33,809 INFO  [my.example.app.examples.web.SwaggerServlet] (SwaggerServlet.java:40) Swagger servlet has been initialized
我的web资源正在正常工作并响应(在上)。ExampleModel类只是一个POJO:

@Api(value = "/app")

@Stateless
@Path("/app")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public class ExampleController {

    @GET
    @Path("/example/listOfExampleResources.json")
    @ApiOperation(value = "Get list of example resources", 
        notes = "Note test", 
        response = ExampleModel.class,
        responseContainer = "list"
    )
    @Produces("application/json")
    public List<ExampleModel> getList() {
        List<ExampleModel> list = new ArrayList<ExampleModel>();
        ExampleModel example = new ExampleModel();
        example.setName("Hello");
        list.add(example);
        return list;
    }
}
@Api(value=“/app”)
@无国籍
@路径(“/app”)
@使用({“应用程序/json”})
@产生({“应用程序/json”})
公共类示例控制器{
@得到
@路径(“/example/listOfExampleResources.json”)
@ApiOperation(value=“获取示例资源列表”,
notes=“Note test”,
响应=ExampleModel.class,
responseContainer=“列表”
)
@生成(“应用程序/json”)
公共列表getList(){
列表=新的ArrayList();
ExampleModel示例=新的ExampleModel();
示例.setName(“Hello”);
列表。添加(示例);
退货清单;
}
}
我尝试过其他参数和配置方法,例如通过自定义应用程序类进行配置、在web.xml中定义servlet、手动提供资源。 我也在用旧版本(3.0.4)替换RestEasy,但总的来说,我还是得到了404

您知道如何获取swagger.json资源吗


谢谢您的时间。

我也为此挣扎了一段时间,但未能以我满意的方式使其工作。我想我在应用程序中定义列表时可能有点运气,但这将是一个真正的痛苦,谢谢你的回答。这似乎是一个众所周知的问题:
@Api(value = "/app")

@Stateless
@Path("/app")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public class ExampleController {

    @GET
    @Path("/example/listOfExampleResources.json")
    @ApiOperation(value = "Get list of example resources", 
        notes = "Note test", 
        response = ExampleModel.class,
        responseContainer = "list"
    )
    @Produces("application/json")
    public List<ExampleModel> getList() {
        List<ExampleModel> list = new ArrayList<ExampleModel>();
        ExampleModel example = new ExampleModel();
        example.setName("Hello");
        list.add(example);
        return list;
    }
}