<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元素名称,但我无法从中获得。
是否有任何与弹簧集成的不同映射相关的文档,如何使用它们?
答案 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的预定义方法。