为什么Restlet无法注册JSON转换器? [英] Why is Restlet unable to Register the JSON Converter?

查看:95
本文介绍了为什么Restlet无法注册JSON转换器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里很机智-似乎从未遇到过这个问题.我发现设置快速的HelloWorld应用程序以确保Restlet 2.0已启动并正在运行相对容易.但是,我面临着一个从未有过的奇怪异常.我的类路径以及WEB-INF/lib文件夹中都有jar,但是由于某些原因,我不断收到以下异常:

I'm at my wit's end here - never seemed to have faced this problem. I find it relatively easy to set up quick HelloWorld applications to ensure Restlet 2.0 is up and running. However, I'm facing a strange exception which I've never encountered before. I have the jars in my classpath as well as the WEB-INF/lib folder but for some reason I keep getting the following exception:

INFO: Unable to register the helper org.restlet.ext.json.JsonConverter
java.lang.NoClassDefFoundError: org/json/JSONException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at org.restlet.engine.Engine.registerHelper(Engine.java:718)
    at org.restlet.engine.Engine.registerHelpers(Engine.java:753)
    at org.restlet.engine.Engine.registerHelpers(Engine.java:793)
    at org.restlet.engine.Engine.discoverConverters(Engine.java:501)
    at org.restlet.engine.Engine.<init>(Engine.java:337)
    at org.restlet.engine.Engine.register(Engine.java:248)
    at org.restlet.engine.Engine.register(Engine.java:237)
    at org.restlet.engine.Engine.getInstance(Engine.java:149)
    at org.restlet.engine.Engine.getLogger(Engine.java:204)
    at org.restlet.Context.<init>(Context.java:160)
    at org.restlet.Context.<init>(Context.java:133)
    at org.restlet.ext.servlet.ServerServlet.createComponent(ServerServlet.java:422)
    at org.restlet.ext.servlet.ServerServlet.getComponent(ServerServlet.java:763)
    at org.restlet.ext.servlet.ServerServlet.init(ServerServlet.java:881)
    at javax.servlet.GenericServlet.init(GenericServlet.java:242)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1428)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:1060)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:187)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: org.json.JSONException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at org.glassfish.web.loader.WebappClassLoader.findClass(WebappClassLoader.java:959)
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1430)
    ... 45 more

以下jar位于我的类路径和WEB-INF/lib文件夹中:

The following jars are in my classpath and the WEB-INF/lib folders:

org.json.jar
org.restlet.jar
org.restlet.ext.servlet
org.restlet.ext.json

我正在使用Eclipse构建项目并在Glassfish上进行部署. web.xml等都很好,也没有部署错误……但是,这个让我抓了一段时间.

I'm building the project using Eclipse and deploying on Glassfish. The web.xml etc are all fine and no deployment errors...however, this one has had me scratching my head for a while.

有什么想法吗?

推荐答案

我遇到了相同或相似的问题.我想覆盖杰克逊表示并删除它导入的某些依赖项,但是当我这样做时,没有发现杰克逊转换器. 然后我发现了为什么:该jar包含一个META-INF/services文件夹,其中包含一个名为org.restlet.engine.converter.ConverterHelper的文件.这就是发现的原理.

I had the same or a similar problem. I want to override the jackson representation and remove some dependencies it imports but when I do, the jackson converter is not discovered. Then I've found why in my case: the jar contains a META-INF/services folder with a file called org.restlet.engine.converter.ConverterHelper. That's how discovery works.

我尝试将文件添加到我的路径中,但不起作用,不知道.所以我最终注册了Jackson转换器

I've tried to add that files to my path and it didn't work, don't know. So I ended up registering the Jackson converter

Engine.getInstance().getRegisteredConverters().add(new JacksonConverter());

这篇关于为什么Restlet无法注册JSON转换器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