首页 文章

在wso2 esb中如何获得单个数字(整数)值

提问于
浏览
0

在调用 endpoints 后的wso2 ESB中,我得到的响应为数字(例如:78), Headers 为 application/json ,如果我没有处理响应,如果我发送出去的顺序就可以正常工作了'll get the same response. But if I include any mediators for processing in between it' ll会抛出像 Could not save JSON payload. Invalid input stream found 这样的异常 . 单个字符串或数字在某些情况下无效因此,它可能会抛出异常,但在wso2 EI 6.2中解决了此错误 .

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

那么如何通过使用脚本中介或使用json路径获得wso2 ei中进一步处理的响应(数量值) .

1 回答

  • 1

    如果您确定响应仅包含带有application / json的content-type标头的数字 . 你可以把 Value 带到一个属性,如下所示 .

    <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
    

相关问题