簡體   English   中英

使用帶有wildfly 8.2的resteasy 3.0.10進行自動掃描

[英]enabling auto scanning using resteasy 3.0.10 with wildfly 8.2

我正在嘗試用簡單的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>

mkyong提供了一個很好的教程,它提供了有關如何使用不使用resteasy.scan配置Web服務應用程序的resteasy.scan

根據您的問題,您的web.xml是空的? 這意味着根據文檔resteasy.scan設置為false

resteasy.scan - 默認值:false - 自動掃描@Provider和JAX-RS資源類(@ Path,@ GET,@ POST等)的WEB-INF / lib jar和WEB-INF / classes目錄並注冊它們

我通常將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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM