Исключительный анализ файла XML на AWS S3 - PullRequest
0 голосов
/ 30 апреля 2018

Когда я анализирую XML-файл на AWS S3, я получаю исключение. Когда я анализирую тот же файл на моем жестком диске, он работает нормально.

Вот как я анализирую файл на 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 голосов
/ 30 апреля 2018

Вы не вызываете getLines для возвращаемого значения getObjectContent.

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...