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

use*_*259 0 java eclipse rest glassfish

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

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

服务:

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>";
}
 }
Run Code Online (Sandbox Code Playgroud)

在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.
Run Code Online (Sandbox Code Playgroud)

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

unw*_*ich 6

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

GlassFish 4集成了Jersey 2.x(这是提供REST功能的JAX-RS实现).本教程建议使用Jersey 1.x并打包使用Tomcat所需的Jersey库,因为Tomcat没有附带所需的库(这也适用于其他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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,该类UserInfo已添加到类列表中.如果您创建此类,请在此处添加其他端点类.

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

http://localhost:8080/RESTFullWS/rest/UserInfoService/name/bob
Run Code Online (Sandbox Code Playgroud)

这应该足够了.从文件夹中删除所有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>
Run Code Online (Sandbox Code Playgroud)

也可以看看: