部署在Jboss 7.1上的Restful服务总是返回404

时间:2014-06-23 10:51:25

标签: jboss jax-rs resteasy

我在JBoss 7.1上部署RESTful Web应用程序(JAX-RS)时遇到问题 这是web.xml

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
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>HEODWS</display-name>
<servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>it.heod.ws.WSApplication</param-value>
</context-param>
<listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>

实现Web服务的类是:

@Path("/")
public class LoginService {

public LoginService() { 

}

@GET
@Path("helloworld")
@Produces(MediaType.TEXT_PLAIN)
public Response helloWorld() {
    Utils utils = Utils.getInstance();      
    utils.logExecutingMethod();

    ResponseBuilder responseBuilder = null;
    Response response = null;
    responseBuilder = Response.ok();
    responseBuilder.entity("Hello, world!"); 
    response = utils.completeResponse(responseBuilder);

    return (response);
}
}

WSApplication类是:

public class WSApplication extends Application {

    private Set<Object> singletons = new HashSet<Object>();
    private Set<Class<?>> empty = new HashSet<Class<?>>();
    public WSApplication(){
         singletons.add(new LoginService());
    }
    @Override
    public Set<Class<?>> getClasses() {
         return empty;
    }
    @Override
    public Set<Object> getSingletons() {
         return singletons;
    }
}

现在,如果我在我的JBoss 7.1本地副本上部署WAR文件,那么我将转到

http://localhost:8080/HEODWS/helloworld

服务行为正常,我得到了所需的响应,而如果我将其部署在另一台服务器上,运行JBoss 7.1,我会去

http://anotherhost:8080/HEODWS/helloworld

我找不到404。

任何人都可以理解为什么,即两台服务器之间有什么区别?也许我已经配置(过去)我的本地服务器,以至于我现在不记得了?

提前多多感谢, 詹卢卡

2 个答案:

答案 0 :(得分:1)

JBoss AS 7.1为您提供Java EE 6支持,因此您不需要使用RESTEasy提供的servlet调度程序(只有在Tomcat或Jetty上部署时才需要它)。

然后,您可以从web.xml中删除内容,并以纯Java形式声明您的JAX-RS Activator:

@ApplicationPath("/")
public class WSApplication extends Application {

private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> empty = new HashSet<Class<?>>();
public WSApplication(){
     singletons.add(new LoginService());
}
@Override
public Set<Class<?>> getClasses() {
     return empty;
}
@Override
public Set<Object> getSingletons() {
     return singletons;
}
}

您甚至可以删除WSApplication课程中的所有方法和字段(即,只有javax.ws.rs.core.Application的空子类)并使用LoginService注释您的@RequestScoped课程(或@Stateless)。

HTH。 泽维尔

答案 1 :(得分:0)

我实际上并不知道发生了什么,但通过在新项目中复制并粘贴所有类和web.xml并进行部署,它起作用了。我想这只是Eclipse疯了。谢谢大家的答案。