2014-06-16 19 views
5

Tôi đang thực hiện một số xác thực trong trình xử lý tùy chỉnh và trong trường hợp lỗi gửi phản hồi về máy khách từ trình xử lý tùy chỉnh. Tuy nhiên, tải trọng ban đầu của yêu cầu của khách hàng cũng được gửi lại cho khách hàng. Làm thế nào cơ thể có thể được làm trống từ thông điệp phản ứng? Nếu tôi gỡ lỗi SoapBody nó có vẻ là trống rỗng nhưng vẫn bằng cách nào đó tải trọng ban đầu được gửi lại cho khách hàng.Cách thay thế nội dung phản hồi trong WSO2 ESB 4.8.1 Trình xử lý tùy chỉnh

Đây là chức năng của tôi để gửi tin nhắn lại cho người dùng.

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()); có vẻ trống nhưng cơ thể vẫn còn nguyên bản (trọng tải) được gửi lại cho khách hàng.

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

Đây có thể là lỗi hoặc tại sao cơ thể ban đầu được gửi lại cho khách hàng? Có phương pháp nào khác để xóa cơ thể phản hồi không?

Cảm ơn bạn đã được trợ giúp.

Trả lời

7

Để thả nội dung thư, bạn có thể sử dụng một trung gian bất động sản trong chuỗi như sau:

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

Hoặc bạn có thể sử dụng một trung gian hòa giải kịch bản là tốt.

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

Nếu cả hai không hoạt động, hãy kiểm tra xem cấu hình của bạn có trình trung gian nhật ký hay không. (<log level="full"/>). Nếu nó ở đó, hãy thử gỡ bỏ nó. (Trong một số phiên bản ESB cũ hơn, đã xảy ra lỗi khi bạn thêm trình ghi nhật ký với mức = full, thân phản hồi không bị giảm coz khiến cơ thể được xây dựng lại để ghi nhật ký. Nhưng AFAIK, nó đã được sửa trong 4.8 .x phiên bản ... vì vậy đây có thể không phải là vấn đề của bạn ...)

+0

Đối với tôi đã làm việc thay thế hòa giải tập lệnh trong WSO2 ESB 4.8.1. – Chilcano

Các vấn đề liên quan