当我在AWS S3上解析XML文件时,我得到一个例外。当我在硬盘驱动器上解析相同的文件时,它可以正常工作。
以下是我在AWS S3上解析文件的方法:
import com.amazonaws.services.s3.AmazonS3
import scala.io.{BufferedSource, Source}
import com.amazonaws.services.s3.model.GetObjectRequest
private def loadNode(s3Client: AmazonS3, bucket: String, filePath: String) = {
val s3Object = s3Client.getObject(new GetObjectRequest(bucket, filePath))
val source: BufferedSource = Source.fromInputStream(s3Object.getObjectContent)
val joinedLines = source.mkString
val node = Try(xml.XML.loadString(joinedLines))
node
}
当我这样做时,我得到以下例外:
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
以下是我在本地加载文件的方法:
val xml = XML.loadFile("/Users/paulreiners/data/my-file.xml")
这很好用。
执行以下代码时:
System.out.println("Content-Type: " + s3Object.getObjectMetadata.getContentType)
打印:
Content-Type: application/octet-stream
我不知道这是否有用。
那么在S3情况下出了什么问题?
答案 0 :(得分:0)
您没有在getObjectContent的返回值上调用getLines。
val s3Object= s3Client.getObject(new GetObjectRequest("myBucket", "myPath/myFile.xml"))
val myData = Source.fromInputStream(s3Object.getObjectContent()).getLines()
println(s"got xml: $myData")
val node = Try(xml.XML.loadString(myData))