
后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载Xberg 是基于 Rust 核心的多语言文档智能解析框架其插件体系允许在运行时注册文本提取器extractor、OCR 引擎、后处理器post-processor与校验器validator。listValidators()是 Java 绑定暴露的插件管理 API 之一用于列出当前进程中所有已注册的 validator 名称是排查插件状态、验证注册结果、实现动态插件治理的入口。读完本文你将掌握该 API 的签名、返回值、异常处理方式、底层实现机制以及如何在 Maven 工程中直接运行一个可用的完整示例。一、Validator 在 Xberg 插件体系中的定位Xberg 的架构把校验器视为提取流水线中的“质量门禁”Validator检查提取结果ExtractedDocument的质量、完整性与正确性一旦校验不通过提取会立即失败fail fast而不是像后处理器那样只做修正。从源码看该 trait 位于 crates/xberg/src/plugins/validator/trait.rs其注释明确列出典型用途质量门槛Quality Gates、合规检查Compliance、内容过滤Content Filtering、格式校验Format Validation与安全扫描Security Checks。在提取流水线中validator 运行于后处理器之前因此可以在任何转换工作发生之前先拒绝不合格的结果见 docs-site/src/content/docs/concepts/plugin-system.md 中的插件系统概念说明。每个 validator 都是实现了Validatortrait 的插件需要同时满足Plugin基接口提供name()、version()、initialize()、shutdown()与异步validate()方法且要求线程安全Send Sync。二、listValidators 的 Java 用法2.1 方法签名关联文档 docs-site/src/snippets-generated/java/plugin_api/validators_list.md 给出的示例非常精简。结合 API 参考文档 docs-site/src/content/docs/reference/api-java.md 第 726 行附近的描述完整的签名是public static ListString listValidators() throws XbergRsException返回类型ListString即所有已注册 validator 的名称列表。异常调用底层 Rust 原生库失败时抛出XbergRsException。无参数不需要任何输入配置属于查询型只读、无副作用调用。2.2 完整可运行示例关联文档示例片段如下原样继承import io.xberg.*; public final class Example { public static void main(String[] args) throws Exception { var result Xberg.listValidators(); System.out.println(result); } }在此基础上加入 Maven 依赖与遍历输出的完整版本更便于直接运行import io.xberg.Xberg; import io.xberg.XbergRsException; public final class ListValidatorsExample { public static void main(String[] args) { try { var validators Xberg.listValidators(); System.out.println(Registered validators: validators.size()); for (String name : validators) { System.out.println( - name); } } catch (XbergRsException e) { System.err.println(Failed to list validators: e.getMessage()); e.printStackTrace(); } } }在pom.xml中引入 Java 绑定io.xberg包由 packages/java 目录下的 Maven 工程构建包结构见 packages/java/io/xberg/Xberg.javadependency groupIdio.xberg/groupId artifactIdxberg/artifactId version请以当前构建产物版本为准/version /dependency2.3 典型的运行输出在默认状态下未注册任何自定义 validator调用将返回空列表Registered validators: 0当注册了自定义 validator 后输出类似Registered validators: 2 - min-length-validator - quality-threshold-validator注意列表内容取决于当前 JVM 进程内已完成的注册操作。Xberg 的插件注册表是进程级全局状态不同进程之间的注册互不可见。三、底层实现原理3.1 Java → Rust 的调用链Xberg.listValidators()并非直接实现而是转发给 JNI 桥接层packages/java/io/xberg/Xberg.java 定义静态方法并委托给XbergRs.listValidators()XbergRs通过 JNI 调用 Rust 侧的list_validators函数Rust 侧实现在 crates/xberg/src/plugins/validator/mod.rspub fn list_validators() - crate::ResultVecString { use crate::plugins::registry::get_validator_registry; let registry get_validator_registry(); let registry registry.read(); Ok(registry.list()) }3.2 全局注册表Registry所有 validator 保存在进程级全局注册表中由 crates/xberg/src/plugins/registry/mod.rs 的get_validator_registry()返回pub fn get_validator_registry() - ArcRwLockValidatorRegistry { VALIDATOR_REGISTRY.clone() }该注册表是ArcRwLockValidatorRegistryArc保证多个调用方安全共享同一实例RwLock允许多个读者并发执行list只读操作而注册/注销需要独占写锁因为list_validators()只获取读锁所以它是**无副作用side_effect: safe**的查询操作——这正对应 fixtures 中对validators_list的分类category 为validator_managementassertions 仅为not_error见 fixtures/plugin_api/validators_list.json。3.3 与注册/注销 API 的关系listValidators()通常与以下 Rust 侧管理函数配合使用构成完整的生命周期管理均位于 crates/xberg/src/plugins/validator/mod.rs功能Rust 函数锁类型说明注册register_validator(Arcdyn Validator)写锁将 validator 加入注册表注销unregister_validator(name)写锁按名称移除列出list_validators()读锁返回所有名称本文主题清空clear_validators()写锁关闭并清空全部 validatorJava 侧对应的静态方法为Xberg.listValidators()、Xberg.clearValidators()等。在 e2e/java/src/test/java/io/xberg/e2e/ValidatorManagementTest.java 中可以看到这两个方法的端到端测试用例testValidatorsList调用Xberg.listValidators()并断言返回非空非 null。3.4 测试中的行为约定e2e/java/src/test/java/io/xberg/e2e/ValidatorManagementTest.java 的测试约定值得注意Test void testValidatorsClear() throws Exception { // Clear all validators and verify list is empty assertDoesNotThrow(() - Xberg.clearValidators()); } Test void testValidatorsList() throws Exception { // List all registered validators var result Xberg.listValidators(); assertNotNull(result, expected non-null response); }从中可以总结出使用约定即使当前没有任何 validatorlistValidators()也不会返回 null而是返回空列表调用本身不抛异常除非底层原生库加载失败。四、Validator 的典型使用场景既然listValidators()用于查询注册状态理解 validator 的实际工作方式有助于判断何时需要查询。从 crates/xberg/src/plugins/validator/trait.rs 的示例与单元测试crates/xberg/src/plugins/validator/mod.rs可以归纳出几个典型模式最小长度校验提取内容过短时拒绝如MinimumLengthValidator质量阈值校验根据元数据中的质量分数如quality_score决定是否通过按 MIME 类型条件校验通过重写should_validate只对application/pdf等特定类型生效优先级控制通过priority()返回不同数值默认 50控制校验执行顺序。当多个 validator 注册在同一进程时listValidators()是确认“我的插件到底有没有注册成功”的最直接手段也是调试插件加载问题的第一排查工具。五、注意事项与最佳实践进程级状态validator 注册表为进程内全局状态listValidators()只能看到当前 JVM 进程中注册的 validator空列表是合法状态没有注册任何 validator 时返回空列表而非 null可直接用于条件判断只读操作该方法无副作用可在任何时刻安全调用不会干扰并发提取任务异常处理务必捕获XbergRsException它通常意味着原生库加载失败或底层调用出错组合使用调试时建议先listValidators()确认注册再执行提取验证行为若需要清理现场可使用clearValidators()生产环境治理可在服务启动完成后调用该方法并记录日志用于审计当前进程加载的校验插件版本与数量。六、小结listValidators()虽然只是 Java 绑定中的一个查询型方法但它背后牵动的是 Xberg 完整的插件注册表机制JNI 桥接 → Rustlist_validators()→ 全局RwLockValidatorRegistry读锁 →registry.list()。掌握这个调用链也就理解了 Xberg 插件体系的进程级生命周期管理方式。实际使用中将其与register_validator、unregister_validator、clear_validators组合即可对校验插件进行完整的动态治理。如需继续深入了解可查阅插件系统概念docs-site/src/content/docs/concepts/plugin-system.mdJava API 完整参考docs-site/src/content/docs/reference/api-java.mdJava 绑定源码packages/java/io/xberg/Xberg.javaRust 实现crates/xberg/src/plugins/validator/mod.rs端到端测试e2e/java/src/test/java/io/xberg/e2e/ValidatorManagementTest.java赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐使用 Dart 绑定查询 Xberg 已注册 Post-ProcessorlistPostProcessors 实战指南使用 Dart 绑定查询 Xberg 已注册 Post ProcessorlistPostProcessors 实战指南 本篇技术指南以 xberg 仓库的后端AI 应用NLP使用 xberg Go 绑定查询已注册的后处理器ListPostProcessors 实战指南使用 xberg Go 绑定查询已注册的后处理器ListPostProcessors 实战指南 本文围绕 xberg 文档自动生成的一则 Go 代码示例 d后端AI 应用NLPXberg C 绑定实战用 ListTokenizerBackends 查询已注册的 Tokenizer 后端Xberg C 绑定实战用 ListTokenizerBackends 查询已注册的 Tokenizer 后端 导读 本文围绕 Xberg 开源仓库中 C后端AI 应用NLP上一篇acts_as_commentable完全解析从安装到高级配置的10个实用技巧下一篇如何使用WABT实现WebAssembly自定义页面大小完整实践指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考