在Glassfish 4.1上运行的Jersey ReST应用程序,端点给出404

时间:2015-02-12 18:17:04

标签: java rest maven jersey-2.0 glassfish-4

我在GlassFish 4.1上运行了Jersey(2.15)ReSTful应用程序,并再次运行在Mac OS X(10.9.5)上。让一个示例应用程序运行和一个端点产生时髦的东西应该是轻而易举的吗?现实是,这似乎是一个巨大的头痛。应用程序可以部署,但ReSTful端点不可用,即它们返回404。

日志告诉我一切正常。相同的应用程序(带有一点库调整)在Tomcat 7中可以很好地工作。我对Glassfish不太了解,而且它正在努力提出解决方案。

pom.xml具有以下依赖关系:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.16</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.2.11</version>
    <scope>provided</scope>
</dependency>

我的班级:

@Path("/helloworld")
public class HelloWorld {

    @GET
    @Produces("text/plain")
    public String getClichedMessage() {
        // Return some cliched textual content
        return "Hello World";
    }

}

web.xml(虽然似乎不需要):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>example</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

管理工具告诉我app正在运行,可以在/ RCKMS-RS找到。因此,调用ReSTful端点应该是/ RCKMS-RS / rest / helloworld的HTTP GET

部署很好,没有错误。我想我的问题是:Glassfish中是否有一些配置需要更改才能公开这些端点?

1 个答案:

答案 0 :(得分:0)

不确定如何让它在Tomcat中运行,但这就在这里

<param-name>com.sun.jersey.config.property.packages</param-name>

会阻止它在任何地方工作。这不是泽西岛2的属性。如果您使用带有前缀com.sun.jersey任何,并且您使用的是泽西2,那么假设出现了问题。一切都是泽西2开始org.glassfish.jersey,所以你应该使用的正确属性是

<param-name>jersey.config.server.provider.packages</param-name>

  

web.xml(虽然似乎不需要):

是的,一个不是必需的,但是你需要一个Application/ResourceConfig子类,如hereApplication Deployment and Runtime Environments