Closed
Description
Save https://horstmann.com/unblog/2020-11-27/index.html to a local file and run
import java.io.File
import scala.xml.parsing.ConstructingParser
val filename="..."
val file = new File(filename)
val parser = ConstructingParser.fromFile(file, preserveWS = true)
val doc = parser.document().docElem
In Scala 2, this works perfectly. In Scala 3.0.0, an exception is thrown:
java.lang.NoSuchMethodError: 'scala.xml.parsing.MarkupParser scala.xml.parsing.MarkupParser$WithLookAhead.scala$xml$parsing$MarkupParser$WithLookAhead$$$outer()'
at scala.xml.parsing.MarkupParser.lookahead(MarkupParser.scala:77)
at scala.xml.parsing.MarkupParser.lookahead$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.lookahead(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParserCommon.peek(MarkupParserCommon.scala:267)
at scala.xml.parsing.MarkupParserCommon.xTakeUntil(MarkupParserCommon.scala:249)
at scala.xml.parsing.MarkupParserCommon.xTakeUntil$(MarkupParserCommon.scala:25)
at scala.xml.parsing.ConstructingParser.xTakeUntil(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.xCharData(MarkupParser.scala:382)
at scala.xml.parsing.MarkupParser.xCharData$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.xCharData(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content1(MarkupParser.scala:427)
at scala.xml.parsing.MarkupParser.content1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content(MarkupParser.scala:462)
at scala.xml.parsing.MarkupParser.content$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.element1(MarkupParser.scala:591)
at scala.xml.parsing.MarkupParser.element1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.element1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content1(MarkupParser.scala:436)
at scala.xml.parsing.MarkupParser.content1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content(MarkupParser.scala:462)
at scala.xml.parsing.MarkupParser.content$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.element1(MarkupParser.scala:591)
at scala.xml.parsing.MarkupParser.element1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.element1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content1(MarkupParser.scala:436)
at scala.xml.parsing.MarkupParser.content1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content(MarkupParser.scala:462)
at scala.xml.parsing.MarkupParser.content$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.element1(MarkupParser.scala:591)
at scala.xml.parsing.MarkupParser.element1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.element1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content1(MarkupParser.scala:436)
at scala.xml.parsing.MarkupParser.content1$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content1(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.content(MarkupParser.scala:462)
at scala.xml.parsing.MarkupParser.content$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.content(ConstructingParser.scala:52)
at scala.xml.parsing.MarkupParser.document(MarkupParser.scala:251)
at scala.xml.parsing.MarkupParser.document$(MarkupParser.scala:33)
at scala.xml.parsing.ConstructingParser.document(ConstructingParser.scala:52)
The offending code is
def lookahead(): BufferedIterator[Char] = curInput match {
case curInputWLA: WithLookAhead =>
curInputWLA.lookahead()
The library dependency in build.sbt
:
libraryDependencies ++= Seq(
"org.scala-lang.modules" %% "scala-xml" % "2.0.0",
)