[英]How to use enrichHeaders method to pick up xpath of an xml element using java dsl
i am trying to pick up an xpth of an xml element using java dsl in spring integration.我正在尝试在 spring 集成中使用 java dsl 获取 xml 元素的 xpth。 I am trying to put the element name in the enrichHeaders method but it doesn't seem to be working.
我试图将元素名称放在 enrichHeaders 方法中,但它似乎不起作用。 This is the code:
这是代码:
return IntegrationFlows.from(Http.inboundGateway("/person")
.requestMapping(m -> m.methods(HttpMethod.POST)
.consumes("application/xml")
.produces("application/json")
)
)
.enrichHeaders( h -> h.header("bsn","/BG:prsLa01/BG:body/BG:object/BG:bsn"))
.transform(new XmlToJsonTransformer())
.get();
There is support for xPath:支持 xPath:
https://docs.spring.io/spring-integration/docs/5.2.5.RELEASE/reference/html/xml.html#xpath-spel-function https://docs.spring.io/spring-integration/docs/5.2.5.RELEASE/reference/html/xml.html#xpath-spel-function
xpath SpEL Function xpath 规范 Function
Spring Integration, since version 3.0, provides the built-in #xpath SpEL function, which invokes the XPathUtils.evaluate(…) static method.
Spring 集成,从 3.0 版本开始,提供内置的#xpath SpEL function,它调用 XPathUtils.evaluate(…) static 方法。 This method delegates to an org.springframework.xml.xpath.XPathExpression.
此方法委托给 org.springframework.xml.xpath.XPathExpression。 The following listing shows some usage examples:
以下清单显示了一些使用示例:
<transformer expression="#xpath(payload, '/name')"/>
<filter expression="#xpath(payload, headers.xpath, 'boolean')"/>
<splitter expression="#xpath(payload, '//book', 'document_list')"/>
<router expression="#xpath(payload, '/person/@age', 'number')">
<mapping channel="output1" value="16"/>
<mapping channel="output2" value="45"/>
</router>
The #xpath() also supports a third optional parameter for converting the result of the XPath evaluation.
#xpath() 还支持第三个可选参数,用于转换 XPath 评估的结果。 It can be one of the String constants (string, boolean, number, node, node_list and document_list) or an org.springframework.xml.xpath.NodeMapper instance.
它可以是字符串常量之一(字符串、boolean、数字、节点、node_list 和 document_list)或 org.springframework.xml.xpath.NodeMapper 实例。 By default, the #xpath SpEL function returns a String representation of the XPath evaluation.
默认情况下,#xpath SpEL function 返回 XPath 评估的字符串表示形式。
To enable the #xpath SpEL function, you can add the spring-integration-xml.jar to the classpath.
要启用 #xpath SpEL function,您可以将 spring-integration-xml.jar 添加到类路径中。 You need no declare any components from the Spring Integration XML Namespace.
您无需声明 Spring 集成 XML 命名空间中的任何组件。 For more information, see "`Spring Expression Language (SpEL).
有关详细信息,请参阅“`Spring 表达式语言 (SpEL)”。
It could look like this:它可能看起来像这样:
.enrichHeaders(h ->
h.headerExpression("bsn", "#xpath(payload, '/BG:body/BG:object/BG:bsn')"))
Another way could be to XPathExpressionEvaluatingHeaderValueMessageProcessor
:另一种方法可能是
XPathExpressionEvaluatingHeaderValueMessageProcessor
:
https://docs.spring.io/spring-integration/api/org/springframework/integration/xml/transformer/support/XPathExpressionEvaluatingHeaderValueMessageProcessor.html https://docs.spring.io/spring-integration/api/org/springframework/integration/xml/transformer/support/XPathExpressionEvaluatingHeaderValueMessageProcessor.html
Example of Usage:使用示例:
@Bean
public IntegrationFlow xpathHeaderEnricherFlow() {
return IntegrationFlows.from("xpathHeaderEnricherInput")
.enrichHeaders(
s -> s.header("one",
new XPathExpressionEvaluatingHeaderValueMessageProcessor("/root/elementOne"))
.header("two",
new XPathExpressionEvaluatingHeaderValueMessageProcessor("/root/elementTwo"))
.headerChannelsToString("12345")
.messageProcessor(m -> s.header("foo", "bar")),
c -> c.autoStartup(false).id("xpathHeaderEnricher")
)
.get();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.