我正在开发一个简单的Web应用程序,它既提供又使用TomEE 1.7.4 plus上的REST服务,即包含Jax-RS的版本,等等。
我的软件提供的服务处理没有问题。但是,这个TomEE版本似乎没有带来Jax-RS客户端,因此需要添加一些客户端。
由于大多数人推荐Jersey作为Jax-RS客户端,我首先尝试了Jersey,但遇到了一些令人讨厌的错误。底线似乎是Jersey 2使用Java EE 7,而TomEE仍然是Java EE 6.虽然有较旧的Jersey 1.x版本可能是Java EE 6,但Jax-RS客户端在我看来才可用作为泽西岛2的一部分。因此:
问题1 :是否有任何在Tomee 1.7.4上运行的Jersey客户端版本,如果是这样,哪个Maven / Gradle指针可以获取它?
在下一步中,我发现TomEE已经带来了Apache CXF 2.6.16,但不是CXF客户端。所以我尝试了几个CXF客户端版本。将以下内容添加到我的gradle.config中:
providedCompile 'org.apache.cxf:cxf-rt-frontend-jaxrs:2.6.16'
providedCompile 'org.apache.cxf:cxf-rt-ws-policy:2.6.16'
(输入第一行最后是一个丢失的策略类,所以我不得不添加第二行。不要问我为什么Gradle依赖逻辑不能识别并自己解决这个依赖。)这个工作原理,但2.6.16已经很久了,CXF客户端2.x的API远远不能令人满意。特别是,似乎不可能在一次调用中获得状态,如果成功,则获得GET请求的内容。设置WebClient
之后,我可以调用getStatus
,它将产生HTTP响应状态作为int,或get(String.class)
将产生有效负载作为字符串(或其他)但不是两者兼而有之。这个API异常已经在CXF 3.x中得到了解决,但是这个版本再次与TomEE不相容。
另一种方法是将调用结果作为javax.ws.rs.core.Response
并自己扫描缓冲的阅读器。但在2016年,这不再是必要的了。出于同样的原因,我不认为裸HttpResponse
。
问题2 :CXF 2.x中是否有办法获取两个HTTP响应代码,如果可以的话,在一次调用中获得实际的GET结果,而无需处理原始传入数据流?
我搜索了几天的正确解决方案,我主要感到困惑,因为没有其他人似乎有这个问题。可能我错过了一些非常基本的东西。因此:
问题3 :是否有更适合在TomEE下实施REST客户端的软件包? (我知道这种类型的问题在这里不受欢迎。但请注意,我不是要求一个意见,而是要求一个具体经过验证的解决方案,在最好的情况下只需要一个Maven / Gradle指针。)
答案 0 :(得分:0)
可以在tomee上运行球衣,但需要一些高级的类加载配置。
获取JAXRS客户端的最简单有效的方法是使用构建它的CXF客户端。您可能有兴趣使用WebClient类(或直接使用JAXRSClientFactory)。更多关于http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-CXFWebClientAPI