信封的WSO2自定义介体设置值

时间:2018-11-19 06:38:12

标签: wso2 wso2esb synapse

全部交易,

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

我想更改将SOAP Envelope从后端发送到使用者的结果。但是要根据结果对数据进行一些调整。

这是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 =错误说明=一个

如果错误代码2 =错误说明=两个

如果错误代码3 =错误说明= 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设为null。 请帮助。任何建议都很好!

谢谢。

已更新!

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

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

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

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

1 个答案:

答案 0 :(得分:0)

尝试一下;

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);
    }
}