找到JAX-RS资源的路径

时间:2016-04-03 15:40:50

标签: maven java-ee jax-rs ear

我无法找到访问部署到wildfly的JAX-RS资源的路径。

耳朵pom:

<parent>
    <artifactId>jee-services</artifactId>
    <groupId>org.mycompany</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<packaging>ear</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>ear</artifactId>
<dependencies>
    <dependency>
        <groupId>org.mycompany</groupId>
        <artifactId>ejb_book</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>ejb</type>
    </dependency>
</dependencies>

ejb_book pom:

<parent>
    <artifactId>jee-services</artifactId>
    <groupId>org.mycompany</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>ejb</packaging>
<artifactId>ejb_book</artifactId>

应用程序配置

@ApplicationPath("/resources")
public class ApplicationConfig extends Application {
}

资源

@Stateless
@Path("/books")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class BookResource extends AbstractFacade<Book> {
    @PersistenceContext
    private EntityManager entityManager;

    @GET
    @Path("/getBooks")
    public Book getBook() {
        return new Book();
    }

我认为问题在于我将ejb_book.jar打包到ear.ear(我收集所有其他ejb模块)

我试过了:

localhost:8080/ear/resources/books/getBooks

和许多其他组合,但没有一个有效。

应用程序可以很好地部署到WildFly服务器。

BTW:有没有一种工具可以帮助人们访问他们的JAX-RS资源?以IDE为例。所以我的问题不再是问题了。

1 个答案:

答案 0 :(得分:2)

根据JAX-RS 2.0规范, 2.3.2 Servlet

部分
  

JAX-RS应用程序在.war文件中打包为Web应用程序。

由于您未将应用程序打包为WAR模块,并且您的EAR中没有WAR模块,因此您不会为您的(Web)应用程序提供上下文根。

这阻止您通过所需方式访问REST API:

http://localhost:8080/<context-root>/resources/books/getBooks

作为解决方案,您可以将整个应用程序打包为WAR,将应用程序类放在WEB-INF / classes或WEB-INF / lib中,将所需的库放在WEB-INF / lib中,或者可以保持使用你的EAR,增加了一个WAR模块。