Apache Olingo 5.0.0 介绍与选型指南

Apache Olingo 5.0.0 介绍与选型指南:已退役的 OData 协议 Java 实现(2025-12 决议退役、2026-06 完成向 Apache Attic 迁移),讲清 OData V2/V4 双产品线架构、最后稳定版 5.0.0 的模块组成与归档制品获取路径,并以 ASP.NET Core OData、odata4j、SAP CAP 为替代方案给出量化选型对比,不建议新项目采用。

Apache OlingoOlingoApacheJavaOData2026/10/19

Apache Olingo 5.0.0 介绍与选型指南

⚠️ 项目已退役,请勿用于新项目。 Apache Olingo 于 2025-12 作出退役决议、2026-06 完成向 Apache Attic 的迁移,最后稳定版为 5.0.0(OData V4 线),此后不再有任何维护与安全更新。本文为认知篇,面向存量系统维护者与选型评估者,全部论断基于 Apache Attic 页面、Maven Central 元数据与官方站点联网溯源(查询日期 2026-10-19),不做本地安装实测。

一、信息基准

本节给出本文全部关键数据的基准与来源,所有版本号与状态信息均在 2026-10-19 联网核验。

  • 查询日期:2026-10-19。
  • 基准版本:5.0.0(OData V4 产品线的最后稳定版;OData V2 产品线最后稳定版为 2.0.13)。Olingo 已退役,5.0.0 即为该项目的最终版本,不存在更新版本。
  • 维护方:原为 Apache 软件基金会顶级项目(TLP);2025-12 经董事会决议退役,2026-06 完成向 Apache Attic 的迁移(工单 ATTIC-251),现为无任何维护活动的归档项目。
  • 许可:Apache License 2.0(ASF 项目统一许可)。
  • 发行形态:Java 库(Maven Central 制品)+ 归档源码发行件(archive.apache.org)。
  • 版本依据(含来源 URL,查询日期 2026-10-19):

💡 说明:Olingo 的 GitHub 仓库(github.com/apache/olingo)在退役迁移后已不可访问(2026-10-19 实查返回 404),社区星标数据因此不可得;官方源码归档位置以 Attic 页面列出的 Apache gitbox 仓库为准。

二、软件概述

2.1 项目定位

Apache Olingo 是一个用 Java 实现 OData(Open Data Protocol,开放数据协议) 的库,同时覆盖 OData 的 client(客户端)与 server(服务端)两侧能力。OData 是由 OASIS 标准化的基于 REST 与 HTTP 的数据访问协议,通过统一的 $metadata 描述、CRUD 动词与查询选项(如 $filter、$select、$expand)暴露结构化数据服务,微软 SharePoint/PowerBI 生态与 SAP 产品线均有广泛使用。

💡 技术拓展:OData 协议存在两个主要版本代际——

版本标准化状态主要差异Olingo 支持情况
OData 2.0微软事实标准(未成 OASIS 标准)元数据模型较简单,生态最早olingo-odata2 产品线(终版 2.0.13)
OData 4.0OASIS 正式标准类型系统与批处理更完整,JSON 格式化olingo-odata4 产品线(终版 5.0.0)
OData 4.01/4.1OASIS 后续修订补充 JSON 批处理等能力Olingo 未跟进

本篇介绍的 5.0.0 属于 OData V4 线,是 Olingo 的最终产品形态。

2.2 双产品线与终版

Olingo 长期维护两条产品线:OData 2.0 线(制品前缀 olingo-odata2-*,终版 2.0.13,2023-10 发布)与 OData 4.0 线(制品前缀 odata-*,终版 5.0.0,2023-12 发布)。两条线在退役决议前均已多年处于低活跃状态:4.x 系列在 2023 年完成 4.10.0 后转向 5.0.0,此后再无发布。2025-12 董事会决议将其送入 Attic,2026-06 迁移完成,项目官网与归档制品仍可访问,但社区邮件列表、缺陷跟踪均已冻结。

