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)
我的服务是否正确部署?我该怎么测试?
主要的问题是你选择了一个专门用于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)
也可以看看:
| 归档时间: |
|
| 查看次数: |
7462 次 |
| 最近记录: |