Почему мой unmarshaller ждет, пока у него не появится следующий элемент start для возврата с использованием XMLStreamReader?

У меня есть скрипт Python и тест Java, работающие бок о бок. Они оба пытаются сделать одно и то же - открыть сокет, получить бесконечный поток XML и анализировать XML по мере его поступления. Скрипт Python использует Expat, в то время как тест Java использует XMLStreamReader и Unmarshaller.

Сценарий Python всегда на один шаг / объект опережает Java-тест, например, когда у меня достаточно XML для демаршалирования объекта, скрипт Python немедленно делает это, в то время как Java-демаршаллер только НАЧИНАЕТ демаршаллинг и ЖДЕТ начала следующего Начальный тег XML для потоковой передачи перед возвратом ранее немаршализованного объекта. Если я получу XML-объекты с интервалом в 20 секунд, непременно Java-демаршаллер НЕ вернется, пока не будет получено следующее.

  1. XML получен
  2. Python и Java начинают демаршаллинг
  3. Python возвращается немедленно
  4. Получен новый XML
  5. Java unmarshaller возвращается
  6. Вернуться к шагу 2

    XMLStreamReader reader = XMLInputFactory.newFactory (). CreateXMLStreamReader (socket.getInputStream ());

    while (reader.hasNext ()) {// Unmarshal here - зависает до следующего XML-кода}

XMLStreamReader - это com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.

Эта проблема, кажется, также описывает это довольно хорошо: http://java.net/jira/browse/JAXB-419

Классы 2.1.10, упомянутые в этом выпуске, представляются следующими:

1 ответ

Unmarshaller хочет поместить "курсор" на событие после события конечного элемента той части, которую он удалил. Поэтому он "зависает", пока что-то не станет доступным. Из документа API:

Этот метод предполагает, что анализатор находится в событии START_DOCUMENT или START_ELEMENT. Отмена сортировки будет выполняться от этого начального события до соответствующего конечного события. Если этот метод успешно завершится, читатель будет указывать на токен сразу после события завершения.

Тем не менее, подойдет любое событие XML: может быть, вы можете сделать какую-то хитрость, вставив комментарий XML в поток...

Другие вопросы по тегам