1

同様の質問がいくつかありますが、ほとんどがC#です。

@Override
public void setExtraItemsDone(XMPPResourceConnection session) throws NotAuthorizedException 
{
    try
    {
        cp1 = Calendar.getInstance().getTimeInMillis();

        try 
        {
             ...

        } catch (TigaseDBException e) {

                         ...

        } catch (UnsupportedOperationException e) {

                         ...
        }


    } catch (Exception e) {

        cp2 = Calendar.getInstance().getTimeInMillis();
        throw new NotAuthorizedException(e.getMessage() + "; method took " + (cp2 - cp1) + " ms", e); 
    }

私は基本的に、MySQLTimeoutExceptionをキャッチし、それをNotAuthorizedExceptionに変換することを目指しています(TigaseDBExceptionとUnsupportedOperationException以外の他のものを監視しながら)最後のcatchブロックで。どういうわけか、Javaは私のマスタープランを逃れています。

ログはストレートを示しています

com.mysql.jdbc.exceptions.MySQLTimeoutException: Statement cancelled due to timeout or client request
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1754)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
at tigase.db.jdbc.JDBCRepository.addDataList(JDBCRepository.java:183)
at tigase.db.jdbc.JDBCRepository.setDataList(JDBCRepository.java:1175)
at tigase.db.UserRepositoryMDImpl.setDataList(UserRepositoryMDImpl.java:651)
at tigase.xmpp.RepositoryAccess.setDataList(RepositoryAccess.java:1152)
at tigase.xmpp.RepositoryAccess.setOfflineDataList(RepositoryAccess.java:1204)
**at tigase.xmpp.impl.XGateRoster.setExtraItemsDone(XGateRoster.java:370)**
at tigase.xmpp.impl.DynamicRoster.setExtraItemsDone(DynamicRoster.java:377)
at tigase.xmpp.impl.JabberIqRoster.dynamicSetRequest(JabberIqRoster.java:178)
at tigase.xmpp.impl.JabberIqRoster.process(JabberIqRoster.java:329)
at tigase.server.xmppsession.SessionManager$ProcessorWorkerThread.process(SessionManager.java:2135)
at tigase.util.WorkerThread.run(WorkerThread.java:132)

私が知る限り、スタックトレースの太線は、例外をNotAuthorizedExceptionの種類に変更しているはずです。私は何が欠けていますか?

ありがとう

4

1 に答える 1

0

同意します。問題は、投稿されたコードにありません。あなたの仮定を確認してください。XGateRoster.setExtraItemsDoneの他のオーバーロードはありますか?Jadを使用して、実行しているクラスファイルを逆コンパイルしてみてください。行番号を表示するオプションを有効にすると、表示している(逆コンパイルされた)ソースが実行中のコードとまったく同じであることを確認できます。あなたが見ているログメッセージがどこから来ているかを正確に知っていますか?多分それは、それがスローされた後、このキャッチブロックと例外変換コードがヒットする前に、スタックの上位から来ています。

于 2012-05-28T14:09:59.737 に答える