Клиент RestEasy внутри сервиса Tomee - PullRequest
0 голосов
/ 09 мая 2018

У меня есть клиент RestEasy, который я хотел бы использовать в службе REST, развернутой в Tomee. Все хорошо, но во время развертывания я получаю сообщение об ошибке

fable-service>  java.lang.IllegalArgumentException: class org.jboss.resteasy.plugins.providers.FormUrlEncodedProvider is not a SERVER provider
fable-service>  at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.isNotServerProvider(CxfRsHttpListener.java:491)
fable-service>  at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.providers(CxfRsHttpListener.java:434)
fable-service>  at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.configureFactory(CxfRsHttpListener.java:1009)
fable-service>  at org.apache.openejb.server.cxf.rs.CxfRsHttpListener.deployApplication(CxfRsHttpListener.java:577)
fable-service>  at org.apache.openejb.server.rest.RESTService.deployApplication(RESTService.java:481)
fable-service>  at org.apache.openejb.server.rest.RESTService.afterApplicationCreated(RESTService.java:288)
fable-service>  at org.apache.tomee.webservices.TomeeJaxRsService.afterApplicationCreated(TomeeJaxRsService.java:53)
fable-service>  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
fable-service>  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
fable-service>  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
fable-service>  at java.lang.reflect.Method.invoke(Method.java:498)
fable-service>  at org.apache.openejb.observer.ObserverManager$MethodInvocation.invoke(ObserverManager.java:406)
fable-service>  at org.apache.openejb.observer.ObserverManager$InvocationList.invoke(ObserverManager.java:521)
fable-service>  at org.apache.openejb.observer.ObserverManager.doFire(ObserverManager.java:111)
fable-service>  at org.apache.openejb.observer.ObserverManager.fireEvent(ObserverManager.java:100)
fable-service>  at org.apache.openejb.loader.SystemInstance.fireEvent(SystemInstance.java:134)
fable-service>  at org.apache.tomee.catalina.TomcatWebAppBuilder.afterStart(TomcatWebAppBuilder.java:1746)
fable-service>  at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:116)
fable-service>  at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
fable-service>  at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:395)
fable-service>  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
fable-service>  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
fable-service>  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
fable-service>  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
fable-service>  at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:988)
fable-service>  at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1860)
fable-service>  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
fable-service>  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
fable-service>  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
fable-service>  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
fable-service>  at java.lang.Thread.run(Thread.java:748)

Я пробовал играть с разными версиями RestEasy и Tomee, но ошибка не меняется. В настоящее время я использую RestEasy 3.5.1.Final внутри контейнера tomee: 8-jre-7.0.4-plus.

К сожалению, Google также не помогает мне разобраться в этом вопросе ...

1 Ответ

0 голосов
/ 02 марта 2019

У меня тоже все получилось. TomEE Plus 7.1.0 с RestEasy

Вот что нужно сделать:

  1. Чтобы избежать исключения "не является поставщиком СЕРВЕРА", необходимо установить системное свойство "openejb.jaxrs.fail-on-constrainedto" в значение false. Эта функция из класса CxfRsHttpListener.

  2. TomEE Plus 7.1.0 использует Java 8, но в папке "lib" находится jar с именем "javaee-api-7.0-1.jar". Когда TomEE запускается, он использует все jar-файлы в этой папке, независимо от того, что вы настроили в maven или gradle, как зависимости проекта. И есть большой шанс, что вы получите классы JavaEE 7.

    RestEasy 3.5.1.Final - это реализация спецификации JAX-RS-API 2.1. Итак, с JavaEE7 вы получите исключение NoSuchFieldError SERVER_SENT_EVENTS_TYPE в MediaType.

    Чтобы избежать этого, вам нужно использовать Resteasy 3.1.4.Final, который является реализацией спецификации JAX-RS-API 2.0.1

...