首页 > 解决方案 > 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"
        }
    }

如何做到这一点?

标签: wso2wso2esbwso2dsswso2ei

解决方案


您可以尝试对 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


推荐阅读