如何在WSO2 ESB 4.8.1自定义处理程序中替换响应主体

时间:2014-06-16 08:51:23

标签: wso2 wso2esb esb

我在自定义处理程序中进行了一些验证,并且在从自定义处理程序将响应发送回客户端时出错。然而,客户端请求的原始有效载荷也被发送回客户端。身体如何从反应信息中清空?如果我调试SoapBody它似乎是空的,但仍然以某种方式将原始有效负载发送回客户端。

这是我向用户发送消息的功能。

private void myAuthErrorHandler(MessageContext msgCtx)
{
    Axis2MessageContext axis2smc = (Axis2MessageContext) msgCtx;
    org.apache.axis2.context.MessageContext axis2MessageCtx = axis2smc.getAxis2MessageContext();

    SOAPBody body = msgCtx.getEnvelope().getBody();

    // remove the existing payload
    for (Iterator itr = body.getChildElements(); itr.hasNext();) {
        OMElement child = (OMElement) itr.next();
        child.detach();
    }

    log.error(""+msgCtx.getEnvelope());
    axis2MessageCtx.setProperty("HTTP_SC", "403");
    axis2MessageCtx.setProperty("NO_ENTITY_BODY", new Boolean("true"));
    axis2MessageCtx.setProperty("RESPONSE", "true");
    axis2MessageCtx.setTo(null);
    Axis2Sender.sendBack(msgCtx); 
}

log.error("&#34 + msgCtx.getEnvelope());看起来是空的但仍然将原始的身体(有效载荷)发送回客户端。

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body></soapenv:Body></soapenv:Envelope> 

这可能是一个错误或为什么原始身体被送回客户端?是否还有其他方法可以清除响应体?

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

要删除邮件正文,可以按顺序在序列中使用属性介体:

<property name="NO_ENTITY_BODY" value="true" scope="axis2" type="BOOLEAN"/> 

或者您也可以使用脚本调解器。

<script language="js"><![CDATA[mc.getEnvelope().getBody().getFirstElement().detach();]]></script> 

如果两者都不起作用,请检查您的配置是否具有日志中介。 (<log level="full"/>)。如果有,请尝试将其删除。 (在一些较旧的ESB版本中,有一个错误,当你添加一个level = full的日志调解器时,响应主体不会被丢弃,因为它会导致重建主体以进行日志记录。但是AFAIK,它被修复了4.8.x版本......所以你的问题可能不是这样......)