
OpenLiberty 官方仅支持 JAX-RS 2.0 及更高版本(如 2.1、3.0),不提供对已废弃的 JAX-RS 1.1 规范的任何功能支持;尝试通过 Maven 引入 jsr311-api 并启用 jaxrs-1.1 特性将导致配置失败或运行时异常。
openliberty 官方仅支持 jax-rs 2.0 及更高版本(如 2.1、3.0),**不提供对已废弃的 jax-rs 1.1 规范的任何功能支持**;尝试通过 maven 引入 `jsr311-api` 并启用 `jaxrs-1.1` 特性将导致配置失败或运行时异常。
OpenLiberty 是一个面向云原生与微服务架构设计的轻量级 Jakarta EE 和 MicroProfile 运行时,其核心设计理念之一是主动弃用过时规范,以保障安全性、可维护性与标准化演进。JAX-RS 1.1(JSR-311)早在 2009 年发布,已于 2013 年被 JAX-RS 2.0(JSR-339)正式取代,并在后续 Jakarta EE 版本中完成向 jakarta.ws.rs.* 命名空间迁移。因此,OpenLiberty 自诞生起即未实现、未打包、也未声明兼容 JAX-RS 1.1 —— 不存在“嵌入式隐藏支持”,也无 jaxrs-1.1 特性可用。
✅ 正确配置方式:使用 JAX-RS 2.0+ 特性
若需启用 RESTful Web Services 支持,请在 server.xml 的
<featuremanager><feature>servlet-3.1</feature><feature>transportSecurity-1.0</feature><!-- ✅ 推荐:JAX-RS 2.0(兼容 Jakarta EE 8 / Java EE 7) --><feature>jaxrs-2.0</feature><!-- 或升级至:JAX-RS 2.1(Jakarta EE 8+) --><!-- <feature>jaxrs-2.1</feature> --><!-- 或 Jakarta EE 9+ 推荐:RESTful Web Services 3.0(基于 jakarta.* 命名空间) --><!-- <feature>restfulWS-3.0</feature> --></featuremanager>
⚠️ 注意:jaxrs-2.0 与 jaxrs-2.1 特性自动包含并启用底层依赖(如 JSON-P、CDI 等必要组件),无需手动添加 cxf-rt-* 或 jersey-* 等第三方库。
❌ 错误实践与常见误区
- 错误引入 jsr311-api:1.1.1:该依赖与 OpenLiberty 内置的 JAX-RS 2.x 实现存在类冲突(如 javax.ws.rs.core.Response 冲突),极易引发 LinkageError 或 ClassCastException。
- *误删 `jaxrs-特性后仍能接收 PUT 请求**:您观察到的PUT调用“看似成功”实为 Servlet 层直接处理(例如HttpServlet.doPut()),而非 JAX-RS 资源路由;日志中org.apache.cxf.jaxrs.interceptor.JAXRSDefaultFaultOutInterceptor报错正说明 CXF 的 JAX-RS 拦截器被意外触发——根源在于应用代码中混用了 JAX-RS 1.1 注解(如@Path`)但容器未启用对应规范支持,导致行为不可控。
- 混淆 javaee-api 与运行时能力:javax:javaee-api:6.0 仅为编译期桩(stub),它不提供运行时实现,且其 JAX-RS 1.1 类型与 OpenLiberty 的 JAX-RS 2.x 运行时完全不兼容。
✅ 迁移建议:从 JAX-RS 1.1 升级到 2.0+
若您现有代码基于 JAX-RS 1.1,迁移成本通常较低,主要涉及以下变更:
| JAX-RS 1.1 | JAX-RS 2.0+(推荐) |
|---|---|
| @PathParam("id") String id | 语法不变(向后兼容) |
| Response.ok(entity).build() | ✅ 保持可用;新增 Response.ok().entity(entity).build() 链式调用 |
| Client client = Client.create() | ❌ 已废弃 → 改用 ClientBuilder.newClient() |
| @Provider + MessageBodyReader |
✅ 接口签名一致,但需确保实现类由 CDI 或 @ApplicationPath 应用自动发现 |
同时,请同步更新 Maven 依赖,移除所有 JAX-RS 1.1 相关依赖,改用 Jakarta EE 8/9+ 兼容 API:
<!-- ✅ Jakarta EE 8(推荐用于 OpenLiberty 21.0.0.12 及以上) --> <dependency><groupid>jakarta.platform</groupid><artifactid>jakarta.jakartaee-api</artifactid><version>8.5.0</version><scope>provided</scope></dependency>
或针对较新版本(如 OpenLiberty 23.0.0.9+)使用 Jakarta EE 9+:
<dependency><groupid>jakarta.platform</groupid><artifactid>jakarta.jakartaee-web-api</artifactid><version>9.1.0</version><scope>provided</scope></dependency>
总结
OpenLiberty 不支持、不兼容、也不允许启用 JAX-RS 1.1。所谓“嵌入式抽象”实为误解——其特性模型(feature model)严格遵循 Jakarta EE 规范演进路线,仅暴露经验证、安全、主流的标准实现。开发时应始终查阅 OpenLiberty 官方特性参考文档,以 jaxrs-2.0 或更高版本为起点构建 RESTful 服务,并及时清理遗留的 JSR-311 依赖与注解。坚持标准兼容性,是保障应用长期可维护与云平台适配性的关键基础。










