XML 支持 - 处理 XML 负载
Spring Integration 的 XML 支持通过以下组件扩展了其核心功能:
此依赖项为项目所需:
- Maven
- Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-xml</artifactId>
<version>7.0.2</version>
</dependency>
compile "org.springframework.integration:spring-integration-xml:7.0.2"
这些组件使得在 Spring Integration 中处理 XML 消息变得更加简单。消息组件支持多种格式的 XML 表示,包括 java.lang.String、org.w3c.dom.Document 和 javax.xml.transform.Source 的实例。然而,当需要 DOM 表示时(例如,为了评估 XPath 表达式),String 负载会被转换为所需的类型,然后再转换回 String。如果您没有提供 DocumentBuilder 实例,需要该实例的组件会创建一个支持命名空间的实例。当您需要对文档创建进行更精细的控制时,可以提供一个适当配置的 DocumentBuilder 实例。
章节总结
📄️ 命名空间支持
Spring Integration XML 模块中的所有组件都提供命名空间支持。为了启用命名空间支持,您需要导入 Spring Integration XML 模块的架构。以下示例展示了一个典型设置:
📄️ 转换 XML 负载
本节介绍如何转换 XML 负载
📄️ 使用 XPath 转换 XML 消息
在处理消息转换时,XPath 是转换 XML 负载消息的绝佳方式。您可以通过定义带有 元素的 XPath 转换器来实现。
📄️ 拆分 XML 消息
XPathMessageSplitter 支持处理包含 String 或 Document 负载的消息。该分割器使用提供的 XPath 表达式将负载拆分为多个节点。默认情况下,每个 Node 实例会成为新消息的负载。当需要每个消息为 Document 类型时,可以设置 createDocuments 标志。若传入的是 String 负载,系统会先将其转换、拆分,再转换回多个 String 消息。XPath 分割器实现了 MessageHandler 接口,因此应与适当的端点配合配置(如需更简洁的配置方案,可参考后续示例中的命名空间支持示例)。以下示例展示了配置使用 XPathMessageSplitter 的 Bean:
📄️ 使用 XPath 路由 XML 消息
与基于SpEL的路由器类似,Spring Integration提供了基于XPath表达式的消息路由支持,允许您创建具有输入通道但无输出通道的消息端点。相反,一个或多个输出通道会被动态确定。以下示例展示了如何创建此类路由器:
📄️ XPath 头部增强器
XPath 头部增强器定义了一种头部增强器消息转换器,该转换器针对消息负载评估XPath表达式,并将评估结果插入到消息头部中。
📄️ 使用 XPath 过滤器
该组件定义了一个基于XPath的消息过滤器。在内部,这些组件使用一个包装了AbstractXPathMessageSelector实例的MessageFilter。
📄️ \#xpath SpEL 函数
自 3.0 版本起,Spring Integration 提供了内置的 #xpath SpEL 函数,该函数会调用 XPathUtils.evaluate(…) 静态方法。此方法会委托给一个 org.springframework.xml.xpath.XPathExpression。以下清单展示了一些使用示例:
📄️ XML 验证过滤器
XML 验证过滤器允许您根据提供的模式实例验证传入消息。支持以下模式类型: