2014-05-12 26 views
0

我正在尝试在线上找到并部署到GlassFish 4.0的简单REST示例。我使用Eclipse(OEPE发行版)和GlassFish 4.0。当我尝试“运行 - >在服务器上运行”时,REST示例似乎已部署,但是我立即得到HTTP状态404 - 在Eclipse中尝试访问我的上下文根(http://localhost:8080/RESTFullWS/时未发现错误。在GlassFish 4.0上部署简单的REST示例

一切似乎都基于我一直在阅读的地方,但我仍然无法在浏览器中打开上下文根和服务端点。我想我在这里错过了一些明显的东西,但不知道发生了什么。

服务:

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>"; 
} 
} 

Web上下文GlassFish中-web.xml中定义:

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

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

是我的服务甚至被正确部署?我如何测试?

+0

如果你没有得到一个很好的答案,尝试forums.java.net – Brian

+0

您可以通过阅读显示在您的IDE中的服务器日志来查看它是否已部署... – unwichtich

+0

服务器日志显示正确部署的所有内容。谢谢。但是,当我尝试调用REST服务时,仍然会收到404。 – user3629259

回答

5

的主要问题是,你选择哪个旨在为Tomcat,这仅仅是一个servlet容器和像GlassFish的是不是一个完整的Java EE应用服务器的教程。

的GlassFish 4自带集成泽西2.x的(这是JAX-RS实现,其提供REST的东西)。如果你使用Tomcat,因为Tomcat没有附带所需的库(对于其他Java EE技术也是如此),例如使用Jersey 1.x并打包泽西库, 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> 

参见:

+0

上面列出的MyApplication类应该放在与UserInfo类(com.example.rest.MyApplication)相同的“包”中吗?或者没关系。 – user3629259

+0

没关系。 – unwichtich