0

我有一个返回 JSONObjects 和 JSONArrays 的休息服务

我正在尝试返回

导入 org.codehaus.jettison.json.JSONArray;导入 org.codehaus.jettison.json.JSONObject;

从我的休息服务。

前任 :

 @Path("/SubgraphIds")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JSONArray getSubgraphIds() {

       .......

    }

    @Path("/Subgraph/id={id}/startTime={startTime}/duration={duration}")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JSONObject getSubgraph(@PathParam("id")String id ,@PathParam("startTime")String startTime ,
                              @PathParam("duration")String duration) {

    }

在我的应用程序中,我使用 com.sun.jersey.api.container.httpserver 在应用程序内部启动我的 Own Rest 服务

/** * 启动服务 */ this.resourceConfig = new PackagesResourceConfig(restPkg);

        resourceConfig.getFeatures().put(ClientConfig.FEATURE_DISABLE_XML_SECURITY, true);
        resourceConfig.getProperties().put(ClientConfig.FEATURE_DISABLE_XML_SECURITY, "true");
        resourceConfig.getClasses().add(JSONArrayProvider.class);
        resourceConfig.getClasses().add(JSONArrayProvider.class);
        this.httpServer = HttpServerFactory.create(getURL(port), resourceConfig);

但是在启动服务器时出现以下错误。任何有关解决此问题的想法都将受到高度赞赏。(我正在使用 jersey-core、jersey-server、jersey-json 1.1.1-ea 版本)。

严重:无法实例化提供程序类 com.sun.jersey.json.impl.provider.entity.JSONArrayProvider 类。处理将继续,但不会使用该类 java.lang.IllegalAccessException: Class com.sun.jersey.core.spi.component.ComponentConstructor can not access a member of class com.sun.jersey.json.impl.provider.entity .JSONArrayProvider 带有修饰符 "" 在 sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95) 在 java.lang.Class.newInstance0(Class.java:368) 在 java.lang.Class.newInstance(Class.java:327 ) 在 com.sun.jersey.core.spi.component.ComponentConstructor。getInstance(ComponentConstructor.java:152) 在 com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:140) 在 com.sun.jersey.core.spi.component.ProviderFactory。_getComponentProvider(ProviderFactory.java:159) 在 com.sun.jersey.core.spi.component.ProviderFactory._getComponentProvider(ProviderFactory.java:152) 在 com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory. java:146) 在 com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:124) 在 com.sun.jersey.core.spi.component.ProviderServices.getComponent(ProviderServices.java:190)在 com.sun.jersey.core.spi.component.ProviderServices.getProvidersAndServices(ProviderServices.java:120) 在 com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:153) 在 com.sun .jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:145) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:609) 在 com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:168) 在 com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:130) 在 com.sun.jersey .api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:169)

4

1 回答 1

1

去除

resourceConfig.getClasses().add(JSONArrayProvider.class);

代码中的行。通过机制自动找到JSONObject和的提供者。要使用这些 Jettison 类,您需要做的就是将其放入您的类路径中。JSONArrayMETA-INF\servicesjersey-json.jarjettison.jar

于 2013-07-18T13:04:11.607 回答