【问题标题】:WSO2 Custom Mediator Set value for the EnvelopeWSO2 自定义中介设置信封的值
【发布时间】:2019-04-21 12:12:00
【问题描述】:

全部成交,

我将在 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 Code 的基础上设置 Error Description

例如,

如果错误代码 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"}

【问题讨论】:

  • 你能分享你使用这个中介的序列来源吗?
  • @ophychius 你好。你的意思是我的 api.xml 吗?这是我的 api.xml outSequence>
  • @ophychius 或者你的意思是我的序列源代码。这里是 ws.apache.org/ns/synapse">
  • @ameruddinjamil 为什么要使用自定义类调解器进行转换?不是您可以使用可用的中介(丰富中介或有效负载工厂中介)吗?
  • @AsankaAbeyweera 你好。请教我如何做到这一点?到目前为止,我知道,有效载荷工厂是改变内容的价值。我没有看到任何基于其他值(条件)更改值的示例

标签: wso2 wso2esb synapse


【解决方案1】:

试试这个;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2012-10-05
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多