JAX-RS需要一个战争模块吗?

djm*_*jmj 5 ear ejb jax-rs java-ee

JAX-RS需要网络模块WAR还是我做错了什么?

每个教程都声明要配置其余服务web.xml.但是在ejb-module中没有web.xml.我必须WAR为休息服务创建一个公正吗?

在我的ejb模块中,我想将EJB公开为休息服务,但无法使其工作.调用"localhost:8080/EjbModule/rest/test/method"会导致404

项目结构

- ear
    - EjbModule.jar
Run Code Online (Sandbox Code Playgroud)

将Bean公开为JAX-WS Web服务并在浏览器中进行测试是没有问题的.

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


@Stateless
@Path("/test")
public class TestService
{
    @Path("/method")
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String test()
    {
        return new Date().toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

环境:Glassfish 4.0

编辑:

创建单独WAR的休息服务按预期工作.

lef*_*loh 6

来自JAX-RS Specification 2.0 p.8:

2.3.2 Servlet

JAX-RS应用程序在.war文件中打包为Web应用程序.应用程序类打包在WEB-INF/classes或WEB-INF/lib中,所需的库打包在WEB-INF/lib中.有关Web应用程序打包的完整详细信息,请参阅Servlet规范.

如果要在Web容器中部署JAX-RS应用程序,这是标准方法.但是,该规范还指出应用程序可以在不同的容器中运行,如ejb-containers甚至Java SE环境.但对于其他容器,没有指定:

实现可以提供在其他类型的容器中托管JAX-RS应用程序的工具,这些工具不在本规范的范围内.