三、核心架构

3.1 OData V4 线模块结构

以 Maven Central 上 org.apache.olingo groupId 下的制品组织(目录结构实查于 2026-10-19,来源:https://repo1.maven.org/maven2/org/apache/olingo/ ):

  • odata-commons-api / odata-commons-core:客户端与服务端共享的通用类型与工具,包括 OData 版本协商、URL 解析、序列化基础。
  • odata-server-api / odata-server-core:服务端实现。核心抽象是 EDM(Entity Data Model,实体数据模型)——通过实现 CsdlAbstractEdmProvider 提供实体类型、实体集、导航属性的元数据,由调度器(ODataDispatcher)将 HTTP 请求路由到对应的处理器(EntityProcessor 等),开发者按 ODataHandler 管线接入。
  • odata-client-api / odata-client-core / odata-client-proxy:客户端实现。odata-client-core 负责构造请求与解析响应(含 $metadata 解析与类型化对象生成),odata-client-proxy 提供基于动态代理的强类型访问方式。
  • odata-karaf / odata-karaf-features:面向 Apache Karaf(OSGi 运行环境)的部署特性包。

3.2 OData V2 线模块结构

V2 线以 olingo-odata2-* 前缀组织,核心为 olingo-odata2-api(服务端 SPI 与模型抽象)与 olingo-odata2-core(实现),另有面向 JPA 的注解处理器(olingo-odata2-annotation-processor-*),可把 JPA 实体直接映射为 OData 2.0 服务。该线长期只维护 client 部分(client-api/client-core 在 2019-02 仍有目录更新记录,终版停在 2.0.13)。

3.3 架构特征小结

Olingo 是纯 Java 库,无独立进程与运行时控制面:服务端侧以 Servlet(或等价 HTTP 框架)承载,客户端侧以普通依赖嵌入应用。这决定了它的部署形态简单,但也意味着协议合规、安全修补、性能优化全部依赖上游库版本——退役后这一点成为不可修复的固有风险。

四、关键特性

以下特性依据官方站点(olingo.apache.org)与 Maven Central 制品清单归纳(查询日期 2026-10-19):

  • OData V4 协议核心支持:元数据文档($metadata)、实体 CRUD、系统查询选项($filter/$select/$expand/$orderby/$top/$skip)、批处理与 JSON 格式化,官方文档入口 https://olingo.apache.org/doc/odata4/index.html 。
  • OData V2 协议支持:完整的 V2 生产者与消费者能力,含 JPA 到 OData 2.0 的注解处理器映射,官方文档入口 https://olingo.apache.org/doc/odata2/index.html 。
  • JavaScript 端库(odatajs):官方还维护过浏览器端 OData 消费库 datajs 的衍生版 odatajs(归档目录 archive.apache.org/dist/olingo/odatajs/ 可查)。
  • Karaf/OSGi 部署支持:V4 线提供 Karaf 特性包。
  • 固有限制(退役导致):零安全更新、零缺陷修复;未跟进 Jakarta EE 命名空间迁移(V4 线面向 Java 8 时代的 javax.servlet 生态)、未跟进 OData 4.01/4.1 修订、JDK 兼容性停留在旧版本。存量系统若无法升级,需自行承担补丁维护责任。

五、快速上手(获取归档制品路径)

Olingo 已退役,上手路径即"从归档渠道获取最后稳定版制品",不涉及任何新部署形态。以下坐标与 URL 均实查有效(查询日期 2026-10-19)。

1)Maven Central 依赖坐标(OData V4 线,最后版 5.0.0):

<!-- 服务端实现(含 api) -->
<dependency>
    <groupId>org.apache.olingo</groupId>
    <artifactId>odata-server-core</artifactId>
    <version>5.0.0</version>
</dependency>
<!-- 客户端实现(含 api) -->
<dependency>
    <groupId>org.apache.olingo</groupId>
    <artifactId>odata-client-core</artifactId>
    <version>5.0.0</version>
</dependency>

