title: "Content is not allowed in prolog" when parsing perfectly valid XML on GAE
body: <p>I've been beating my head against this absolutely infuriating bug for the last 48 hours, so I thought I'd finally throw in the towel and try asking here before I throw my laptop out the window.</p>
  
  <p>I'm trying to parse the response XML from a call I made to AWS SimpleDB. The response is coming back on the wire just fine; for example, it may look like:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; 
  &lt;ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"&gt;
      &lt;ListDomainsResult&gt;
          &lt;DomainName&gt;Audio&lt;/DomainName&gt;
          &lt;DomainName&gt;Course&lt;/DomainName&gt;
          &lt;DomainName&gt;DocumentContents&lt;/DomainName&gt;
          &lt;DomainName&gt;LectureSet&lt;/DomainName&gt;
          &lt;DomainName&gt;MetaData&lt;/DomainName&gt;
          &lt;DomainName&gt;Professors&lt;/DomainName&gt;
          &lt;DomainName&gt;Tag&lt;/DomainName&gt;
      &lt;/ListDomainsResult&gt;
      &lt;ResponseMetadata&gt;
          &lt;RequestId&gt;42330b4a-e134-6aec-e62a-5869ac2b4575&lt;/RequestId&gt;
          &lt;BoxUsage&gt;0.0000071759&lt;/BoxUsage&gt;
      &lt;/ResponseMetadata&gt;
  &lt;/ListDomainsResponse&gt;
  </code></pre>
  
  <p>I pass in this XML to a parser with </p>
  
  <pre><code>XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(response.getContent());
  </code></pre>
  
  <p>and call <code>eventReader.nextEvent();</code> a bunch of times to get the data I want.</p>
  
  <p>Here's the bizarre part -- it works great inside the local server. The response comes in, I parse it, everyone's happy. The problem is that when I deploy the code to Google App Engine, the outgoing request still works, and the response XML seems 100% identical and correct to me, but the response fails to parse with the following exception:</p>
  
  <pre><code>com.amazonaws.http.HttpClient handleResponse: Unable to unmarshall response (ParseError at [row,col]:[1,1]
  Message: Content is not allowed in prolog.): &lt;?xml version="1.0" encoding="utf-8"?&gt; 
  &lt;ListDomainsResponse xmlns="http://sdb.amazonaws.com/doc/2009-04-15/"&gt;&lt;ListDomainsResult&gt;&lt;DomainName&gt;Audio&lt;/DomainName&gt;&lt;DomainName&gt;Course&lt;/DomainName&gt;&lt;DomainName&gt;DocumentContents&lt;/DomainName&gt;&lt;DomainName&gt;LectureSet&lt;/DomainName&gt;&lt;DomainName&gt;MetaData&lt;/DomainName&gt;&lt;DomainName&gt;Professors&lt;/DomainName&gt;&lt;DomainName&gt;Tag&lt;/DomainName&gt;&lt;/ListDomainsResult&gt;&lt;ResponseMetadata&gt;&lt;RequestId&gt;42330b4a-e134-6aec-e62a-5869ac2b4575&lt;/RequestId&gt;&lt;BoxUsage&gt;0.0000071759&lt;/BoxUsage&gt;&lt;/ResponseMetadata&gt;&lt;/ListDomainsResponse&gt;
  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)
  </code></pre>
  
  <p>I have double, triple, quadruple checked this XML for 'invisible characters' or non-UTF8 encoded characters, etc. I looked at it byte-by-byte in an array for byte-order-marks or something of that nature. Nothing; it passes every validation test I could throw at it. Even stranger, it happens if I use a Saxon-based parser as well -- but ONLY on GAE, it always works fine in my local environment.</p>
  
  <p>It makes it very hard to trace the code for problems when I can only run the debugger on an environment that works perfectly (I haven't found any good way to remotely debug on GAE). Nevertheless, using the primitive means I have, I've tried a million approaches including:</p>
  
  <ul>
  <li>XML with and without the prolog</li>
  <li>With and without newlines</li>
  <li>With and without the "encoding=" attribute in the prolog</li>
  <li>Both newline styles</li>
  <li>With and without the chunking information present in the HTTP stream</li>
  </ul>
  
  <p>And I've tried most of these in multiple combinations where it made sense they would interact -- nothing! I'm at my wit's end. Has anyone seen an issue like this before that can hopefully shed some light on it?</p>
  
  <p>Thanks!</p>