Существует ли Синтаксический анализатор Push-based/Non-blocking XML для Java?

Я получал

javax.net.ssl.SSLHandshakeException: Chain validation failed

и

java.security.cert.CertPathValidatorException: Response is unreliable: its validity interval is out-of-date

решение, которое работало для меня, заключалось в принудительной холодной загрузке эмулятора через диспетчер виртуальных устройств -> выпадающий список действий -> холодная загрузка Теперь

17
задан Michael Barker 21 June 2009 в 12:05
поделиться

5 ответов

Это сообщение (апрель 2009 г.) из списка рассылки Xerces J-Users, где у исходного плаката точно такая же проблема. Дан один потенциально очень хороший ответ «Джеффа», но нет ответа на исходный ответ автора:

http://www.nabble.com/parsing-an-xml-document-chunk-by-chunk -td22945319.html

Это потенциально достаточно ново, чтобы попасть в список или, по крайней мере, помочь с поиском.

Изменить

Нашел еще одну полезную ссылку, упоминающую библиотеку под названием Woodstox и описывающую состояние Stream и . Парсеры на базе NIO и некоторые возможные подходы к эмуляции потока:

http://markmail.org/message/ogqqcj7dt3lwkbov

3
ответ дан 30 November 2019 в 14:06
поделиться

Редактировать: Теперь понятно. Вы получаете XML кусками и хотите передать его соответствующему синтаксическому анализатору XML. Итак, вам нужен объект, который представляет собой очередь на одном конце и InputStream на другом?

Вы можете агрегировать байтовые массивы, полученные в ByteArrayOutputStream, преобразовать его в ByteArrayInputStream и передать его в SAXParser.

] Или вы можете проверить пару PipedInputStream / PipedOutputStream. В этом случае вам нужно будет выполнить синтаксический анализ в другом потоке, поскольку синтаксический анализатор SAX использует текущий поток для генерации событий, блокируя ваш receive ().

Изменить : Основываясь на комментариях, я предлагаю выбрать маршрут агрегации . Вы собираете куски в ByteArrayOutputStream. Чтобы узнать, все ли вы получили фрагменты для своего XML, проверьте, содержит ли текущий фрагмент или содержимое ByteArrayOutputStream ваш конечный тег корневого узла XML. Затем вы можете просто передать данные в SAXParser, который теперь может без проблем работать в текущем потоке. Чтобы избежать ненужного повторного создания массива, вы можете реализовать свою собственную несинхронизированную оболочку простого байтового массива или искать такую ​​реализацию.

4
ответ дан 30 November 2019 в 14:06
поделиться

Извините, мне не удалось решить эту проблему. Мне не удалось найти парсер, который мне нужен. Но я думаю написать его самостоятельно. Очень простой: точно так же, как исследование фискальности, но достаточно, чтобы решить мою проблему и, надеюсь, вашу. К счастью, я был очень занят, и следующие две недели я уйду, но, может быть, в июле я начну над этим работать. Я дам тебе знать, как только у меня что-нибудь заработает.

mt

0
ответ дан 30 November 2019 в 14:06
поделиться

Проверьте openfire XMLLeightweightParser и то, как он генерирует сообщения XML из отдельных фрагментов из-за NIO. Весь проект - отличный источник ответов на вопросы NIO и XMPP.

1
ответ дан 30 November 2019 в 14:06
поделиться

Удивительно, но никто не упомянул один парсер Java XML, который реализует неблокирующий ("асинхронный") синтаксический анализ: Aalto. Частично причиной может быть отсутствие документации (и ее низкий уровень активности). Aalto реализует базовый API Stax, а также небольшие расширения, позволяющие отправлять ввод (эта часть еще не доработана; функциональность существует, но API не доработан). Для получения дополнительной информации вы можете посетить связанную дискуссионную группу.

7
ответ дан 30 November 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: