のドキュメントに scala.xml.pull.XMLEventReader
は、として使用できることが記載されていIterator[XMLEvent]
ます。ただし、そうすると、XMLエラーによってメソッド呼び出しが終了しなくなります。例えば:
scala> new xml.pull.XMLEventReader(io.Source.fromString("<a><b></a>")).toArray
Exception in thread "XMLEventReader" scala.xml.parsing.FatalError: expected closing tag of b
at scala.xml.parsing.MarkupParser$class.errorNoEnd(MarkupParser.scala:41)
at scala.xml.pull.XMLEventReader$Parser.errorNoEnd(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParserCommon$class.xEndTag(MarkupParserCommon.scala:93)
at scala.xml.pull.XMLEventReader$Parser.xEndTag(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParser$class.element1(MarkupParser.scala:543)
at scala.xml.pull.XMLEventReader$Parser.element1(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParser$class.content1(MarkupParser.scala:396)
at scala.xml.pull.XMLEventReader$Parser.content1(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParser$class.content(MarkupParser.scala:417)
at scala.xml.pull.XMLEventReader$Parser.content(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParser$class.element1(MarkupParser.scala:542)
at scala.xml.pull.XMLEventReader$Parser.element1(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParser$class.content1(MarkupParser.scala:396)
at scala.xml.pull.XMLEventReader$Parser.content1(XMLEventReader.scala:56)
at scala.xml.parsing.MarkupParser$class.document(MarkupParser.scala:216)
at scala.xml.pull.XMLEventReader$Parser.document(XMLEventReader.scala:56)
at scala.xml.pull.XMLEventReader$Parser$$anonfun$run$1.apply(XMLEventReader.scala:90)
at scala.xml.pull.XMLEventReader$Parser$$anonfun$run$1.apply(XMLEventReader.scala:90)
at scala.xml.pull.ProducerConsumerIterator$class.interruptibly(XMLEventReader.scala:113)
at scala.xml.pull.XMLEventReader.interruptibly(XMLEventReader.scala:26)
at scala.xml.pull.XMLEventReader$Parser.run(XMLEventReader.scala:90)
at java.lang.Thread.run(Thread.java:680)
この呼び出しは終了しません。ここで、解析例外が出力されていることがわかりますが、への呼び出しを中断しているようには見えませんtoArray
。これは、実際の解析が別のスレッドで行われ、終了するためと思われますが、エラーが呼び出し元のスレッドに報告されることはありません(これはSI-4267の問題で説明されています)。どういうわけか、これらの例外を呼び出し元のスレッドで再発生させることは可能ですか?このクラスは使用することを目的としていますか、それとも私が使用すべき別のプルパーサーがありますか?