Spring集成 - XpathPayloadEndpointMapping - 无法理解,也没有这样的文档

时间:2018-04-26 20:32:42

标签: spring-integration spring-ws

<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元素名称,但我无法从中获得。

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

2 个答案:

答案 0 :(得分:1)

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

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

所以,可能真的会考虑对你身体的根元素断言。

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

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

答案 1 :(得分:0)

感谢Bilan为此投了一些灯光。

在做了一些更多的研究后,我意识到我正在寻找的答案是&#34;表达式可以使用的可能值是什么?&#34;并在春季文档中搜索。 - uff!我错了。

XPath不是一个弹簧元素,它完全是一个独立的元素,而spring正在利用它。因此,要找出元素可以包含的可能值,任何人都可以从W3C中引用以下链接。

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

因此。在我的例子中是当前值local-name(/*),它注意到了XPath的预定义方法。