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)
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)
| 归档时间: |
|
| 查看次数: |
7280 次 |
| 最近记录: |