You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 EI中基于SQL数据库UserCode存在性的网页重定向失败问题

问题分析与解决方案

从你的日志可以看到,API的逻辑判断已正常工作(正确识别UserCode是否存在,进入对应分支并设置了302状态码和Location头),但重定向未生效,核心原因是HTTP头属性的作用域未正确设置,同时代码中存在两处潜在的空格问题,以下是具体修复步骤:

1. 修正HTTP头属性的作用域

WSO2 EI中,HTTP_SC和Location属于传输层(Transport)的HTTP头,必须设置scope="transport"才能被正确传递到客户端。原代码未指定作用域,导致这些头信息无法被客户端识别。

修改then和else分支中的属性设置:

<then>
   <log>
      <property name="Message" value="Name Exists Lets redirect"/>
   </log>
   <property name="HTTP_SC" value="302" scope="transport"/>
   <property name="Location" value="https://wso2.com/" scope="transport"/>
</then>
<else>
   <log>
      <property name="Message" value="Name Does Not Exist Lets redirect"/>
   </log>
   <property name="HTTP_SC" value="302" scope="transport"/>
   <property name="Location" value="https://www.youtube.com/" scope="transport"/>
</else>

2. 修复DB Lookup中的空格问题

原代码存在两处不必要的空格,虽然当前日志显示查询正常,但可能引发潜在错误:

  • 参数表达式中的空格:get-property('uri.var.UserCode ') → 改为get-property('uri.var.UserCode')
  • 结果列中的空格:column="UserCode " → 改为column="UserCode"

修正后的DB Lookup片段:

<dblookup>
   <connection>
      <pool>
         <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
         <url>jdbc:sqlserver://10.1.1.111\test;databaseName=UserDB</url>
         <user>admin</user>
         <password>admin</password>
      </pool>
   </connection>
   <statement>
      <sql>select UserCode from UserDB.dbo.Users where UserCode =?;</sql>
      <parameter expression="get-property('uri.var.UserCode')" type="CHAR"/>
      <result name="foundnr" column="UserCode"/>
   </statement>
</dblookup>

3. 客户端配置检查

如果使用API测试工具(如Postman),需确保工具开启自动跟随重定向选项;浏览器通常会自动处理302重定向,无需额外配置。

完整修正后的API代码

<api xmlns="http://ws.apache.org/ns/synapse" name="DBLookupAPI" context="/dblookup">
   <resource methods="GET" uri-template="/{UserCode}">
      <inSequence>
         <log level="custom">
            <property name="Value" expression="get-property('uri.var.UserCode')"/>
         </log>
         <dblookup>
            <connection>
               <pool>
                  <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
                  <url>jdbc:sqlserver://10.1.1.111\test;databaseName=UserDB</url>
                  <user>admin</user>
                  <password>admin</password>
               </pool>
            </connection>
            <statement>
               <sql>select UserCode from UserDB.dbo.Users where UserCode =?;</sql>
               <parameter expression="get-property('uri.var.UserCode')" type="CHAR"/>
               <result name="foundnr" column="UserCode"/>
            </statement>
         </dblookup>
         <log level="custom">
            <property name="Value" expression="get-property('foundnr')"/>
         </log>
         <filter source="boolean(get-property('foundnr'))" regex="true">
            <then>
               <log>
                  <property name="Message" value="Name Exists Lets redirect"/>
               </log>
               <property name="HTTP_SC" value="302" scope="transport"/>
               <property name="Location" value="https://wso2.com/" scope="transport"/>
            </then>
            <else>
                <log>
                  <property name="Message" value="Name Does Not Exist Lets redirect"/>
               </log>
               <property name="HTTP_SC" value="302" scope="transport"/>
               <property name="Location" value="https://www.youtube.com/" scope="transport"/>
            </else>
         </filter>
         <respond/>
      </inSequence>
      <outSequence/>
      <faultSequence/>
   </resource>
</api>

内容的提问来源于stack exchange,提问作者Kelisha Govender

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:30:43