XML 支持 - 处理 XML 负载
Spring Integration 的 XML 支持扩展了 Spring Integration 的核心,提供了以下组件:
你需要将这个依赖添加到你的项目中:
- Maven
- Gradle
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-xml</artifactId>
<version>6.4.2</version>
</dependency>
compile "org.springframework.integration:spring-integration-xml:6.4.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 头部 enricher
XPath 头富化器定义了一个头富化器消息转换器,它针对消息有效负载评估 XPath 表达式,并将评估结果插入到消息头中。
📄️ 使用 XPath 过滤器
此组件定义了一个基于 XPath 的消息过滤器。内部而言,这些组件使用一个 MessageFilter,它包装了 AbstractXPathMessageSelector 的一个实例。
📄️ xpath SpEL 函数
Spring Integration 从 3.0 版本开始,提供了内置的 #xpath SpEL 函数,该函数调用静态方法 XPathUtils.evaluate(…)。此方法委托给 org.springframework.xml.xpath.XPathExpression。以下列表显示了一些用法示例:
📄️ XML 验证过滤器
XML 验证过滤器允许你根据提供的模式实例验证传入的消息。支持以下模式类型: