从OpenEJB调用JAX-RS 2请求:解决javax.ws.rs.client.Client加载问题
解决OpenEJB 4.7.2中加载
javax.ws.rs.client.Client的依赖问题 Alright, let's break down what you need to get the javax.ws.rs.client.Client class working in OpenEJB 4.7.2—since WebSphere 9 handles this out of the box, but OpenEJB doesn't include these classes by default.
核心原因
javax.ws.rs.client.Client 是JAX-RS 2.0+ API(Java RESTful Web服务API)的一部分。WebSphere 9预先集成了JAX-RS实现(要么是自身的,要么是Jersey/CXF这类第三方实现),所以你不需要额外配置;但OpenEJB 4.7.2默认没有包含这个客户端栈,因此需要手动添加必要的JAR包。
所需JAR包
你需要两类依赖:定义Client接口的JAX-RS API包,以及该API的具体实现包。这里提供两种常用选择:
选项1: 使用Jersey(Oracle官方参考实现)
将以下JAR包添加到应用的WEB-INF/lib目录,或者OpenEJB的全局lib文件夹中:
javax.ws.rs-api-2.1.1.jar(官方JAX-RS 2.1 API;如果你的环境是Java 7,改用2.0.x版本)jersey-client-2.35.jar(Jersey的客户端实现核心包)jersey-common-2.35.jar(Jersey依赖的核心工具包)jersey-media-jaxb-2.35.jar(可选,但处理XML payload时需要)
选项2: 使用Apache CXF
如果你偏好Apache的实现,添加以下包:
javax.ws.rs-api-2.1.1.jar(同上的API包)cxf-rt-rs-client-3.4.5.jar(CXF的REST客户端模块)cxf-core-3.4.5.jar(CXF核心工具包)cxf-rt-transports-http-3.4.5.jar(客户端的HTTP传输支持包)
注意事项
- 版本兼容性: 确保API和实现版本匹配。比如JAX-RS 2.1要求Java 8+,如果你的OpenEJB运行在Java 7环境,就选择JAX-RS 2.0和对应的兼容实现版本(例如Jersey 2.28.x)。
- 类路径位置: 把JAR包放在应用的
WEB-INF/lib下,只会让当前应用可用;添加到OpenEJB全局lib则会对所有部署的应用生效。
验证
添加完JAR包后重启OpenEJB,你遇到的org.apache.openejb.core.TempClassLo...类加载错误应该会消失——容器现在可以找到并加载javax.ws.rs.client.Client类及其配套实现了。
内容的提问来源于stack exchange,提问作者user1329339
相关产品推荐
相关产品推荐

