在GlassFish 4.0上部署简单的REST示例

时间:2014-05-12 16:29:00

标签: java eclipse rest glassfish

我正在尝试使用我在网上找到并部署到GlassFish 4.0的简单REST示例。我正在使用Eclipse(OEPE发行版)和GlassFish 4.0。当我尝试" Run As - >在Server"上运行REST示例似乎已部署,但我立即获得HTTP状态404 - 当Eclipse尝试联系我的上下文根(http://localhost:8080/RESTFullWS/时,在Eclipse中找不到错误。)

根据我一直在阅读的内容,似乎所有内容都已到位,但我仍然无法从浏览器中查看上下文根或服务端点。我想我在这里遗漏了一些明显的东西,但不确定发生了什么。

服务:

package com.example.rest;

@Path("UserInfoService")
public class UserInfo 
{
@GET
    @Path("/name/{i}")
@Produces(MediaType.TEXT_XML)

public String userName(@PathParam("i") String i) 
{
   String name = i;
   return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}

@GET 
@Path("/age/{j}") 
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("j") int j) 
{
   int age = j;
   return "<User>" + "<Age>" + age + "</Age>" + "</User>";
}
 }

在glassfish-web.xml中定义的Web上下文:

<glassfish-web-app>
    <context-root>/RESTFullWS</context-root>
</glassfish-web-app>

http://localhost:8080/RESTFullWS/UserInfoService/name/bob  -- gets me the 404.

我的服务是否正确部署?我该怎么测试?

1 个答案:

答案 0 :(得分:6)

主要问题是你选择了一个用于Tomcat的教程,它只是一个servlet容器,而不是像 GlassFish 这样的完整Java EE应用服务器。

GlassFish 4 集成了 Jersey 2.x (这是提供REST内容的JAX-RS实现)。本教程建议使用 Jersey 1.x 并打包使用 Tomcat 所需的Jersey库,因为 Tomcat 没有附带必需的libs(其他Java EE技术也是如此,例如JPA,JSF等)。

但解决方案应该很简单。

正如您在评论中发表的那样,您没有web.xml,这没关系,您的案例并不需要。

您需要一个代表REST应用程序的类并加载端点类。它看起来应该类似于:

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/rest")
public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(UserInfo.class);
        return classes;
    }
}

如您所见,类UserInfo已添加到类列表中。如果您创建了这样的附加端点类,请在此处添加。

注释javax.ws.rs.core.Application设置REST端点的根,并在主context-root之后添加。 URL应如下所示:

http://localhost:8080/RESTFullWS/rest/UserInfoService/name/bob

这应该足够了。从WEB-INF/lib文件夹中删除所有库,因为GlassFish包含您的示例所需的所有内容。如果你需要一个用于导入的lib,它应该足以依赖javaee-api包,你不需要将它与应用程序打包在一起。如果你使用Maven,你应该在pom.xml

中输入这样的条目
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>

另见: