Определите собственный XMLEventReader для реализации интерфейса Closeable
Я хотел бы использовать попытку с ресурсами с XMLEventReader
,
Как я узнал, XMLEventReader
это просто интерфейс и объект, который я получаю XMLInputFactory.newInstance().createXMLEventReader(stream)
из com.sun.xml.internal.stream.XMLEventReaderImpl
учебный класс.
Обычно я бы расширил этот класс для реализации Closeable
, Но я не могу получить к нему доступ (я не могу открыть его в своей IDE).
Я нашел его код в Интернете. Но я не хочу копировать его в новый класс, просто чтобы сделать его доступным.
Так почему я не могу получить доступ к этому классу и какое лучшее решение сделать Closeable
XMLEventReader
?
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);
}