Java 无法通过自定义类中介更改WSO2 ESB消息上下文

Java 无法通过自定义类中介更改WSO2 ESB消息上下文,java,json,wso2,wso2esb,mediator,Java,Json,Wso2,Wso2esb,Mediator,我正在尝试使用wso2 esb中的自定义类中介来更改消息。我试图实现的是在发送的消息中添加/设置元素的值。该消息是使用RESTAPI发送的,并通过所提到的类(转换发生的地方)传递。但是,当我在类之后对消息进行完整的日志记录时,我看到消息保留了与最初相同的值(基本上,类只在消息位于类中介中时更改消息,因此当消息从中介中出来时,它会返回到其原始输入形式) 输入: 正文:2020-01-13 期望输出: 正文:2020-01-13你好 到目前为止我已经尝试过但没有成功的事情: 获取消息上下文,获取所

我正在尝试使用wso2 esb中的自定义类中介来更改消息。我试图实现的是在发送的消息中添加/设置元素的值。该消息是使用RESTAPI发送的,并通过所提到的类(转换发生的地方)传递。但是,当我在类之后对消息进行完整的日志记录时,我看到消息保留了与最初相同的值(基本上,类只在消息位于类中介中时更改消息,因此当消息从中介中出来时,它会返回到其原始输入形式)

输入:
正文:2020-01-13
期望输出:
正文:2020-01-13你好
到目前为止我已经尝试过但没有成功的事情:

  • 获取消息上下文,获取所需元素并设置文本
  • 使用OMFactory创建OmeElement并将该新元素放入消息上下文中
  • 获取新的修改过的信封,并将其设置为新的消息上下文信封
  • 创建一个新的json负载

  • 您知道如何使其工作吗?

    您可以参考以下更改有效负载的逻辑

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

    如果这没有帮助,请分享您的代码,让我有一个想法。

    我已经尝试过该教程@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;
    }
    

    应该足以修改元素值。

    是否可以打印一些日志来验证度量值和类中介本身内的有效负载,以确保一切正常发生。您可以在类中介器内打印mc.getEnvelope().getBody(),以检查负载是否实际更改
    @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;
    }