簡體   English   中英

如何在WSO2 ESB 4.8.1自定義處理程序中替換響應主體

[英]How to replace response body in WSO2 ESB 4.8.1 Custom Handler

我正在自定義處理程序中進行一些驗證,並且在從自定義處理程序將響應發送回客戶端時出錯。 然而,客戶端請求的原始有效載荷也被發送回客戶端。 身體如何從反應信息中清空? 如果我調試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> 

這可能是一個錯誤或為什么原始的身體被送回客戶端? 是否還有其他方法可以清除響應體?

謝謝你的幫助。

要刪除郵件正文,可以按順序使用屬性介體,如下所示:

<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版本...所以這可能不是你的問題...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM