您好我有以下消息:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="true">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-11">
<wsu:Created>2012-09-06T09:59:04.031Z</wsu:Created>
<wsu:Expires>2012-09-06T10:04:04.031Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-12">
<wsse:Username>admin</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">admin</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body />
</soapenv:Envelope>
我想使用XPath从传入消息中获取用户名<wsse:Username>admin</wsse:Username>
任何建议?
修改
我试过了:
<inSequence xmlns="http://ws.apache.org/ns/synapse">
<property xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" name="p1" expression="$header/wsse:Username" scope="default" />
<log>
<property name="output*********" expression="get-property('p1')" />
</log>
</inSequence>
但它不输出用户名:
MessageID: urn:uuid:68f95493-7dfd-416a-b
455-f77f4fd5c9c5, Direction: request, output********* =
答案 0 :(得分:1)
Nuvio,
您可以使用表达式“$ header / wsse:Security”,其中“wsse”为Security头元素所携带的命名空间的前缀。下面显示的是如何将其保存到Synapse消息上下文属性。
<property xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" name="Security" expression="$header/wsse:Security" />
仅供参考,您可以使用语法“$ header / header_name”来提取SOAP消息中存在的任何SOAP标头元素。
希望这有帮助!
干杯, Prabath
答案 1 :(得分:0)
否则您可以选择让它使用此xpath:"//wsse:Username/text()"
我认为它对您有帮助,我也是这个wso2
工具的新手。