【问题标题】:How to replace response body in WSO2 ESB 4.8.1 Custom Handler如何在 WSO2 ESB 4.8.1 自定义处理程序中替换响应正文
【发布时间】:2015-11-22 14:45:51
【问题描述】:

我正在自定义处理程序中进行一些验证,以防出错从自定义处理程序向客户端发送响应。但是,客户端请求的原始有效负载也会发送回客户端。如何从响应消息中清空正文?如果我调试 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(""+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> 

这可能是一个错误还是为什么将原始正文发送回客户端?还有其他方法可以清除响应体吗?

感谢您的帮助。

【问题讨论】:

    标签: wso2 wso2esb esb


    【解决方案1】:

    要删除消息正文,您可以按以下顺序使用属性中介:

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

    您也可以使用脚本中介。

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

    如果两者都不起作用,请检查您的配置是否有日志中介。 (&lt;log level="full"/&gt;)。如果它在那里,请尝试将其删除。 (在一些较旧的 ESB 版本中,存在一个错误,当您添加 level=full 的日志中介时,响应主体不会被删除,因为它会导致主体被重建以进行日志记录。但是 AFAIK,它已在 4.8 中修复。 x 版本...所以您的问题可能不是这种情况...)

    【讨论】:

    • 对我来说,在 WSO2 ESB 4.8.1 中使用了脚本中介替代方案。
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多