WSO2 ESB Сообщение контекст не может быть изменен через посредник пользовательского класса - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь изменить сообщение с помощью пользовательского посредника класса в wso2 esb. Я пытаюсь добиться добавления / установки значения элемента в отправленном сообщении. Сообщение отправляется с использованием REST API и проходит через указанный класс (где происходит преобразование). Однако, когда я делаю полный журнал сообщения после класса, я вижу, что сообщение сохраняет те же значения, которые были на первых порах (в основном, класс изменяет сообщение только тогда, когда оно находится в посреднике класса, поэтому, когда оно выходит из посредник, он возвращается к своей первоначальной форме ввода).

Input:
Body : <soapenv:Body ...><jsonObject><ts>2020-01-13</ts><temp></temp></jsonObject></soapenv:Body>

Desired output:
Body : <soapenv:Body ...><jsonObject><ts>2020-01-13</ts><temp>Hello</temp></jsonObject></soapenv:Body>

Вещи, которые я пробовал до сих пор и которые не работали:

  1. Получить контекст сообщения, получить требуемый элемент и установите текст
  2. Используйте OMFactory для создания OMElement и поместите этот новый элемент в контекст сообщения
  3. Получите новый измененный конверт и установите его как конверт нового контекста сообщения
  4. Создать новую json полезную нагрузку

Есть идеи, как заставить ее работать?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Вы можете обратиться к следующей логике c, которая изменяет полезную нагрузку

@Override

  public boolean mediate(MessageContext messageContext) {

try {

org.apache.axis2.context.MessageContext axis2MessageContext = ((Axis2MessageContext)messageContext).getAxis2MessageContext();

JSONObject jsonBody = new JSONObject();
JSONObject jsonError = new JSONObject();
jsonError.put("error","Authoraization Missing");
jsonError.put("detail","Authoraization Credentials invalid");
jsonError.put("title","Authoraization Error");

jsonBody.put("status", "403");
jsonBody.put("errorMessage", jsonError);

String transformedJson = jsonBody.toString();

JsonUtil.newJsonPayload(axis2MessageContext,transformedJson,  true, true);
 // change the response type to XML
 axis2MessageContext.setProperty("messageType", "application/xml");
 axis2MessageContext.setProperty("ContentType", "application/xml");

} catch (Exception e) {
     System.err.println("Error: " + e);
     return false;
}
return true;
}

Если это не помогает, пожалуйста, поделитесь своим кодом, чтобы иметь представление.

0 голосов
/ 12 февраля 2020

Я уже пробовал этот урок @Nirothipan, но не сработал.

Мой код:

@Override
public boolean mediate(MessageContext mc){

    String measure = mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("measure")).getText();
    mc.getEnvelope().getBody().getFirstElement().getFirstChildWithName(new QName("temp")).setText(measure);

    return true;
}

Должно быть более чем достаточно для изменения значения этого элемента imo.

...