我曾經有過類似的問題。不知道是否有一些配置關閉堆棧跟蹤,至少在那一刻我找不到(這將是最好的解決方案)。相反,我選擇了一種快速和骯髒的方法,主要是由於時間不足。
我所做的是爲Axis2提供故障細節。 Axis2 servlet有一個名爲handleFault
的方法,它處理產生錯誤。更確切地說(更深入的調用)MessageContextBuilder.createFaultEnvelope
方法用於構造故障元素。
具有詳細的堆棧跟蹤是默認行爲,但有一些方法可以指定您的自定義細節。一種方法是使用AxisFault
的detail
字段,您可以在其中添加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);
}
}
現在,你的細節將被代替添加。
我在哪裏可以放置這段代碼?錯誤從生成的MessageReceiverInOut類傳播,我在這裏捕獲所有代碼:** ...} catch(java.lang.Exception e){throw org.apache.axis2.AxisFault.makeFault(e); ... ** – userOfAxis2 2010-09-03 09:27:09
您必須在某處使用'MessageReceiverInOut'類嗎? – 2010-09-03 09:51:51
org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver使用這個。 * MessageReceiverInOut類由我的wsdl文件中的codegen工具自動生成。破解它並添加我的東西似乎很脆弱。 – userOfAxis2 2010-09-03 10:45:28