java - 带 Protocol Buffers 的 JAX-RS 教程应用程序

标签 java rest jersey protocol-buffers grizzly

我正在研究 REST 和 Protocol Buffer atm。 因此我找到了[这个][1]教程,它创建了一个示例应用程序

不幸的是,我遇到了要导入的库的问题,我无法解决:

在这一行中:

return GrizzlyServerFactory.create(uri, initParams);

我收到语法错误:

The method create(URI, ResourceConfig) in the type
GrizzlyServerFactory is not applicable for the arguments (URI,
Map<String,String>)

GrizzlyServerFactory 位于我导入的这个库中:

import com.sun.jersey.api.container.grizzly.GrizzlyServerFactory;

作为引用,我将整个类(class)粘贴在这里:

package com.sampullara.jaxrsprotobuf.tutorial;

import java.io.IOException;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;

import javax.ws.rs.core.UriBuilder;

import com.sun.grizzly.http.SelectorThread;
import com.sun.jersey.api.container.grizzly.GrizzlyServerFactory;
import com.sun.jersey.api.core.ResourceConfig;

public class Main {
    public static final URI BASE_URI = UriBuilder.fromUri("http://localhost/").port(9998).build();

    public static void main(String[] args) throws IOException {
        System.out.println("Starting grizzly...");
        URI uri = BASE_URI;
        SelectorThread threadSelector = createServer(uri);
        System.out.println(String.format("Try out %sperson\nHit enter to stop it...", uri));
        System.in.read();
        threadSelector.stopEndpoint();
    }

    public static SelectorThread createServer(URI uri) throws IOException {
        Map<String, String> initParams = new HashMap<String, String>();
        initParams.put("com.sun.jersey.config.property.packages", "com.sampullara");

        // error happens in next line - constructor doesnt exist with the given parameters
        return GrizzlyServerFactory.create(uri, initParams);
    }
}

编辑1:

我修改了代码,但仍然无法使其工作:

public static SelectorThread createServer(URI uri) throws IOException {
    //Map<String, String> initParams = new HashMap<String, String>();
    //initParams.put("com.sun.jersey.config.property.packages", "com.sampullara");
    // original code: return GrizzlyServerFactory.create(uri, initParams);

    DefaultResourceConfig rscfg = new DefaultResourceConfig();
    return GrizzlyServerFactory.create( uri , rscfg );
}

Eclipse 向我抛出以下运行时错误:

SCHWERWIEGEND: The ResourceConfig instance does not contain any root resource classes. Exception in thread "main" com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes. at com.sun.jersey.server.impl.application.RootResourceUriRules.(RootResourceUriRules.java:99) at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1300) at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:163) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:769) at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:765) at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193) at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765) at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:172) at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:134) at com.sun.jersey.api.container.grizzly.GrizzlyServerFactory.create(GrizzlyServerFactory.java:151) at com.sampullara.jaxrsprotobuf.tutorial.Main.createServer(Main.java:34) at com.sampullara.jaxrsprotobuf.tutorial.Main.main(Main.java:21)

最佳答案

GrizzlyServerFactory.create 需要两个参数:

  1. java.net.URI
  2. com.sun.jersey.api.core.ResourceConfig

使用Map<String, String>因为第二个参数是错误的。

参见Publishing Jersey service instance to Grizzly对于另一个涉及 GrizzlyServerFactory 的问题.

关于java - 带 Protocol Buffers 的 JAX-RS 教程应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364463/

相关文章:

java - JFreechart查看具体数据

java - JSR 311 是创建 RESTful 类型的 Web 服务所必需的吗?

java - 未在子资源方法上调用 Jersey NameBinding 过滤器

java - 使用java在ms word文件中创建任何一年的日历

java - 为什么在 java 中 android 第二次调用 web 服务时会创建新的 session

java - Jersey 2.0 通过代理获取 Post Call

ruby-on-rails - Rails 中的 RESTful DCI 上下文

php - 如何将基本 HTTP 身份验证的凭据存储到服务器端的数据库中?

具有两个不同版本 Jersey 服务器的 Java 客户端

tomcat - Jersey servlet 异常 tomcat