区分wso2中的操作

时间:2015-04-15 09:38:30

标签: soap wso2

我来自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

¿无论如何知道某些属性调用了什么操作?

任何人都可以帮助我:(

1 个答案:

答案 0 :(得分:0)

$ body / * [1]不是节点名称,而是内容(值或子xml树)。如果要在没有命名空间信息的情况下获取其名称,可以使用名为 local-name 的xpath函数:

local-name($body/*[1])