"Inhalt ist in Prolog nicht zulässig" beim Parsen von perfekt gültigem XML auf GAE

Ich habe mir in den letzten 48 Stunden den Kopf gegen diesen absolut ärgerlichen Käfer geschlagen, also dachte ich, ich würde endlich das Handtuch werfen und hier nachfragen, bevor ich meinen Laptop aus dem Fenster schmeiße.

Ich versuche, die Antwort-XML eines Aufrufs an AWS SimpleDB zu analysieren. Die Antwort kommt auf dem Draht ganz gut zurück; Zum Beispiel könnte es so aussehen:

<?xml version="1.0" encoding="utf-8"?> 
<ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/">
    <ListDomainsResult>
        <DomainName>Audio</DomainName>
        <DomainName>Course</DomainName>
        <DomainName>DocumentContents</DomainName>
        <DomainName>LectureSet</DomainName>
        <DomainName>MetaData</DomainName>
        <DomainName>Professors</DomainName>
        <DomainName>Tag</DomainName>
    </ListDomainsResult>
    <ResponseMetadata>
        <RequestId>42330b4a-e134-6aec-e62a-5869ac2b4575</RequestId>
        <BoxUsage>0.0000071759</BoxUsage>
    </ResponseMetadata>
</ListDomainsResponse>

Ich übergebe diese XML an einen Parser mit

XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(response.getContent());

und Ruf aneventReader.nextEvent(); ein paar Mal, um die gewünschten Daten zu erhalten.

Hier ist der bizarre Teil - er funktioniert hervorragend auf dem lokalen Server. Die Antwort kommt, ich analysiere es, alle sind glücklich. Das Problem besteht darin, dass beim Bereitstellen des Codes für Google App Engine die ausgehende Anforderung weiterhin funktioniert und die Antwort-XML für mich zu 100% identisch und korrekt zu sein scheint, die Antwort jedoch mit der folgenden Ausnahme nicht analysiert werden kann:

com.amazonaws.http.HttpClient handleResponse: Unable to unmarshall response (ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.): <?xml version="1.0" encoding="utf-8"?> 
<ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"><ListDomainsResult><DomainName>Audio</DomainName><DomainName>Course</DomainName><DomainName>DocumentContents</DomainName><DomainName>LectureSet</DomainName><DomainName>MetaData</DomainName><DomainName>Professors</DomainName><DomainName>Tag</DomainName></ListDomainsResult><ResponseMetadata><RequestId>42330b4a-e134-6aec-e62a-5869ac2b4575</RequestId><BoxUsage>0.0000071759</BoxUsage></ResponseMetadata></ListDomainsResponse>
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
    at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(Unknown Source)
    at com.amazonaws.transform.StaxUnmarshallerContext.nextEvent(StaxUnmarshallerContext.java:153)
    ... (rest of lines omitted)

Ich habe diese XML-Datei doppelt, dreifach, vierfach auf "unsichtbare Zeichen" oder nicht UTF8-codierte Zeichen usw. überprüft. Ich habe sie Byte für Byte in einem Array auf Byte-Ordnungszeichen oder ähnliches untersucht. Nichts; Es besteht jeden Validierungstest, den ich durchführen könnte. Noch seltsamer ist es, wenn ich auch einen sächsischen Parser verwende - aber NUR bei GAE funktioniert das in meiner lokalen Umgebung immer.

Es macht es sehr schwer, den Code auf Probleme zu überprüfen, wenn ich den Debugger nur in einer Umgebung ausführen kann, die einwandfrei funktioniert (ich habe keine gute Möglichkeit gefunden, ein Remote-Debug auf GAE durchzuführen). Trotzdem habe ich mit meinen primitiven Mitteln eine Million Ansätze ausprobiert, darunter:

XML mit und ohne Prologit und ohne ZeilenumbruMit und ohne das Attribut "encoding =" im PrologBeide Newline StylesMit und ohne die im HTTP-Stream vorhandenen Chunking-Informationen

Und ich habe die meisten davon in mehreren Kombinationen ausprobiert, bei denen es sinnvoll war, dass sie interagieren - nichts! Ich bin mit meinem Latein am Ende. Hat jemand schon einmal ein solches Problem gesehen, das hoffentlich etwas Licht ins Dunkel bringen kann?

Vielen Dank

Antworten auf die Frage(26)

Ihre Antwort auf die Frage