我有一个返回JSONObjects和JSONArrays的休息服务
我想回来
import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONObject;
来自我的Rest服务。
前:
@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在应用程序内部启动我自己的休息服务
/ ** *开始服务 * / 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版本。)
SEVERE:无法实例化提供程序类com.sun.jersey.json.impl.provider.entity.JSONArrayProvider。处理将继续,但不会使用该课程 java.lang.IllegalAccessException:类com.sun.jersey.core.spi.component.ComponentConstructor无法使用修饰符“”访问类com.sun.jersey.json.impl.provider.entity.JSONArrayProvider的成员 at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95) at 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) at com.sun.jersey.core.spi.component.ComponentConstructor.getInstance(ComponentConstructor.java:140) 在com.sun.jersey.core.spi.component.ProviderFactory。 _getComponentProvider(ProviderFactory.java:159) at com.sun.jersey.core.spi.component.ProviderFactory._getComponentProvider(ProviderFactory.java:152) 在com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:146) at com.sun.jersey.core.spi.component.ProviderFactory.getComponentProvider(ProviderFactory.java:124) at 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) at 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)
答案 0 :(得分:1)
删除
resourceConfig.getClasses().add(JSONArrayProvider.class);
代码中的行。 JSONObject
和JSONArray
的提供商可通过META-INF\services
机制自动找到。使用这些Jettison类所需要做的就是将jersey-json.jar
和jettison.jar
放在类路径上。