Я пытаюсь получить поток событий XML по каналу Java NIO. Я новичок в разборе как NIO, так и StAX, так что я мог бы легко что-то пропустить:)
Мой поиск привел меня к нескольким реализациям SAX и StAX, но все они, похоже, работают на InputStreams и InputSources - не на каналах NIO. Две самые близкие попытки, которые я предпринял, состояли в том, чтобы получить InputStream из канала и создать PipedInputStream:
// method 1
PipedOutputStream out = new PipedOutputStream();
InputStream in = new PipedInputStream(out);
PrintWriter writer = new PrintWriter(out);
//method 2
InputStream in = channel.socket().getInputStream()
//method 3
IputStream in = Channels.newInputStream(channel);
с последующим:
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance()
.createXMLStreamReader(in);
//...
Когда вышеуказанный код используется с методом 1, он блокируется в строке createXMLStreamReader. Когда используются методы 2/3, они немедленно генерируют исключение IllegalBlockingModeException (я понимаю, почему). Может быть, нужен новый подход?
Моя цель - сделать так, чтобы неблокирующий сервер выбирал => принимал символьные данные от клиента => анализировал их на события XML, используя определенную кодировку =>, пересылал этот объект события в другой поток для обработки => и возвращался к выбор.
Так я что-то упускаю или есть лучший подход, который можно использовать? Если так, что?
Спасибо!