Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的解组器要等到具有以下start元素时才使用XMLStreamReader返回?_Java_Xml_Jaxb_Stax - Fatal编程技术网

Java 为什么我的解组器要等到具有以下start元素时才使用XMLStreamReader返回?

Java 为什么我的解组器要等到具有以下start元素时才使用XMLStreamReader返回?,java,xml,jaxb,stax,Java,Xml,Jaxb,Stax,我有一个Python脚本和Java测试并排运行。它们都试图做完全相同的事情——打开一个套接字,接收一个永无止境的XML流,并在接收XML时解析它。Python脚本使用Expat,而Java测试使用XMLStreamReader和解组器 Python脚本总是比Java测试提前一步/对象,例如,当我有足够的XML来解组一个对象时,Python脚本会立即这样做,而Java解组器只开始解组,并等待下一个XML开始标记的开始,然后返回先前解组的对象。如果每隔20秒收到XML对象,Java解组器在收到下一个

我有一个Python脚本和Java测试并排运行。它们都试图做完全相同的事情——打开一个套接字,接收一个永无止境的XML流,并在接收XML时解析它。Python脚本使用Expat,而Java测试使用XMLStreamReader和解组器

Python脚本总是比Java测试提前一步/对象,例如,当我有足够的XML来解组一个对象时,Python脚本会立即这样做,而Java解组器只开始解组,并等待下一个XML开始标记的开始,然后返回先前解组的对象。如果每隔20秒收到XML对象,Java解组器在收到下一个对象之前不会返回

  • 收到的XML
  • Python和Java开始解组
  • Python立即返回
  • 收到新的XML
  • Java解组器返回
  • 回到步骤2

    XMLStreamReader reader=XMLInputFactory.newFactory().createXMLStreamReader(socket.getInputStream())

    while(reader.hasNext()){ //在这里解组——挂起,直到下一个XML出现 }

  • XMLStreamReader是com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl

    这个问题似乎也很好地描述了这一点:

    该问题中提到的2.1.10类似乎是:


    解组器希望将“光标”放置到它已解组的部分的结束元素事件之后的事件。因此,它“挂起”直到有东西可用。从API文档:

    此方法假定解析器位于START\u文档或 启动元素事件。将从此开始事件开始执行解组 到相应的结束事件。如果此方法成功返回, 读卡器将在结束事件之后指向令牌


    但是,任何XML事件都可以:也许您可以通过在流中插入XML注释来实现一些技巧…

    解组程序希望将“光标”放置到它已解组的部分的结束元素事件之后的事件。因此,它“挂起”直到有东西可用。从API文档:

    此方法假定解析器位于START\u文档或 启动元素事件。将从此开始事件开始执行解组 到相应的结束事件。如果此方法成功返回, 读卡器将在结束事件之后指向令牌


    但是,任何XML事件都可以:也许您可以通过在流中插入XML注释来实现一些技巧…

    可能与Java代码解析XML时引发事件的顺序有关,因为最好的建议是使用源代码!关于查看源代码的观点很好。我试过了,但无论出于什么原因,我所拥有的解组器的实现源在本地都不可用。我将在线查看源代码,您不会说您正在使用哪个JavaXMLStreamReader实现(它是一个接口,而不是一个具体的类)。有些实现不是很好。我经验中最好的是Woodstox。我在问题中添加了XMLStreamReader类型。在测试中,我还将XMLStreamReader更改为XMLEventReader,现在没有遇到此问题。问题仍然存在——问题出在哪里?可能在连接器的最后一个任务“超越结束标记”(staxStreamReader.next()vs.event=staxEventReader.nextEvent())中?可能与Java代码解析XML时引发事件的顺序有关,因为最好的建议是使用源代码!关于查看源代码的观点很好。我试过了,但无论出于什么原因,我所拥有的解组器的实现源在本地都不可用。我将在线查看源代码,您不会说您正在使用哪个JavaXMLStreamReader实现(它是一个接口,而不是一个具体的类)。有些实现不是很好。我经验中最好的是Woodstox。我在问题中添加了XMLStreamReader类型。在测试中,我还将XMLStreamReader更改为XMLEventReader,现在没有遇到此问题。问题仍然存在——问题出在哪里?可能是在连接器的最后一个任务“移动到结束标记之外”(staxStreamReader.next()vs.event=staxEventReader.nextEvent())中?