我来自OpenESB(Glassfish),我是wso2的新手。我必须调解一个服务,它有两个操作,'阻止'和'咨询'。 区分操作的唯一方法是从soap:body评估第一个节点,通过一个switch中介,但总是默认情况下,它不适用于这种情况。 (我无法通过get-property('Action')进行区分,因为它不是http头。)
我分析肥皂信息的代码如下:
`<log level="custom">
<property xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
name="OP"
expression="$body/*[1]"/>
</log>
<switch xmlns:soap="http://www.w3.org/2003/05/soap-envelope" source="$body/*[1]">
<case regex=".*ConsultRequest.*">
<log level="custom">
<property name="OPERATION" value="CONSULT"/>
</log>
</case>
<case regex=".*BlockRequest.*">
<log level="custom">
<property name="OPERATION" value="BLOCK"/>
</log>
</case>
<default>
<log level="custom">
<property name="OPERATION" value="DEFAULT"/>
</log>
</default>
</switch>`
下一步是服务器控制台中的结果:
[2015-04-15 11:15:04,611] INFO - LogMediator OP = <cli:BlockRequest xmlns:cli="http://www.eroski.es/pspr/schema/ClientesMDM"><Id_Cliente_Hub>25</Id_Cliente_Hub></cli:BlockRequest>
[2015-04-15 11:15:04,611] INFO - LogMediator OPERATION = DEFAULT
¿无论如何知道某些属性调用了什么操作?
任何人都可以帮助我:(
答案 0 :(得分:0)
$ body / * [1]不是节点名称,而是内容(值或子xml树)。如果要在没有命名空间信息的情况下获取其名称,可以使用名为 local-name 的xpath函数:
local-name($body/*[1])