Почему Рестлет не может зарегистрировать JSON Converter? - PullRequest
3 голосов
/ 22 марта 2012

Я нахожусь в конце моего остроумия здесь - никогда не сталкивался с этой проблемой. Я нахожу относительно простым настроить быстрые приложения HelloWorld, чтобы убедиться, что Restlet 2.0 запущен и работает. Однако я сталкиваюсь со странным исключением, с которым я никогда не сталкивался раньше. У меня есть jar в моем classpath, а также в папке 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 находятся в моем classpath и в папках WEB-INF / lib:

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

Я строю проект с использованием Eclipse и развертываю на Glassfish. С web.xml и т. Д. Все в порядке, и ошибок при развертывании нет ... однако, этот раз заставил меня почесать голову.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2014

У меня была такая же или похожая проблема. Я хочу переопределить представление Джексона и удалить некоторые зависимости, которые он импортирует, но когда я это делаю, конвертер Джексона не обнаружен. Тогда я обнаружил, почему в моем случае: jar содержит папку META-INF / services с файлом с именем org.restlet.engine.converter.ConverterHelper. Вот как работает открытие.

Я пытался добавить эти файлы к моему пути, и это не сработало, не знаю. Итак, я зарегистрировал конвертер Джексона

Engine.getInstance().getRegisteredConverters().add(new JacksonConverter());
0 голосов
/ 21 декабря 2014

Похоже, ваше приложение не может найти библиотеку.Если вы создаете свое приложение в Eclipse, убедитесь, что библиотеки экспортируются?Перейдите в раздел Build Path и убедитесь, что флажок для экспорта библиотек установлен.

0 голосов
/ 23 марта 2012

По какой-то причине ошибка исчезла, когда я поменял файл с файлом из дистрибутива рестлета - в папке org.json версии Java EE для рестлета.

Кажется, что-то не хватает в организации.json.jar, который я получил с сайта json, не знаю ...

...