Определите собственный XMLEventReader для реализации интерфейса Closeable

Я хотел бы использовать попытку с ресурсами с XMLEventReader,

Как я узнал, XMLEventReader это просто интерфейс и объект, который я получаю XMLInputFactory.newInstance().createXMLEventReader(stream) из com.sun.xml.internal.stream.XMLEventReaderImpl учебный класс.

Обычно я бы расширил этот класс для реализации Closeable, Но я не могу получить к нему доступ (я не могу открыть его в своей IDE).
Я нашел его код в Интернете. Но я не хочу копировать его в новый класс, просто чтобы сделать его доступным.

Так почему я не могу получить доступ к этому классу и какое лучшее решение сделать CloseableXMLEventReader?

1 ответ

Решение

Как насчет этого:

public class CloseableXmlEventReader implements XMLEventReader, AutoCloseable{

    private final XMLEventReader internal;

    public CloseableXmlEventReader(XMLEventReader internal) {
        this.internal = internal;
    }

    @Override
    public XMLEvent nextEvent() throws XMLStreamException {
        return internal.nextEvent();
    }

    @Override
    public boolean hasNext() {
        return internal.hasNext();
    }

    @Override
    public XMLEvent peek() throws XMLStreamException {
        return internal.peek();
    }

    @Override
    public String getElementText() throws XMLStreamException {
        return internal.getElementText();
    }

    @Override
    public XMLEvent nextTag() throws XMLStreamException {
        return internal.nextTag();
    }

    @Override
    public Object getProperty(String name) throws IllegalArgumentException {
        return internal.getProperty(name);
    }

    @Override
    public void close() throws XMLStreamException {
        internal.close();
    }

    @Override
    public Object next() {
        return internal.next();
    }
}

Используйте как это:

try(CloseableXmlEventReader reader = 
        new CloseableXmlEventReader(XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream("test.xml")))) {

} catch (XMLStreamException | FileNotFoundException ex) {
    Logger.getLogger(CloseableXmlEventReader.class.getName()).log(Level.SEVERE, null, ex);
}
Другие вопросы по тегам