Jersey和JAX-RS RI2-缺少HttpServerFactory

10

我有一个简单的项目来测试JAX-RS服务。昨天我下载了jersey-1.7.1并使用了com.sun.jersey.api.container.httpserver.HttpServerFactory和com.sun.net.httpserver.HttpServer创建了一个http服务器,以在eclipse内部测试我的服务(不需要重量级容器)。

今天,我下载了最新的jersey jars(jaxrs-ri),但是HttpServerFactory已经不存在了。看起来他们在1.7.1 => 2.0之间删除了这个类,但我在弃用部分中找不到它。我在API部分看到了grizzly2类(也许这就是现在应该使用的东西),但jaxrs-ri捆绑包中没有任何一个jar提供这些类。我下载了jersey-grizzly 1.12 jar,但它只有com/sun/jersey/server/impl/container/grizzly2/GrizzlyContainer类,没有实现。

所以问题是

1-如果1.7.1的方法被弃用了,使用来自jersey下载页面的最新jaxrs-ri jars,创建一个简单的http服务器来进行命令行测试的推荐方法是什么?需要下载/包含哪些jar,可能还需要一个简短的代码示例?

2-关于使用java创建简单REST服务的整个文档都很混乱。那么你如何找到正确的信息呢?

(真的,这不是一个笑话。也许这需要一个单独的博客文章-看看这个混乱的API,弃用功能上没有信息,实现差异,例如CXF vs. jersey,API 1.x vs API 2.0,Glassfish容器v x.y vs. Tomcat,版本x of y vs.版本x2 of y,servlet 3.0将具有此文件,您是否正在扩展Application?)

更新

使用JDKHttp服务器的工作示例。

package test.jersey;

import java.net.URI;
import com.sun.net.httpserver.HttpServer;
import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory ;
import org.glassfish.jersey.server.ResourceConfig;

public class ConsoleServerV2 {

    static final String BASE_URI = "http://localhost:9099/";

    public static void main(String[] args) throws Exception {
        HttpServer server = null ;

        ResourceConfig rc = new ResourceConfig(rest.Service.class);
        URI endpoint = new URI(BASE_URI);

        server = JdkHttpServerFactory.createHttpServer(endpoint,rc);
        System.out.println("console v2.0 : Press Enter to stop the server. ");
        System.in.read();
        server.stop(0);

    }
}
3个回答

10
你可以使用JdkHttpServerFactory,它可在jersey-container-jdk-http-2.0.jar中找到:

jersey-container-jdk-http-2.0.jar

ResourceConfig rc = new ResourceConfig(HelloWorldResource.class);
HttpServer server = JdkHttpServerFactory.createHttpServer(baseUri, rc);

无需调用 server.start()!


谢谢。可能这是最简单的方法。我已经更新了问题,并提供了一个可工作的示例。 - rjha94
我正在尝试运行代码,但在运行时遇到了NoClassDefFoundError: com/google/common/base/Function错误。 - ash
找到它了,http://mirrors.ibiblio.org/pub/mirrors/maven2/com/google/collections/google-collections/0.9/google-collections-0.9.jar,但看起来像是一个兔子洞...又是另一个缺失的依赖。哎。 - ash

2

嗨@alexey,我会尝试的。你有一个代码示例来测试使用Grizzly嵌入式服务器的Jersey吗? - rjha94
当然,在Jersey工作区中有很多示例,例如helloworld: https://github.com/jersey/jersey/tree/master/examples/helloworld - alexey
抱歉,还有一个问题,为什么需要使用Grizzly HTTP Servlet Server?Servlet是必需的吗?我不能只使用HTTP服务器吗? - rjha94
Servlet不是必需的,只是为了保险起见,以防您需要它。这里有一个纯HTTP服务器包:http://search.maven.org/remotecontent?filepath=org/glassfish/grizzly/grizzly-http-server-core/2.3.3/grizzly-http-server-core-2.3.3.jar - alexey

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接