WSO2 EI 6.5.0 从 json-eval 表达式值中获取特定字符串

WSO2 EI 6.5.0 get specific string from json-eval expression value

我有以下来自数据的回复 service/wso2/

我只想在 errorMessage key[ 中显示此字符串 (<SECURITYCODE буруу байна!!!>) =21=] 来自:

{
        "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.*?)\.*', '')"/>

请记住,您可能必须在 EI 上启用 xpath 2.0 才能使用高级 xpath 功能。您可以通过在 synapse.properties 文件中将 synapse.xpath.dom.failover.enabled 属性 设置为 true 来实现。

另一个正则表达式可以是:.*Nested Exception:-\n(.*?)\n.* 基本上,正则表达式匹配整个字符串,只要它包含嵌套异常后跟一个换行符,然后是您想要捕获的任何内容,然后是另一个换行符。捕获是使用括号完成的,这会创建一个捕获组,您可以在替换中重复使用 $1 (它引用第一个捕获组, $2 引用第二个捕获组等)

您可以将其调整为 requirements/errorMessage 格式。

要测试您的正则表达式,您可以随时使用 regex101.com