2

呼び出しの問題を通知するために、障害応答でさまざまな詳細メッセージをスローするAxis2Webサービスがあります。

ある時点で、サーバーエラー(Webサービスによって処理されるエラー以外)が原因で、障害の詳細文字列に、何が起こったかの完全なスタックトレースが表示されます。クライアントにスタックトレースを表示させたくないので、(すべてのエラーをキャッチするために)スタックトレースも何も含まない単純な「サーバーエラー」メッセージを出力したいと思います。

障害応答を傍受し、障害メッセージを変更する最も簡単な方法は何ですか。モジュールはこれを行う(複雑な)唯一の方法ですか?

または、Axis2に、スタックトレースを誤って表示しないように指示する構成がありますか?

ありがとう!

4

3 に答える 3

1

私はかつて同様の問題を抱えていました。スタックトレースの表示をオフにする設定があるかどうかはわかりませんが、少なくともその時点で見つけることができたものはありません(それが最善の解決策でした)。代わりに、主に時間がないため、迅速で汚いアプローチを選択しました。

私がしたことは、Axis2 に障害の詳細を自分で提供することでした。Axis2 サーブレットにはhandleFault、障害の生成を処理するメソッドが呼び出されています。より正確には (呼び出しのより深いところで)、このMessageContextBuilder.createFaultEnvelopeメソッドは fault 要素を構築するために使用されます。

詳細にスタックトレースを含めるのがデフォルトの動作ですが、カスタムの詳細を指定する方法があります。1 つの方法は、障害に配置される( AXIOMを参照) を追加できるtheAxisFaultのフィールドを使用することです。だからあなたは次のようなことをします:detailOMElement

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);
  }
}

これで、例外スタック トレースの代わりに、詳細が追加されます。

于 2010-09-09T20:11:18.133 に答える
0

Axis2 は Apache commons ロギングを使用し、表示されている AxisFault メッセージは、次のような Axis2 のコードによって生成されます。

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を参照してください。

お役に立てれば。

于 2010-09-17T06:29:14.560 に答える
-1

AxisFaultをキャッチすることはできませんか

try {
    // do stuff
} catch (AxisFault f) {
    log.error("Encountered error doing stuff", f);
    throw new IOException("Server error");
}
于 2010-09-03T09:21:39.550 に答える