使用带有wildfly 8.2的resteasy 3.0.10进行自动扫描

kam*_*seq 6 java jax-rs resteasy maven wildfly-8

我正在尝试用简单的restEasy 3.0.10应用程序设置新的Wildfly 8.2服务器时弄清楚我的问题.

我的网络应用程序非常容易.

src/main/
   java/my-package/
      RootApplication.java
      HomePageResource.java
   webapp/
      index.html
      WEB-INF/
         beans.xml
         web.xml
Run Code Online (Sandbox Code Playgroud)

web.xml和beans.xml看起来像这样

---- web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         metadata-complete="false">
</web-app>
---- beans.xml
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
      http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
Run Code Online (Sandbox Code Playgroud)

在RootApplication.java我有

@ApplicationPath("/app")
public class RootApplication extends Application
{
    private Set<Object> singletons = new HashSet<>();

    public RootApplication()
    {
        singletons.add(new HomePageResource());
    }

    @Override
    public Set<Object> getSingletons()
    {
        return singletons;
    }
}

// ResourceProvider is a simple class hiding getResource and createStreamer
@Path("/")
public class HomePageResource extends ResourceProvider
{
    private final static Logger logger = LoggerFactory.getLogger(HomePageResource.class);

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Response getHomePage()
    {
        final InputStream homePageResource = getResource("/static/view/home/home.html");
        return Response.ok(createStreamer(homePageResource)).build();
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个有效但我从未在Application中指定任何资源类,而RestEasy始终能够扫描WAR内容.如果我从RootApplication中删除所有内容,就像这样.

@ApplicationPath("/app")
public class RootApplication extends Application
{
}
Run Code Online (Sandbox Code Playgroud)

无论如何文档也说(https://docs.jboss.org/resteasy/docs/3.0.9.Final/userguide/html_single/)

由于我们没有使用jax-rs servlet映射,因此我们必须定义一个使用@ApplicationPath批注进行批注的Application类.如果您返回类和单例的任何空集,则将扫描您的WAR以查找JAX-RS注释资源和提供程序类.

这个简单的设置暗示我可能做错了什么?另一个问题是我可以删除beans.xml以使用guice DI,我明白这个问题与CDI/WELD无关.

我的pom.xml看起来像这样

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-bom</artifactId>
            <version>3.0.10</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>jaxrs-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

Dan*_*lay 4

mkyong有一个很好的教程,它为您提供了有关如何使用不使用resteasy.scan.

根据你的问题你web.xml是空的?这意味着按照文档resteasy.scan设置:false

resteasy.scan - 默认值: false - 自动扫描 WEB-INF/lib jar 和 WEB-INF/classes 目录中的 @Provider 和 JAX-RS 资源类(@Path、@GET、@POST 等)并注册它们

我通常设置resteasy.scan为 false 并手动注册我的资源,因为有时我的WEB-INF/libjar 包含提供程序/资源,它们破坏了我的应用程序。这是我正在使用的配置:

网络.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    id="WebApp_ID" version="3.0">
    <display-name>My application name</display-name>

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

    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.foo.bar.Configuration</param-value>
    </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

配置.java

package com.foo.bar;

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;

public class Configuration extends Application {

    public Configuration() {
    }

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(EntryPoint.class);
        return classes;
    }

}
Run Code Online (Sandbox Code Playgroud)