java.lang.ClassCastException Ошибка при получении ресурса сервера с помощью структуры Restlet - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь создать пример сервера REST с использованием фреймворка Restlet. Я скачал фреймворк рестлета из https://restlet.com/open-source/downloads/current/ и разархивировал в папку D: /restlet-jse-2.3.12 Windows. Теперь я создал Eclipse Maven Project без архетипа и добавил jar-файлы для перезапуска, выбрав project-> right click-> Java Build Path-> Libraries-> Add External Jars. Я ввел свой код на https://github.com/imaynotbereal/curly-sniffle/tree/master/restlet1

При создании кода я получил несколько ошибок NoClassDefFoundError, как показано ниже:

    Unable to register the helper org.restlet.ext.jdbc.JdbcClientHelper

java.lang.NoClassDefFoundError: org/apache/commons/dbcp/ConnectionFactory
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getConstructor(Unknown Source)
    at org.restlet.engine.Engine.registerHelper(Engine.java:896)
    at org.restlet.engine.Engine.registerHelpers(Engine.java:928)
    at org.restlet.engine.Engine.registerHelpers(Engine.java:968)
    at org.restlet.engine.Engine.discoverConnectors(Engine.java:654)
    at org.restlet.engine.Engine.<init>(Engine.java:491)
    at org.restlet.engine.Engine.register(Engine.java:382)

Я понял, что в D: /restlet-jse-2.3.12/lib есть подпапки, и мне пришлось добавить внутри них jar-файлы в путь сборки Java-> Библиотеки (jars в D: / restlet-jse -2.3.12 / lib / org.apache.commons.dbcp_1.3 папка для вышеуказанной ошибки)

Теперь сборка в порядке, все ошибки NoClassDefFoundError были устранены, и сервер начинает прослушивать порт 8081. Однако, когда я запрашиваю ресурс, используя URL-адрес ниже http://localhost:8081/product,, я получаю ошибку ClassCastException:

Exception or error caught in server resource

java.lang.ClassCastException: Product cannot be cast to org.eclipse.emf.ecore.EObject
    at org.restlet.ext.emf.EmfConverter.toRepresentation(EmfConverter.java:211)
    at org.restlet.service.ConverterService.toRepresentation(ConverterService.java:342)
    at org.restlet.resource.Resource.toRepresentation(Resource.java:945)
    at org.restlet.resource.ServerResource.doHandle(ServerResource.java:515)
    at org.restlet.resource.ServerResource.get(ServerResource.java:723)
    at org.restlet.resource.ServerResource.doHandle(ServerResource.java:603)
    at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662)
    at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
    at org.restlet.resource.ServerResource.handle(ServerResource.java:1020)
    at org.restlet.resource.Finder.handle(Finder.java:236)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Router.doHandle(Router.java:422)
    at org.restlet.routing.Router.handle(Router.java:641)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
    at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77)
    at org.restlet.Application.handle(Application.java:385)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Router.doHandle(Router.java:422)
    at org.restlet.routing.Router.handle(Router.java:641)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Router.doHandle(Router.java:422)
    at org.restlet.routing.Router.handle(Router.java:641)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.routing.Filter.doHandle(Filter.java:150)
    at org.restlet.routing.Filter.handle(Filter.java:197)
    at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
    at org.restlet.Component.handle(Component.java:408)
    at org.restlet.Server.handle(Server.java:507)
    at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)
    at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)
    at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:256)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
    at java.lang.Thread.run(Unknown Source)
2019-01-04  17:14:43    0:0:0:0:0:0:0:1 -   0:0:0:0:0:0:0:1 8081    GET /product    -   500 486 0   84  http://localhost:8081   Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36  -

Я проверил свои библиотеки, на которые есть ссылки, файлы jar в папке D: /restlet-jse-2.3.12/liborg.eclipse.emf_2.6 включены, поэтому маловероятно, что вышеуказанная ошибка вызвана отсутствием файлов jar.

Я проверил примеры в документации Restlet, но не могу понять, в чем проблема.

Я знаю, что попытка вручную добавить каждую зависимую банку в ссылки на сборку - это плохо, но в настоящее время я не знаю лучшего способа. Я был бы рад, если бы кто-то мог подсказать мне, как более эффективно добавить jar в приложение Java в этом сценарии.

...