【发布时间】:2018-05-09 18:13:34
【问题描述】:
我有一个 RestEasy 客户端,我想在部署到 Tomee 的 REST 服务中使用。一切正常,但在部署时出现错误
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,但错误没有改变。目前我在 tomee:8-jre-7.0.4-plus Docker 容器中使用 RestEasy 3.5.1.Final。
很遗憾,Google 也没有帮助我解决这个问题...
【问题讨论】:
-
我得到了这个工作......但是以一种相当hackish的方式:(根本问题是Tomee正在尝试注册RestEasy客户端中打包的提供程序。他们不需要注册客户端工作。resteasy-client 可以从我尝试使用的客户端中排除...然后我创建了一个带有 resteasy 依赖项的 uber-jar 并将其放在 tome/lib 中。tome/lib 中的 jars 被排除在外扫描,所以提供者没有被注册。超级 jar 必须包含所有 reasteasy-client 依赖项,因为不允许 tome/lib 的类加载器回调到应用程序中。
标签: resteasy apache-tomee