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

WSO2 EI 6.5.0从json eval表达式值获取特定字符串,wso2,wso2esb,wso2dss,wso2ei,Wso2,Wso2esb,Wso2dss,Wso2ei,我收到数据服务/wso2的以下回复/ 我只想在errorMessage键中显示以下字符串(): { "Error": { "errorCode": 501, "errorMessage": "DS Code: VALIDATION_ERROR\nNested Exception:-\njavax.xml.stream.XMLStreamException: DS Code: VALIDATION_ERROR\nSource Data

我收到数据服务/wso2的以下回复/

我只想在errorMessage键中显示以下字符串():

{
        "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上启用XPath2.0才能使用高级xpath函数。您可以通过在synapse.properties文件中将
synapse.xpath.dom.failover.enabled
属性设置为true来实现这一点

另一个正则表达式可以是:
*嵌套异常:-\\n(.*)\\n.*
基本上,正则表达式匹配整个字符串,只要它包含嵌套的异常,后跟一个换行符,后跟要捕获的内容,后跟另一个换行符。捕获是使用括号完成的,这将创建一个捕获组,您可以使用$1替换该捕获组(它引用第一个捕获组,$2引用第二个捕获组,以此类推)

您可以将其调整为需求/错误消息格式


要测试正则表达式,您可以始终使用

,您可以尝试对errorMessage进行正则表达式替换,并将结果存储在属性中,如下所示

<property name="securityCode" expression="replace(//errorMessage, '.*(SECURITYCODE.*?)\\.*', '$1')"/>

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

另一个正则表达式可以是:
*嵌套异常:-\\n(.*)\\n.*
基本上,正则表达式匹配整个字符串,只要它包含嵌套的异常,后跟一个换行符,后跟要捕获的内容,后跟另一个换行符。捕获是使用括号完成的,这将创建一个捕获组,您可以使用$1替换该捕获组(它引用第一个捕获组,$2引用第二个捕获组,以此类推)

您可以将其调整为需求/错误消息格式


要测试正则表达式,您可以始终使用

谢谢您的回复,如果必须用另一个字符串替换SECURITYCODE怎么办?我的意思是如何根据这两个标记(嵌套异常和字段名)在嵌套异常之间获取字符串:-\n安全代码бббббббб\n字段名:您可以将正则表达式更改为例如以下内容。这将获取NestedException和下一个换行符之间的部分,例如:.*嵌套异常:-\\n(.*)\\n.*谢谢您的回复,如果必须用另一个字符串替换SECURITYCODE怎么办?我的意思是如何根据这两个标记(嵌套异常和字段名)在嵌套异常之间获取字符串:-\n安全代码бббббббб\n字段名:您可以将正则表达式更改为例如以下内容。这将获取NestedException和下一个换行符之间的部分,例如:.*嵌套异常:-\\n(.*)\\n*