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

时间:2014-12-16 20:36:59

标签: java maven jax-rs resteasy 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

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>

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

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

@ApplicationPath("/app")
public class RootApplication extends Application
{
}

无论如何文档也说(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>

1 个答案:

答案 0 :(得分:4)

有一个很好的tutorial by mkyong,它为您提供了如何使用配置您的网络服务应用程序的示例,而不是resteasy.scan

根据您的问题,您的web.xml是空的?这意味着resteasy.scan根据documentation设置为false

  

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

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

<强>的web.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>

<强> Configuration.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;
    }

}