wso2 - WSO2 EI 6.5.0 从 json-eval 表达式值中获取特定字符串
问题描述
我有以下来自数据服务/wso2/ 的响应
我只想在errorMessage键中显示这个字符串(< SECURITYCODE буруу байна!!! >) :
{
"Error": {
"errorCode": 501,
"errorMessage": "DS Code: VALIDATION_ERROR\nNested Exception:-\njavax.xml.stream.XMLStreamException: DS Code: VALIDATION_ERROR\nSource Data Service:-\nName: WSO2_COLLATERALINFO\nLocation: \\WSO2_COLLATERALINFO.dbs\nDescription: N/A\nDefault Namespace: http://ws.wso2.org/dataservice\nCurrent Request Name: getCollateralInfo\nCurrent Params: {RegisterID=, Description=, AccountID=, Email=, RequestId=WSO2123456789, Telephone=, NationalID=, ProductID=, CustomerID=, CollateralType=, Source=WSO2, CollateralCode=COL0001843201, Function=CollateralInfo, LiabilityID=, UserId=egateway, CustomerName=, SecurityCode=B42B54464D1DF6000A3CA026BB2C6C0, RequestType=R}\nNested Exception:-\nSECURITYCODE буруу байна!!! \nField Name: SecurityCode\nField Value: B42B54464D1DF6000A3CA026BB2C6C0\n\n"
}
}
如何做到这一点?
解决方案
您可以尝试对 errorMessage 进行正则表达式替换,并将结果存储在属性中,如下所示。
<property name="securityCode" expression="replace(//errorMessage, '.*(SECURITYCODE.*?)\\.*', '$1')"/>
请记住,您可能必须在 EI 上启用 xpath 2.0 才能使用高级 xpath 功能。为此,您可以synapse.xpath.dom.failover.enabled
在 synapse.properties 文件中将属性设置为 true。
另一个正则表达式可能是:.*Nested Exception:-\\n(.*?)\\n.*
基本上正则表达式匹配整个字符串,只要它包含嵌套异常,后跟换行符,然后是您要捕获的任何内容,然后是另一个换行符。捕获是使用括号完成的,这将创建一个捕获组,您可以在替换中重用该捕获组 $1 (它引用第一个捕获组,$2 到第二个等)
您可以将其调整为 requirements/errorMessage 格式。
要测试您的正则表达式,您可以随时使用regex101.com
推荐阅读
- vector - (CAPL)我如何使用参数分配数组长度
- html-table - 具有固定标题和列的 Blazor 表组件
- xamarin - 在视图之间导航 Xamarin Forms
- css - online tool for css to scss convertor
- javascript - javascript .eval() 给了我未定义的
- reactjs - 有没有办法使用带有formik的状态来设置初始值?
- spring-boot - spring.jpa.properties.hibernate 和 spring.jpa.hibernate 之间的区别
- c# - Visual Studio 中 Android API 使用的代码规则
- java - 将 S3 存储桶中给定文件的所有版本从一个文件夹移动到另一个文件夹
- redux - 如何在 Redux 开发工具(扩展)中查看我的状态?