首页 > 解决方案 > 在 wso2 esb 中如何获取单个数字(整数)值

问题描述

在调用端点后的 wso2 ESB 中,我得到的响应是带有标头application/json的数字(例如:78) ,如果不处理响应,如果我按顺序发送它工作正常,我会得到相同的响应。但是,如果我在两者之间包含任何用于处理的中介,则会引发异常,例如无法保存 JSON 有效负载。发现无效的输入流。在某些情况下,单个字符串或数字无效因此,它可能会引发异常,但此错误已在 wso2 EI 6.2 中解决。

所以现在我能够处理响应,但如果我使用脚本调解器来获取它显示的值{}。如果我使用 json-eval($.) 那么我也无法获得该值,同样使用 xpath 我也无法获得。

那么如何通过使用脚本中介或使用 json 路径来获取该响应(数字中的值)以在 wso2 ei 中进行进一步处理。

标签: wso2wso2esb

解决方案


如果您确定响应仅包含一个带有 application/json 的 content-type 标头的数字。您可以将值设置为如下所示的属性。

<property name="RESPONSE_NUMBER" expression="//jsonValue" scope="default" type="INTEGER"/>

当您在中介流的其他地方需要此值时,您可以从属性(在本例中为 RESPONSE_NUMBER)中获取值,如下所示。

$ctx:RESPONSE_NUMBER

这是一个示例 API,它演示了如何获取响应值并在中介流中使用它。

<api xmlns="http://ws.apache.org/ns/synapse" name="SampleAPI" context="/getNumber">
   <resource methods="GET">
      <inSequence>
         <send>
            <endpoint>
               <http method="GET" uri-template="http://www.mocky.io/v2/5b02cc2c3000006600cee384"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <property name="RESPONSE_NUMBER" expression="//jsonValue" scope="default" type="INTEGER"/>
         <payloadFactory media-type="json">
            <format>{"Id": $1}</format>
            <args>
               <arg evaluator="xml" expression="$ctx:RESPONSE_NUMBER"/>
            </args>
         </payloadFactory>
         <send/>
      </outSequence>
   </resource>
</api>

您可以使用以下 curl 命令调用 API:

curl -v http://localhost:8280/getNumber

推荐阅读