WSO2 Custom Mediator Set value для конверта - PullRequest
0 голосов
/ 19 ноября 2018

Все сделки,

Я бы создал один собственный посредник в моем проекте ESB WSO2 в OutSequence.

Я хотел бы изменить результат в конверте 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 = описание ошибки = один

если код ошибки 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"}

1 Ответ

0 голосов
/ 20 ноября 2018

Попробуйте это;

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