我有一个并行运行的Python脚本和Java测试。他们都试图做同样的事情 - 打开一个套接字,接收一个永无止境的XML流,并在收到XML时解析它。 Python脚本使用Expat,而Java测试使用的是XMLStreamReader和Unmarshaller。
Python脚本始终是Java测试之前的一步/对象,例如当我有足够的XML来解组一个对象时,Python脚本会立即这样做,而Java unmarshaller只会BEGINS解组,而WAITS会在返回先前未编组的对象之前将下一个XML开始标记的开头流入。如果我以相隔20秒的速度接收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类似乎是:
答案 0 :(得分:0)
unmarshaller想要将“光标”放在事件之后它已经解组的部分的结束元素事件。因此,它会“挂起”,直到有东西可用。来自API doc:
此方法假定解析器位于START_DOCUMENT或 START_ELEMENT活动。解组将从此开始事件中完成 到相应的结束事件。如果此方法成功返回, 读者将在结束事件发生后立即指向令牌。
但是,任何XML事件都可以:也许你可以通过在流中插入XML注释来做一些技巧......