У меня есть скрипт Python и тест Java, работающие параллельно. Они оба пытаются сделать одно и то же - открыть сокет, получить бесконечный поток XML и анализировать XML по мере его поступления. Скрипт Python использует Expat, в то время как тест Java использует XMLStreamReader и Unmarshaller.
Скрипт Python всегда на один шаг / объект опережает тест Java, например когда у меня достаточно XML для демаршалирования объекта, скрипт Python немедленно делает это, в то время как Java-демаршаллер только НАЧИНАЕТ демаршаллинг и ЖДЕТ начала следующего тега XML для начала перед возвратом ранее немаршалированного объекта. Если я получу XML-объекты с интервалом в 20 секунд, непременно Java-демаршаллер НЕ вернется, пока не будет получено следующее.
- XML получил
- Python и Java начинают демаршаллинг
- Python возвращается немедленно
- Получен новый XML
- Java unmarshaller возвращает
Вернуться к шагу 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, упомянутые в этом выпуске, выглядят так: