0

以下のように @Transactional で注釈が付けられた 1 つのメソッド add() を持つ DAO がある春の Web サービスがあります。

class MyDAOClass {

    @Transactional(rollbackFor = Exception.class)
    add(){
        doAdd1();
        doAdd2();
        doAdd3();
    }

    ...

    doAdd2() throws MyException {
        throw new MyException ("My Exception Message");
    }

    ...

}

サービス層:

ここで Web サービスを呼び出すと、サービス レイヤーが内部的にこのクラスの add() メソッドを呼び出します。サービス層は MyException e をキャッチしてメッセージを取得し、マーシャリングしてクライアントに送り返す応答オブジェクトに入れます。しかし、doAdd2() メソッドが例外をスローすると、トランザクションがロールバックされ、「My Exception Message」の代わりに、クライアント側で次のエラー メッセージが表示されます。

<SOAP-ENV:Body>
  <SOAP-ENV:Fault>
     <faultcode>SOAP-ENV:Server</faultcode>
     <faultstring xml:lang="en">Transaction rolled back because it has been marked as rollback-only</faultstring>
  </SOAP-ENV:Fault>

4

1 に答える 1

0

どうでも。問題が見つかりました。サービス クラスにも @Transactional のアノテーションを付けました。この注釈を削除した後、問題は解決しました。なぜこのメッセージが表示されるのか不思議に思っている人のために、私はそれを取っておきます.

于 2012-11-16T17:47:31.597 に答える