Обработка исключений между уровнями - PullRequest
0 голосов
/ 11 сентября 2018

У меня сейчас есть проблема, которую я не могу решить.У меня есть проект в JDeveloper, использующий ADF.Когда где-то на уровне модели возникает исключение (Throwable), я не могу его перехватить на уровне просмотра.Позвольте мне объяснить это лучше:

В представлении у меня есть Transaction.java, где

public void save(){
     try{ 
         Boolean res= (Boolean) context.get("res"); //value obtained from front-end
         OperationBinding op = this.getBindings().getOperationBinding("methodThatThrowsException"); 
         op.getParamsMap().put("res", res);
         op.execute();//line that should throw exception
     }catch(ClassCastException cce){
          showMessage(cce.getMessage()); //pop up with a description of the exception
}

Затем на уровне модели:

public void methodThatThrowsException(Boolean res) throws ClassCastException {
     try{ 
         Object obj = res;
         Integer badCoding = (Integer) obj; //line that throws exception
     }catch(ClassCastException e){
           //clean-up code
        }
}

methodThatThrowsException сгенерируетClassCastException, но он не обнаружен в методе save.Я не знаю что не так.Я даже пытался и не смог добавить в save после op.execute();

if(!op.getErrors().isEmpty()){
for(Throwable t : op.getErrors()){
    if (t instanceof Exception){
        Exception e = (Exception) t;
        if (e instanceof RuntimeException)
            RuntimeException re = (RuntimeException) e;
            if(re instanceof ClassCastException)
                throw t;
    }

}

Но с этим ужасным обходным путем t никогда не выбрасывается, потому что это JBOException, а не ClassCastException, когда он находится на уровне просмотра.

Что я могу сделать?Любое предложение работает для меня прямо сейчас.Заранее спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Обработка исключений на уровне связывания нелогична для всех, кто знаком с java:

Boolean res= (Boolean) context.get("res"); //value obtained from front-end
perationBinding op = this.getBindings().getOperationBinding("methodThatThrowsException"); 
op.getParamsMap().put("res", res);
op.execute();//line that should throw exception
//grab the exception this way
op.getErrors()
...