WSO2 ESB类调解在异常情况下继续

时间:2016-05-11 06:38:31

标签: java soap wso2esb

我有以下课程调解员。

public class TestCustomMediator extends AbstractMediator {

    @Override
    public boolean mediate(MessageContext mc) {

    String processedMobile = mc
                .getEnvelope()
                .getBody()
                .getFirstElement()
                .getFirstChildWithName(
                        new QName("http://ws.wso2.org/dataservice", "mobile_no"))
                .getText();

        processedMobile = "000" + processedMobile;

        System.out.println("processedMobile===" + processedMobile);

        mc.getEnvelope()
                .getBody()
                .getFirstElement()
                .getFirstChildWithName(
                        new QName("http://ws.wso2.org/dataservice", "mobile_no"))
                .setText(processedMobile);

        return true;
    }
}

如果SOAP消息符合预期,则调解发生时没有任何问题。

如果出现异常,请说明是否没有名称为" mobile_no"然后调解没有发生。它在那时停止。不会继续下一个调解员。

请告诉我应该做什么,即使节点遍历失败,中介也要继续。

1 个答案:

答案 0 :(得分:0)

如果没有名为mobile_no的子节点,则会得到NullPointerException并且自定义中介失败。所以我添加了空指针检查。

public class TestCustomMediator extends AbstractMediator {

    @Override
    public boolean mediate(MessageContext mc) {

        OMElement mobileElement = mc
            .getEnvelope()
            .getBody()
            .getFirstElement()
            .getFirstChildWithName(
                new QName("http://ws.wso2.org/dataservice", "mobile_no"))

        if (mobileElement != null) {
            String mobileNumber = mobileElement.getText();
            mobileNumber = "000" + mobileNumber;
            System.out.println("mobileNumber===" + mobileNumber);
            mc.getEnvelope()
                .getBody()
                .getFirstElement()
                .getFirstChildWithName(
                    new QName("http://ws.wso2.org/dataservice", "mobile_no"))
                .setText(mobileNumber);

            return true;
        }
        return false;
    }
}