有关wso2esb中过滤器的问题

时间:2014-06-25 05:36:48

标签: wso2 wso2esb wso2dss

我正在使用wso2dss3.1.0和wso2esb 4.7.0。

我希望过滤条件,因为我有用户过滤器中介。

我的代理人就像:

   <filter xpath="get-property('mailid1')=''">
            <then>
               <log level="custom">
                  <property name="service called" value="then of inner filter"/>
                  <property name="mailid exist" value="creating new entry in muser with phonenumber as username"/>
               </log>
               <payloadFactory>
                  <format>
                     <p:Capp_insert_emercontactid xmlns:p="http://ws.wso2.org/dataservice">
                        <p:username>$1</p:username>
                        <p:firstname>$2</p:firstname>
                        <p:lastname>$3</p:lastname>
                        <p:phonenumber>$4</p:phonenumber>
                        <p:mailid>$5</p:mailid>
                     </p:Capp_insert_emercontactid>
                  </format>
                  <args>
                     <arg expression="get-property('phoneno1')" evaluator="xml"/>

                     <arg expression="get-property('firstname')" evaluator="xml"/>
                     <arg expression="get-property('lastname')" evaluator="xml"/>
                     <arg expression="get-property('phoneno1')" evaluator="xml"/>
                     <arg expression="get-property('mailid1')" evaluator="xml"/>
                  </args>
               </payloadFactory>
               <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
               <property name="RESPONSE" value="true" scope="default" type="STRING"/>
               <property name="NO_ENTITY_BODY" action="remove" scope="axis2"/>
               <log level="full"/>
               <send receive="UpdateEmergencyContact_seq3">
                  <endpoint>
                     <address uri="http://localhost:9764/services/Capp_MuserDataservice/" format="soap11"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <log level="custom">
                  <property name="service called" value="else of inner filter"/>
                  <property name="Phonenumber exist" value="creating new entry in muser with mailid as username"/>
               </log>
               <payloadFactory>
                  <format>
                     <p:Capp_insert_emercontactid xmlns:p="http://ws.wso2.org/dataservice">
                        <p:username>$1</p:username>
                        <p:firstname>$2</p:firstname>
                        <p:lastname>$3</p:lastname>
                        <p:phonenumber>$4</p:phonenumber>
                        <p:mailid>$5</p:mailid>
                     </p:Capp_insert_emercontactid>
                  </format>
                  <args>
                     <arg expression="get-property('mailid1')" evaluator="xml"/>
                     <arg expression="get-property('firstname')" evaluator="xml"/>
                     <arg expression="get-property('lastname')" evaluator="xml"/>
                     <arg expression="get-property('phoneno1')" evaluator="xml"/>
                     <arg expression="get-property('mailid1')" evaluator="xml"/>
                  </args>
               </payloadFactory>
               <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
               <property name="RESPONSE" value="true" scope="default" type="STRING"/>
               <property name="NO_ENTITY_BODY" action="remove" scope="axis2"/>
               <log level="full"/>
               <send receive="UpdateEmergencyContact_seq3">
                  <endpoint>
                     <address uri="http://localhost:9764/services/Capp_MuserDataservice/" format="soap11"/>
                  </endpoint>
               </send>
            </else>
         </filter>

我希望:

  1. 如果请求中存在mailid和phonenumber,则将mailid作为 用户名。
  2. 如果只有mailid存在,请将其作为用户名插入。
  3. 如果mailid缺席,请将phonenumber作为用户名插入。
  4. 我编写的配置对其他部分来说很好。

    当mailid存在代理允许将其作为用户名插入时。

    但是当mailid缺席时发生问题。在这种情况下,它会发送空白用户名。。甚至不接受硬编码的价值。

    在服务器端登录上面的内容如下:

     [2014-06-25 10:29:29,676]  INFO - LogMediator phoneno1 = 111, mailid1 =  
    [2014-06-25 10:29:29,677]  INFO - LogMediator service called = else of inner filter, Phonenumber exist = creating new entry in muser with mailid as username
    [2014-06-25 10:29:29,681]  INFO - LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:f7e63fab-168c-4364-b49b-6c68d6e84eff, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><p:Capp_insert_emercontactid xmlns:p="http://ws.wso2.org/dataservice"><p:username> </p:username><p:firstname>y1</p:firstname><p:lastname>y2</p:lastname><p:phonenumber/><p:mailid> </p:mailid></p:Capp_insert_emercontactid></soapenv:Body></soapenv:Envelope>
    [2014-06-25 10:29:29,723]  INFO - LogMediator service called = UpdateEmergencyContact_seq3, userid exist = updating appusers emergency contact with newly insert userid, userid of new entry = 391529635516515404
    

    确切的问题在哪里?

    在编写过滤器时我是否遗漏了某些内容或做错了什么?

    请尽快告诉我。

2 个答案:

答案 0 :(得分:0)

这是一个简单的错误..在你的其他情况下。您将邮件ID作为用户名传递。因此,如果不存在mailid,则用户名也为空。检查有效负载fcatory参数表达式

答案 1 :(得分:0)

过滤器xpath中的

使用boolean(get-property('mailid1'))并将其与true和false进行比较。