Мне нужно понять приоритет обработки исключений Java.
У меня есть класс Controller, имеющий класс NodeManager, имеющий класс NameManager.
NameManager имеет метод:
public LriNode getLriNode(...) throws HttpErrorException
{
if(condition)
throw new HttpErrorException (status);
}
класс NodeManager использует предыдущий метод в следующем
public void nodeWriter(...) throws HttpErrorException
{
...
try
{
//this can throw an HttpErrorExeption
lriNode = nameManager.getLriNode(resourceName);
...
}
catch (HttpErrorException e)
{
if(e.getStatus().name().equals(HttpStatus.NOT_FOUND))
{
//here can be thrown an HttpErrorExeption too
do work
}
else
{
e.printStackTrace();
}
}
}
и, наконец, контроллер класса использует предыдущий метод в следующем
@RequestMapping(method=RequestMethod.PUT, value="document/{name}")
public ModelAndView putDocument(@RequestBody String body, @PathVariable String name, HttpServletResponse response, HttpServletRequest request)
{
Source source = new StreamSource(new StringReader(body));
try
{
NodeManager.nodeWriter(...);
return new ModelAndView(XML_VIEW_NAME, "document", document);
}
catch (HttpErrorException e)
{
response.setStatus(e.getStatus().value());
e.printStackTrace();
}
return null;
}
Ну, в этом-то и дело: когда NameManager выдает HttpErrorException
, я ожидаю, что блок try-catch в методе nodeWriter()
NodeManger будет выполнен с исключением. Случается так, что элемент управления возвращается в класс Controller и выполняется его блок try-catch. Похоже, что оператор throws HttpErrorException
в методе nodeWriter()
имеет приоритет над внутренним блоком try-catch.
Может кто-нибудь объяснить мне такую систему приоритетов обработки исключений?