"Inhalt ist in Prolog nicht erlaubt", wenn perfekt gültiges XML auf GAE analysiert wird

Ich habe gegen mein Kopf gegen diese absolut ärgerlich bug für die letzten 48 Stunden, so dass ich dachte, ich würde endlich das Handtuch werfen und versuchen, die Frage hier, bevor ich werfe meinen laptop aus dem Fenster.

Ich versuche zum Parsen der XML-Antwort von einem Anruf, den ich an AWS SimpleDB. Die Antwort kommt zurück auf den Draht einfach in Ordnung; es kann zum Beispiel 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 pass in diese XML einen parser mit

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

- und call - eventReader.nextEvent(); ein paar mal um die Daten die ich möchte.

Hier ist der bizarre Teil-es funktioniert innerhalb der lokalen server. Die Antwort kommt, ich parse es, jeder ist glücklich. Das problem ist, dass wenn ich implementieren Sie den code für Google App Engine, die ausgehende Anforderung funktioniert immer noch, und die XML-Antwort scheint zu 100% identisch und korrekt zu mir, aber die Resonanz ausfällt, um zu analysieren, mit der folgenden Ausnahme:

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 haben Doppel -, Dreibett -, Vierbettzimmer überprüft das XML-für die 'unsichtbare Zeichen' oder nicht-UTF8-codierte Zeichen, etc. Ich sah Sie an byte-by-byte in ein array für die byte-order-Mark oder etwas in der Natur. Nichts, es geht jeder Validierung test ich konnte um sich werfen. Noch seltsamer, es passiert, wenn ich eine Saxon-basierte parser wie auch -- aber NUR auf GAE, ist es immer gut funktioniert in meiner lokalen Umgebung.

Macht es sehr schwierig zu verfolgen, die code für Probleme, wenn ich nur den debugger auf eine Umgebung, die perfekt funktioniert (ich habe nicht gefunden, eine gute Möglichkeit zur Remote-Debuggen auf GAE). Dennoch, mit den primitiven Mitteln, die ich habe, habe ich versucht, eine Millionen Ansätze, darunter:

  • XML mit und ohne prolog
  • Mit und ohne Zeilenumbrüche
  • Mit und ohne "encoding=" Attribut im prolog
  • Beide newline-Stile
  • Mit und ohne chunking Informationen in den HTTP-stream

Und ich habe versucht, die meisten dieser in mehreren Kombinationen, wo es Sinn machte, Sie interagieren würden-nichts! Ich bin mit meinem Latein am Ende. Hat jemand gesehen ein Problem wie dieses, bevor, die hoffentlich etwas Licht auf Sie?

Dank!

InformationsquelleAutor der Frage Adrian Petrescu | 2010-06-13

Schreibe einen Kommentar