在AWS S3上解析XML文件的异常

时间:2018-04-30 17:31:27

标签: xml scala amazon-s3

当我在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情况下出了什么问题?

1 个答案:

答案 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))