2012-03-22 58 views
3

我在我的智慧結束 - 似乎從未遇到過這個問題。我發現設置快速的HelloWorld應用程序以確保Restlet 2.0已啓動並運行相對容易。但是,我面臨着一個我從未遇到過的奇怪異常。我在我的類路徑罐子以及在WEB-INF/lib文件夾,但由於某種原因,我不斷收到以下異常:爲什麼Restlet無法註冊JSON轉換器?

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 

以下罐子是我的類路徑和WEB-INF/lib目錄文件夾:

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

我正在使用Eclipse構建項目並部署在Glassfish上。 web.xml等都很好,沒有部署錯誤...但是,這個讓我撓了一陣頭腦。

任何想法?

回答

2

我有同樣的或類似的問題。我想覆蓋傑克遜表示並刪除它導入的一些依賴關係,但是當我這樣做時,傑克遜轉換器沒有被發現。 然後我發現爲什麼在我的情況下:jar包含一個名爲org.restlet.engine.converter.ConverterHelper的文件的META-INF/services文件夾。這就是發現的工作原理。

我試圖將文件添加到我的路徑,它不工作,不知道。所以我結束了註冊傑克遜轉換器

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

出於某種原因,錯誤走了,當我從分佈的Restlet交換與文件 - 中的的Restlet Java EE版本的org.json文件夾。

看來也許缺了點什麼的,我從JSON網站有org.json.jar,不知道...

+1

哦,我發現爲什麼在我的情況下:該jar包含一個名爲org.restlet.engine.converter.ConverterHelper的文件的META-INF/services文件夾。這就是發現的工作原理 – ZiglioUK 2014-02-12 01:07:24

0

它看起來像你的應用程序無法找到一個庫。如果您在Eclipse中構建應用程序,是否確保這些庫正在導出?轉到構建路徑部分,並確保選中用於導出庫的複選框。