2010-09-03 19 views
1

我有一個Axis2 Web服務,它在故障響應中引發不同的詳細信息,以便在呼叫中發出信號問題。如何從axis2故障響應中排除stacktrace

在某些時候,由於服務器錯誤(比web服務處理的錯誤更多),在錯誤詳細信息字符串中,我得到了所發生事件的完整堆棧跟蹤。我不希望客戶端看到堆棧跟蹤,所以(作爲一個捕獲所有錯誤),我想輸出一個簡單的「服務器錯誤」消息,沒有堆棧跟蹤,沒有任何東西。

截取故障響應和更改故障信息的最簡單方法是什麼?模塊是否是(複雜的)這樣做的唯一方式?

或者,Axis2中有沒有配置說不顯示堆棧跟蹤故障?

謝謝!

回答

-1

你能不只是趕上AxisFault

try { 
    // do stuff 
} catch (AxisFault f) { 
    log.error("Encountered error doing stuff", f); 
    throw new IOException("Server error"); 
} 
+0

我在哪裏可以放置這段代碼?錯誤從生成的MessageReceiverInOut類傳播,我在這裏捕獲所有代碼:** ...} catch(java.lang.Exception e){throw org.apache.axis2.AxisFault.makeFault(e); ... ** – userOfAxis2 2010-09-03 09:27:09

+0

您必須在某處使用'MessageReceiverInOut'類嗎? – 2010-09-03 09:51:51

+0

org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver使用這個。 * MessageReceiverInOut類由我的wsdl文件中的codegen工具自動生成。破解它並添加我的東西似乎很脆弱。 – userOfAxis2 2010-09-03 10:45:28

1

我曾經有過類似的問題。不知道是否有一些配置關閉堆棧跟蹤,至少在那一刻我找不到(這將是最好的解決方案)。相反,我選擇了一種快速和骯髒的方法,主要是由於時間不足。

我所做的是爲Axis2提供故障細節。 Axis2 servlet有一個名爲handleFault的方法,它處理產生錯誤。更確切地說(更深入的調用)MessageContextBuilder.createFaultEnvelope方法用於構造故障元素。

具有詳細的堆棧跟蹤是默認行爲,但有一些方法可以指定您的自定義細節。一種方法是使用AxisFaultdetail字段,您可以在其中添加OMElement(請參閱AXIOM)以放入故障中。所以,你做這樣的事情:不是異常堆棧跟蹤

public class MyServlet extends AxisServlet { 
    ... 
    public void handleFault(MessageContext msgContext, OutputStream out, AxisFault e) { 
    OMFactory factory = OMAbstractFactory.getOMFactory(); 
    OMElement detail = factory.createElement(...); 
    e.setDetail(detail); 
    // now let axis do its thing with the new improved AxisFault 
    super.handleFault(msgContext, out, e); 
    } 
} 

現在,你的細節將被代替添加。

0

Axis2中使用Apache通用日誌,你看到在Axis2的代碼看起來類似於生成的AxisFault消息:

try { 
    executeMethod(httpClient, msgContext, url, getMethod); 
    handleResponse(msgContext, getMethod); 
} catch (IOException e) { 
    log.info("Unable to sendViaGet to url[" + url + "]", e); 
    throw AxisFault.makeFault(e); 
} finally { 
    cleanup(msgContext, getMethod); 
} 

[該代碼段來自org.apache。 axis2.transport.http.HTTPSender]

有關如何設置消息的日誌級別和目標的說明,請參閱apache commons logging user guide

希望這會有所幫助。