在Jersey

时间:2015-04-22 13:38:46

标签: java jax-rs jersey-2.0 glassfish-4

我正在尝试使用泽西做下面的事情:

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;


public class route {
    private final Logger logger = LogManager.getLogger(route.class);
    private ResourceBundle errMsgs = ResourceBundle.getBundle(Master.ROUTE.getBundleName());

    @GET @Path("route/{v_route}")
    @Produces(MediaType.TEXT_PLAIN)
    public Response response(@PathParam("v_route") String vp_route) {
        String[] strings = {vp_route};
        if (Misc.isEmptyNull(strings)) {
            logger.error(errMsgs.getString("missingRouteID"));
            throw new WebException(errMsgs.getString("missingRouteID"));
        }
        return Response.ok("ok",MediaType.TEXT_PLAIN).build();
    }

    @POST @Path("route")
    @Produces(MediaType.TEXT_PLAIN)
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public Response postResponse(@FormParam("v_auditid") String p_auditid,
                                 @FormParam("v_tenant") String p_tenant){
   // removed to keep short 
   }

然而,即使是简单的cURL到达基本http://site/WebApi/route/parameter也会产生以下结果:

  

"" - 错误   报告

HTTP   状态404 - 未找到


类型状态   报告

消息未找到

描述   请求的资源不可用。


""

在您急于回答这个问题之前需要注意的两件重要事项:

  1. 没有出现任何内容 /opt/glassfish4/glassfish/domains/mydomain/logs/server.log
  2. 是的我 我确定http://site/WebApi是正确的前缀。我还有一个 在同一前缀下完美运行的jersey java类!

1 个答案:

答案 0 :(得分:2)

请参阅此处https://jersey.java.net/documentation/latest/deployment.html的jersey文档的第4.2,4.10和4.7.1.1节,您需要创建一个应用程序扩展类并将扫描程序添加到web.xml配置中以便使用带注释的类

请参阅我的博客示例

http://blog.vbranden.com/2015/03/creating-jersey-webservice-in-gatein.html

球衣有几种方法可以使用带注释的课程。此处的示例使用resourceconfig而不是application。还有一种方法可以在web.xml中完全执行此操作,但应用程序和资源配置可以提供更大的灵活性

使用应用程序扩展类

的示例

<强>的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>route</display-name>
    <servlet>
        <servlet-name>route</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.yourcompany.app.package.WSApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>route</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

应用程序扩展类 WSApplication.java

package com.yourcompany.app.package;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

import com.yourcompany.annotated.package.*;

public class WSApplication extends Application {

    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        s.add(route.class);
        return s;
    }
}

当然,包名称应该改为有意义的名称。并且任何其他路径注释类只是作为新项添加到HashSet中。