2)Maven Central 依赖坐标(OData V2 线,最后版 2.0.13):

<dependency>
    <groupId>org.apache.olingo</groupId>
    <artifactId>olingo-odata2-core</artifactId>
    <version>2.0.13</version>
</dependency>

3)源码归档:Apache 归档发行目录 https://archive.apache.org/dist/olingo/ 下按产品线分为 odata2/、odata4/、odatajs/ 三个子目录(另含签名用 KEYS 文件),各子目录内存放对应版本的 source-release 归档包,用于离线审阅与自建重打包。

4)学习材料:官方教程仍可访问——V4 教程见 https://olingo.apache.org/doc/odata4/index.html (服务端与客户端系列教程),V2 教程见 https://olingo.apache.org/doc/odata2/index.html 。

⚠️ 注意:以上制品仅适用于存量系统的兼容性验证与维护评估。任何"基于 Olingo 5.0.0 启动新开发"的方案都意味着从第一天起就使用一个无安全维护的协议库,不建议。

六、适用场景与限制

适用场景(仅存量):

  • 存量 Java 系统仍以 Olingo 作为 OData server/client 运行,需要理解其模块与版本边界以制定维护策略;
  • 遗留系统对接老旧 OData 2.0 服务(V2 线 2.0.13)时的协议行为确认;
  • 合规与安全审计中确认"项目已退役、最后版本、无补丁渠道"这一事实基线。

限制与明确建议:

  • 不建议任何新项目采用:项目已入 Attic,CVE 不会得到修复,OData 4.01/4.1、Jakarta EE、新版 JDK 均不支持;
  • 若确需在 Java 生态消费/生产 OData,应评估替代实现(见第七章)或改用普通 REST/gRPC 自行建模;
  • 若选择留在 OData 生态,.NET 侧的 ASP.NET Core OData 活跃度远高于任何 Java 实现;Java 侧可评估 odata4j(但同样停更)或以 SAP CAP 为代表的框架级方案;
  • 对外暴露的 OData 服务若仍由 Olingo 承载,建议尽快制定迁移计划并在网关层增加针对性防护。

七、同类选型对比

面向"实现/消费 OData 服务"这一需求的横向对比(星标数为 GitHub 仓库实查值,查询日期 2026-10-19,取自 shields.io 的 github stars 徽章接口;版本为各仓库 Releases 实查):

方案生态/语言当前状态最新版本GitHub Stars关键差异
Apache Olingo 5.0.0Java已退役(2026-06 入 Attic)5.0.0(2023-12)仓库已删除(404)唯一同时覆盖 OData V2/V4 的 Apache Java 库;零维护
ASP.NET Core OData(OData/WebApi).NET(C#)活跃7.8.1(2026-10-19 实查为最新 Release)864微软官方 .NET 实现,与 ASP.NET Core 管线深度集成,OData 新特性跟进最快
odata4jJava停更0.7(多年未更新)42Java 侧轻量实现,但同样长期无维护,不能作为 Olingo 的"接盘"选择
SAP CAP(Cloud Application Programming Model)Node.js / Java商业主导持续演进由 SAP 发布节奏管理(官网 https://cap.cloud.sap/docs )无单仓库星标口径CDS 建模语言原生产出 OData V4 服务,面向 SAP 生态的应用框架,含数据库与部署工具链

数据来源:各仓库 Releases 页与 shields.io(查询日期 2026-10-19);SAP CAP 信息来源:https://cap.cloud.sap/docs 。

选型建议:OData 是一个"生态重心在 .NET 与 SAP 体系"的协议。若你的技术栈是 .NET,直接选 ASP.NET Core OData;若在 SAP 业务体系内新建服务,CAP 是官方推荐路径;Java 生态目前没有活跃的 OData 实现——继续留在 Java 时应考虑放弃 OData 改用普通 REST/gRPC,或把 OData 服务边界放在 .NET/SAP 平台侧;Olingo 本体仅值得作为存量维护对象存在。

八、参考链接