json - 为什么 ReSTLet 无法注册 JSON 转换器?

标签 json exception noclassdeffounderror restlet-2.0

我在这里束手无策 - 似乎从未遇到过这个问题。我发现设置快速 HelloWorld 应用程序以确保 ReSTLet 2.0 启动并运行相对容易。但是,我遇到了一个我以前从未遇到过的奇怪异常。我的类路径中有 jars 以及 WEB-INF/lib 文件夹,但由于某种原因,我不断收到以下异常:

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 文件夹中:

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

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

有什么想法吗?

最佳答案

我遇到了相同或类似的问题。我想覆盖 jackson 表示并删除它导入的一些依赖项,但是当我这样做时,未发现 jackson 转换器。 然后我找到了我的原因:jar 包含一个 META-INF/services 文件夹,其中包含一个名为 org.reSTLet.engine.converter.ConverterHelper 的文件。这就是发现的工作原理。

我已经尝试将这些文件添加到我的路径中,但没有成功,不知道。所以我最终注册了 Jackson 转换器

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

关于json - 为什么 ReSTLet 无法注册 JSON 转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815193/

相关文章:

c# - Streamreader 和 StackOverflowException

java - 解析 JSON 对象时出现 NoClassDefFoundError JsonAutoDetect

Android库项目滑动菜单抛出java.lang.NoClassDefFoundError : com. slidingmenu.lib.R$styleable

java - NoClassDefFoundError 和 ClassNotFoundException 之间的原因和区别是什么?

json - 对 Perl 数据结构的每个元素应用不同的函数

php - 如何将 MySQL 表转储到文件然后读取它并使用它代替数据库本身?

arrays - 带有 JSON 数据并访问数组和对象的 Handlebars 模板

java - 未捕获的分机错误 : You're trying to decode an invalid JSON String: Form Submission using Ext JS and Spring MVC

javascript - AngularJS:服务器端记录客户端错误

将项目集成到 Windows 7 后的 java.lang.NoClassDefFoundError