2014-06-16 8 views
5

Ich führe eine Validierung im benutzerdefinierten Handler durch und im Falle eines Fehlers kann die Antwort vom benutzerdefinierten Handler zurück an den Client gesendet werden. Die ursprüngliche Nutzlast der Client-Anfrage wird jedoch auch an den Client zurückgesendet. Wie Körper kann von Antwortnachricht geleert werden? Wenn ich SoapBody debugge, scheint es leer zu sein, aber irgendwie wird ursprüngliche Nutzlast zurück zum Klienten geschickt.So ersetzen Sie den Antworttextkörper in WSO2 ESB 4.8.1 Benutzerdefinierter Handler

Hier ist meine Funktion zum Senden von Nachrichten zurück zum Benutzer.

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.fehler ("" + msgCtx.getEnvelope()); scheint leer zu sein, aber der ursprüngliche Körper (Payload) wird zurück zum Client gesendet.

Ist dies möglicherweise ein Fehler oder warum Originalkörper zurück zum Client gesendet wird? Gibt es noch andere Methoden, um den Antworttext zu löschen?

Danke für jede Hilfe.

Antwort

7

den Nachrichtentext löschen, Sie eine Eigenschaft Vermittler in der Reihenfolge verwenden können wie folgt:

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

Alternativ Sie auch ein Skript Mediator verwenden können.

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

Wenn beides nicht funktioniert, überprüfen Sie, ob Ihre Konfiguration über einen Protokollmediator verfügt. (<log level="full"/>). Wenn es da ist, versuche es zu entfernen. (In einigen älteren ESB-Versionen gab es einen Fehler, bei dem ein log-Mediator mit level = full, der Antworttext nicht gelöscht wird, weil der Body für die Protokollierung neu erstellt wird. Aber AFAIK wurde in 4.8 behoben .x Versionen ... so ist das vielleicht nicht der Fall für dein Problem ...)

+0

Für mich arbeitete die Skript Mediator Alternative in WSO2 ESB 4.8.1. – Chilcano