【问题标题】:In wso2 esb how to get a single number(integer) value在 wso2 esb 中如何获取单个数字(整数)值
【发布时间】:2018-05-20 06:55:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: wso2 wso2esb


    【解决方案1】:

    如果您确定响应仅包含一个带有 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      相关资源
      最近更新 更多