【问题标题】:Multiple versions of REST web service - Implementation error多个版本的 REST Web 服务 - 实施错误
【发布时间】:2016-09-12 14:31:23
【问题描述】:

我正在尝试创建 web 服务的 v2。为此,我创建了一个新包 com.package.v2,其中声明了远程接口。如果我保持 v2 的类名与 v1 相同,那么在部署到 glassfish 服务器时会出错。

SEVERE|glassfish3.1.2|com.sun.jersey.spi.inject.Errors|_ThreadID=61;_ThreadName=Thread-2;|The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: The class com.package.v2.TestRESTServiceBA is an interface and cannot be instantiated.|#]

如果我将 v2 类重命名为不同的名称,那么一切正常。请告诉我如何让两个版本保持同名?

更多详情: INFO|glassfish3.1.2|com.sun.jersey.api.core.ScanningResourceConfig|_ThreadID=61;_ThreadName=Thread-2;|找到的根资源类:

接口 com.package.v2.TestRESTServiceBA

接口 com.package.v1.TestRESTServiceBA

添加代码:

版本 1 接口

package com.package.v1;

import java.util.Map;
import javax.ejb.Remote;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.package.common.dto.ResponseDTO;

@Remote
@Path("/v1/test")
public interface TestRESTServiceBA {

    @GET
    @Path("/headers")
    @Produces("application/json")
    ResponseDTO<Map<String, String>> getAllHeaders();
}

版本 1 实现

package com.package.v1;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.Stateless;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.package.common.dto.ResponseDTO;
import com.package.v1.TestRESTServiceBA;

@Stateless
public class TestRESTServiceBABean implements TestRESTServiceBA {

    private static final Log LOG = LogFactory.getLog(TestRESTServiceBABean.class);

    @Context
    private HttpServletRequest request;

    public TestRESTServiceBABean() {
    }

    @Override
    public ResponseDTO<Map<String, String>> getAllHeaders() {
        LOG.info("GET:v1/test/headers requested!");
        final ResponseDTO<Map<String, String>> response = new ResponseDTO<>();
        return response;
    }
}

版本 2 界面 包 com.package.v2;

import java.util.Map;
import javax.ejb.Remote;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.package.common.dto.ResponseDTO;

@Remote
@Path("/v2/test")
public interface TestRESTServiceBA2 {

    @GET
    @Path("/headers")
    @Produces("application/json")
    ResponseDTO<Map<String, String>> getAllHeaders();
}

第 2 版实施 包 com.package.v2;

import java.util.HashMap;
import java.util.Map;
import javax.ejb.Stateless;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.package.common.dto.ResponseDTO;
import com.package.common.model.DealerSpeedUser;
import com.package.v2.TestRESTServiceBA2;


@Stateless
public class TestRESTServiceBABean implements TestRESTServiceBA {

    private static final Log LOG = LogFactory.getLog(TestRESTServiceBABean2.class);

    @Context
    private HttpServletRequest request;

    public TestRESTServiceBABean2() {
    }

    @Override
    public ResponseDTO<Map<String, String>> getAllHeaders() {
        LOG.info("GET:v2/test/headers requested!");

        final ResponseDTO<Map<String, String>> response = new ResponseDTO<>();
        return response;
    }
}

【问题讨论】:

  • 你能提供代码吗?显然不足以帮助你

标签: web-services rest interface jersey ejb-3.0


【解决方案1】:

错误是告诉你它不能创建接口的实例,因为你在接口类上放了@Path@GET@Produces等注解。将这些注释移至 TestRESTServiceBABean 类。

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 2013-09-26
    • 2013-08-08
    • 2014-01-04
    • 2016-05-31
    • 2013-03-20
    • 1970-01-01
    • 2013-06-23
    • 2014-12-14
    相关资源
    最近更新 更多