首页 > 解决方案 > WSO2 自定义中介设置信封的值

问题描述

全部成交,

我将在 OutSequence 的 WSO2 ESB 项目中创建一个自定义调解器。

我想更改从后端发送给消费者的 SOAP 信封中的结果。但是根据结果对数据进行一点调整。

这是 SOAP 信封

<soapenv:Bodyxmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<jsonObject>
    <serviceRequestID>12345</serviceRequestID>
    <statusCode>1</statusCode>
    <errorCode></errorCode>
    <errorDescription></errorDescription>
    <addressID>1.23456794E9</addressID>
    <source>consumer name</source>
    <requestId>910514</requestId>
</jsonObject>

我想创建一个自定义调解器来设置Error Description基于Error Code.

例如,

如果错误代码 1 = 错误描述 = 1

如果错误代码 2 = 错误描述 = 2

如果错误代码 3 = 错误描述 = 三

这是我的自定义中介代码。

private void ResponseLogging(MessageContext mc) throws OMException{
    try {

        String errorCode = mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("errorCode")).getText();
        String errorDescription = null;

        if(errorCode.equals("1")) {
            errorDescription = "One";
        }else if(errorCode.equals("2")) {
            errorDescription = "Two";
        }else if(errorCode.equals("3")) {
            errorDescription = "Three";
        }

        mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("errorDescription")).setText(errorDescription);

    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
}

预期响应,

<soapenv:Bodyxmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<jsonObject>
    <serviceRequestID>12345</serviceRequestID>
    <statusCode>1</statusCode>
    <errorCode>1</errorCode>
    <errorDescription>One</errorDescription>
    <addressID>1.23456794E9</addressID>
    <source>consumer name</source>
    <requestId>910514</requestId>
</jsonObject>

但是现在,我只得到了error description空值。请帮助。任何建议都会很棒!

谢谢。

更新 !

显然,在使用 setText() 方法设置值之后。错误描述值更改One为日志中的预期。

</statusCode><errorCode>1</errorCode><errorDescription>One</errorDescription>

但是当响应被发送回客户端时,它仍然是空值。

{"serviceRequestID": "12345","statusCode": 1,"errorCode": "1", "errorDescription": "","addressID": 1.23456794E9,"source": "consumer name",   "requestId": "910514"}

标签: wso2wso2esbsynapse

解决方案


Try this;

private void ResponseLogging(MessageContext mc) throws OMException{
    try {

        String errorCode = mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("jsonObject")).getFirstChildWithName(new QName("errorCode")).getText();
        String errorDescription = null;

        if(errorCode.equals("1")) {
            errorDescription = "One";
        }else if(errorCode.equals("2")) {
            errorDescription = "Two";
        }else if(errorCode.equals("3")) {
            errorDescription = "Three";
        }

        mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("jsonObject")).getFirstChildWithName(new QName("errorDescription")).setText(errorDescription);

    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
}

推荐阅读