wso2 - 在 wso2 esb 中如何获取单个数字(整数)值
问题描述
在调用端点后的 wso2 ESB 中,我得到的响应是带有标头application/json的数字(例如:78) ,如果不处理响应,如果我按顺序发送它工作正常,我会得到相同的响应。但是,如果我在两者之间包含任何用于处理的中介,则会引发异常,例如无法保存 JSON 有效负载。发现无效的输入流。在某些情况下,单个字符串或数字无效因此,它可能会引发异常,但此错误已在 wso2 EI 6.2 中解决。
所以现在我能够处理响应,但如果我使用脚本调解器来获取它显示的值{}
。如果我使用 json-eval($.) 那么我也无法获得该值,同样使用 xpath 我也无法获得。
那么如何通过使用脚本中介或使用 json 路径来获取该响应(数字中的值)以在 wso2 ei 中进行进一步处理。
解决方案
如果您确定响应仅包含一个带有 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
推荐阅读
- node.js - NGINX:使用 1 个域名为多个端口设置 SSL 证书
- jquery - 来自图像数据类型 SQL Server 的剑道自动完成模板
- graphql - Apollo graphql 远程模式扩展依赖于远程字段
- neo4j - Neo4j 设计选择:关系与节点
- java - 将 webdriver 传递给另一个类的正确方法
- c# - 在GDAL(C#)中将点几何添加到shapefile
- json - 尝试通过 fetch 读取 json 文件时出错
- c++ - 第一个代码中的错误,但第二个正确“在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc Aborted(core dumped)”
- javascript - Javascript querySelectorAll 未定义
- javascript - 使用 javascript 访问由 api 设置的 cookie