JAX-RS with Protocol Buffers教程应用程序



我正在研究REST和协议缓冲区atm。因此,我找到了[this][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;

为了参考,我将整个类粘贴在这里:

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 %spersonnHit 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:ResourceConfig实例不包含任何根资源类。线程"main"中出现异常com.sun.jsersey.api.container.ContainerException:资源配置实例不包含任何根资源类。在com.sun.jersy.server.impl.application.RootResourceUriRules。(RootResourceUriRules.java:99)在com.sun.jersy.server.impl.application.WebApplicationImpl._ininitiate(WebApplicationImpl.java:1300)在com.sun.jersy.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:163)在com.sun.jersy.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:769)在com.sun.jersy.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:765)在com.sun.jersy.spi.inject.Errors.processWithErrors(Errors.java:193)在com.sun.jersy.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765)在com.sun.jersy.api.contain.ContainerFactory.createContainer(ContainerFactory.java:172)在com.sun.jersy.api.contain.ContainerFactory.createContainer(ContainerFactory.java:134)在com.sun.jersy.api.contacter.grizzly.GrizzlyServerFactory.create(GrizzlyServerFactory.java:151)在com.sampulla.jaxrsprotobuf.tutorial.Main.createServer(Main.java:34)网址:com.sampulla.jaxrsprotobuf.tutorial.Main.Main(Main.java:21)

GrizzlyServerFactory.create采用两个参数:

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

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

有关GrizzlyServerFactory的另一个问题,请参阅将Jersey服务实例发布到Grizzly。

最新更新