Why Restlet can't register the JSON converter?

I am on my way here - never faced this issue. It's pretty easy for me to set up HelloWorld swift apps to get Restlet 2.0 up and running. However, I encountered a strange exception that I have never encountered before. I have jars in my classpath as well as in 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

      

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

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

      

I was building a project using Eclipse and deploying to Glassfish. Web.xml etc. Everything is fine and no errors in deployment ... however, it made me scratch my head a little.

Any ideas?

+3


source to share


3 answers


I had the same or similar problem. I want to override the jackson view and remove some of the dependencies it imports, but when I do that, the Jackson converter is not found. Then I found why in my case: the jar contains a META-INF / services folder with a file named org.restlet.engine.converter.ConverterHelper

. How the discovery works.

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



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

      

+2


source


For some reason, the error went away when I changed the file to the Restlet distribution file - in the org.json folder of the Resthe Java EE version.



It seems that something in the org.json.jar was missing something that I have from the json site, I don't know ...

0


source


It looks like your application cannot find the library. If you build your application in Eclipse, make sure the libraries are exported? Go to the Build Path section and make sure the checkbox to export libraries is checked.

0


source







All Articles