Spring 集成 - XpathPayloadEndpointMapping - 无法理解且没有此类文档

Spring integration - XpathPayloadEndpointMapping - Not able to understand and no such documentation

<bean class="org.springframework.ws.server.endpoint.mapping.XPathPayloadEndpointMapping">
    <property name="expression"><value>local-name(/*)</value></property>
    <property name="mappings">
        <props>
                <prop key="sampleKey">mySampleServiceGateway</prop>

。 . .

<xs:element name="sampleKey">
        <xs:complexType>
            <xs:complexContent>

。 .

我从你们的一个集成项目中得到了上面的代码。但是我无法理解标签可以包含哪些可能的值以及 <value>local-name(/*)</value> 的含义。

虽然通过查看代码我可以弄清楚关键是 XSD 元素名称,但我无法从中得到更多。

是否有任何与 spring 集成的不同映射相关的文档,如何使用它们?

您的配置看起来不错,但您确实需要弄清楚应该使用什么 XPath 表达式。它适用于 SOAP 请求消息 body:

protected String getLookupKeyForMessage(MessageContext messageContext) throws Exception {
    Element payloadElement = getMessagePayloadElement(messageContext.getRequest());
    return expression.evaluateAsString(payloadElement);
}

因此,可能真的要考虑针对 body 的根元素进行断言。

根据提供的配置,您尝试解析为请求的根元素的本地名称。听起来您现在期望 sampleKey 作为根标签名称。

有关详细信息,请参阅 XPathPayloadEndpointMapping 的 JavaDocs。

感谢 Bilan 对此进行了说明。

在做了一些更多的研究之后,我意识到我正在寻找的答案是“表达式可以使用的可能值是什么?”并在 spring 文档中搜索。 ——哼!我错了。

XPath 不是 spring 元素,它是一个完全独立的元素,spring 只是利用它。因此,要找出元素可以容纳的可能值是什么,任何人都可以参考以下来自 W3C 的 link。

https://www.w3.org/TR/1999/REC-xpath-19991116/#function-local-name

所以。在我的例子中,当前值 local-name(/*) 是 XPath 的预定义方法。