2014-12-16 3 views
4

Я пытаюсь выяснить, в чем проблема, создавая новый сервер Wildfly 8.2 с простым приложением restEasy 3.0.10.включение автоматического сканирования с помощью 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(); 
    } 
} 

который работает, но я никогда не указаны какие-либо классы ресурсов в Заявке 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 сервлета, мы должны определить класс приложения, который аннотированный с @ApplicationPath аннотацию. Если вы вернете пустой набор для классов и одиночек, ваша 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> 
+0

Можете ли вы показать 'HomePageResource.java' тоже? – pWoz

+0

уверен, я добавлю его на главный вопрос – kamiseq

ответ

3

Существует хороший tutorial by mkyong, который дает вам примеры того, как настроить приложение веб-службы с или без resteasy.scan.

Основываясь на вашем запросе, ваш номер web.xml пуст? Это означало бы resteasy.scan установлен в false, как на documentation:

resteasy.scan - Значение по умолчанию: ложь - Автоматическое сканирование WEB-INF/Lib банки и WEB-INF каталог/классы для обоих @Provider и JAX-RS классы ресурсов (@Path, @GET, @POST и т.д ..) и зарегистрировать их

Я обычно набор resteasy.scan к ложному и вручную зарегистрировать свои ресурсы, потому что иногда мои WEB-INF/lib банков были, содержащими провайдеры/ресурсы, и они сломали мой заявление. Вот конфигурация я использую:

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> 

конфигурации.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; 
    } 

} 
Смежные вопросы