簡體   English   中英

如何在 WSO2 APIM 中對自定義響應使用入序和出序?

[英]How to use the in sequence and out sequence to a custom response in WSO2 APIM?

我正在使用 WSO2 APIM 2.1.0 和 IS 5.3.0

我目前正在嘗試創建一個 API,它通過調用管理服務 UserInformationRecoveryService 來注冊某個用戶,如果創建成功,則會發出自定義 JSON 響應,如果創建不成功,則會發出另一個響應,在這種情況下,用戶已經存在。

到目前為止,我已經按如下方式編寫了 in 序列和 out 序列,但是我無法獲得預期的 output。(即使用戶已經存在,也始終可以看到成功響應。也就是說,else 塊正在輸出中執行序列。)

按順序

<sequence xmlns="http://ws.apache.org/ns/synapse" name="registerTestHrisIn">
   <log level="full" />
   <property name="userName" expression="//userName" scope="default" type="STRING" />
   <property name="password" expression="//password" scope="default" type="STRING" />
   <property name="givenname" expression="//givenname" scope="default" type="STRING" />
   <property name="lastname" expression="//lastname" scope="default" type="STRING" />
   <property name="emailaddress" expression="//emailaddress" scope="default" type="STRING" />
   <property name="organization" expression="//organization" scope="default" type="STRING" />
   <property name="telephone" expression="//telephone" scope="default" type="STRING" />
   <property name="authorization" expression="get-property('transport', 'Authorization')" scope="default" type="STRING" />
   <payloadFactory media-type="xml">
      <format>
         <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ser="http://services.mgt.identity.carbon.wso2.org" xmlns:xsd="http://dto.mgt.identity.carbon.wso2.org/xsd">
            <soap:Header />
            <soap:Body>
               <ser:registerUser>
                  <ser:userName>$1</ser:userName>
                  <ser:password>$2</ser:password>
                  <ser:claims>
                     <xsd:claimUri>http://wso2.org/claims/givenname</xsd:claimUri>
                     <xsd:claimValue>$3</xsd:claimValue>
                  </ser:claims>
                  <ser:claims>
                     <xsd:claimUri>http://wso2.org/claims/lastname</xsd:claimUri>
                     <xsd:claimValue>$4</xsd:claimValue>
                  </ser:claims>
                  <ser:claims>
                     <xsd:claimUri>http://wso2.org/claims/emailaddress</xsd:claimUri>
                     <xsd:claimValue>$5</xsd:claimValue>
                  </ser:claims>
                  <ser:claims>
                     <xsd:claimUri>http://wso2.org/claims/organization</xsd:claimUri>
                     <xsd:claimValue>$6</xsd:claimValue>
                  </ser:claims>
                  <ser:claims>
                     <xsd:claimUri>http://wso2.org/claims/telephone</xsd:claimUri>
                     <xsd:claimValue>$7</xsd:claimValue>
                  </ser:claims>
                  <ser:profileName>default</ser:profileName>
                  <ser:tenantDomain>carbon.super</ser:tenantDomain>
               </ser:registerUser>
            </soap:Body>
         </soap:Envelope>
      </format>
      <args>
         <arg evaluator="xml" expression="$ctx:userName" />
         <arg evaluator="xml" expression="$ctx:password" />
         <arg evaluator="xml" expression="$ctx:givenname" />
         <arg evaluator="xml" expression="$ctx:lastname" />
         <arg evaluator="xml" expression="$ctx:emailaddress" />
         <arg evaluator="xml" expression="$ctx:organization" />
         <arg evaluator="xml" expression="$ctx:telephone" />
      </args>
   </payloadFactory>
</sequence>

輸出序列

<sequence xmlns="http://ws.apache.org/ns/synapse" name="registerTestHrisOut">
   <property xmlns:ns="http://services.mgt.identity.carbon.wso2.org" name="registerUserResponse" expression="//ns:registerUserResponse/ns:return"/>
    <log level="full">
      <property name="registerUserResponse" expression="registerUserResponse"/>
   </log>
   <filter source="get-property('registerUserResponse')" regex=".*18003">
      <then>
         <payloadFactory media-type="json">
            <format>{"ServiceResponse": {"Code": "1","Status": "false","Message": " Failed"}}</format>
         </payloadFactory>
      </then>
      <else>
         <payloadFactory media-type="json">
            <format>{"ServiceResponse": {"Code": "1","Status": "true","Message": " Success"}}</format>
         </payloadFactory>
      </else>
   </filter>
</sequence>

需要捕獲的錯誤響應

   <soapenv:Body>
      <ns:registerUserResponse xmlns:ns="http://services.mgt.identity.carbon.wso2.org">
         <ns:return xmlns:ax2354="http://mgt.identity.carbon.wso2.org/xsd" xmlns:ax2355="http://base.identity.carbon.wso2.org/xsd" xmlns:ax2358="http://beans.mgt.identity.carbon.wso2.org/xsd" xmlns:ax2359="http://dto.mgt.identity.carbon.wso2.org/xsd" xmlns:ax2360="http://mail.mgt.identity.carbon.wso2.org/xsd" xmlns:ax2364="http://beans.mgt.captcha.carbon.wso2.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax2358:VerificationBean">
            <ax2358:error>18003 Username 'TEST.COM/testUser' already exists in the system. Please pick another username.</ax2358:error>
            <ax2358:key xsi:nil="true" />
            <ax2358:notificationData xsi:nil="true" />
            <ax2358:redirectPath xsi:nil="true" />
            <ax2358:userId xsi:nil="true" />
            <ax2358:verified>false</ax2358:verified>
         </ns:return>
      </ns:registerUserResponse>
   </soapenv:Body>
</soapenv:Envelope>

非常感謝任何實現預期響應的解決方法。 提前致謝。

讓我們修改序列並嘗試場景。

執行以下更改以從響應中提取正確的錯誤消息並在過濾器中進行驗證

  • 如下更新out-sequence中的 property mediator 以指定到葉節點的路徑以提取錯誤消息

    <property xmlns:ns="http://services.mgt.identity.carbon.wso2.org" xmlns:xsd="http://beans.mgt.identity.carbon.wso2.org/xsd" name="registerUserResponse" expression="//ns:registerUserResponse/ns:return/xsd:error" />
  • 將過濾器中介器中的正則表達式模式更新如下( .*18003 *18003 到.*18003.* :這是為了定義在提到的鍵之后,會有一組要匹配的字符串)

     <filter source="get-property('registerUserResponse')" regex=".*18003.*"> <then>... </then> <else>... </else> </filter>

請按照所述更新序列,部署並嘗試該方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM