Как проглотить IOException как пользовательскую исключительную ситуацию времени выполнения Java 8 - PullRequest
0 голосов
/ 17 апреля 2019

Я использую библиотеку Apache PdfBox и замечаю, что почти все выдает IOException, и довольно неприятно иметь дело с тем, что большинство IOException на самом деле должны быть недопустимыми исключениями состояния, но кажется, что apache хочет, чтобы клиенты имели дело с этимони заставили их как проверенные исключения.В любом случае ...

Мой вопрос заключается в том, как обернуть IOException в пользовательское исключение, расширяющее RuntimeException, чтобы с API было проще иметь дело?

Пример:

private final PDDocument document;
private final PDPage page;
private final PDFont font;

public PdfBoxWrapper(PDDocument document, PDPage page, PDFont font)
{
    this.document = document;
    this.page = page;
    this.font = Objects.isNull(font) ? PDType1Font.HELVETICA : font;

    this.document.addPage(this.page);

    try 
    {
        this.canvas = new PDPageContentStream(this.document, this.page);
    } 

    catch (IOException exception) {
        logger.error(exception.getMessage());
    }
}

Обратите внимание, как мне нужно обернуть PDPageContentStream в попытку перехвата.Как обернуть IOException от PdfBox как PdfBoxIllegalStateException?

как показано ниже:

public class PdfBoxIllegalStateException extends RuntimeException
{
    public PdfBoxIllegalStateException(String message)
    {
        super(message);
    }

    public PdfBoxIllegalStateException(String message, Throwable cause)
    {
        super(message, cause);
    }
}

1 Ответ

3 голосов
/ 17 апреля 2019

Вы можете поймать IOException, затем завернуть его в PdfBoxIllegalStateException и затем бросить снова.

private final PDDocument document;
private final PDPage page;
private final PDFont font;

public PdfBoxWrapper(PDDocument document, PDPage page, PDFont font)
{
    this.document = document;
    this.page = page;
    this.font = Objects.isNull(font) ? PDType1Font.HELVETICA : font;

    this.document.addPage(this.page);

    try 
    {
        this.canvas = new PDPageContentStream(this.document, this.page);
    } 

    catch (IOException exception) {
        logger.error(exception.getMessage());
        throw new PdfBoxIllegalStateException(exception);
    }
}
...