Axis: обработка исключений в Handler.onFault(...)

 
 
 
Сообщения:1688
Всем привет!
Подскажите, плз, как получить (где взять) объект Exception в Handler.onFault(MessageContext ctx), кот. привел к вызову этого метода?

Заранее благодарен.
 
 
Сообщения:3874
http://www.kickjava.com/src/test/chains/TestChainFault.java.htm
 
 
Сообщения:1688
Решил проблему! :)
Так как exception порождается в сервисе, и из MessageContext можно получить объект сервиса, то
1. Просто сохраняем объект exception в HashMap внутри сервиса (ключом может быть Thread.currentThread().hashCode()):
private void saveFaultCause(Throwable ex) {
  _faults.put( new Long(Thread.currentThread().hashCode()), ex );
}


2. Создаем метод в классе сервиса для получения объекта exception:
public Throwable getFaultCause() {
  return _faults.get( new Long(Thread.currentThread().hashCode()) );
}


3. В onFault handler'a
public void onFault(MessageContext msgCtx) {
  try {
    MyService srv = (MyService) msgCtx.getAxisEngine().getApplicationSession().get(msgCtx.getTargetService());
    Throwable myException = srv.getFaultCause();
    // Делаем всё, что надо с объектом myException 
    // ...
  } catch (SOAPException e) {
    e.printStackTrace();
  } catch (AxisFault e) {
    e.printStackTrace();
}
 
Модераторы:wedens
Сейчас эту тему просматривают:Нет