在过去的48个小时里,我一直对这个绝对令人毛骨悚然的bug感到头疼,所以我想我最终会把毛巾扔掉,尝试在这里问一下,然后再将笔记本电脑扔出窗户。
我正在尝试从对AWS SimpleDB的调用中解析响应XML。响应恢复正常。例如,它可能看起来像:
<?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>
我将此XML传递给具有]的解析器>
XMLEventReader eventReader = xmlInputFactory.createXMLEventReader(response.getContent());
并多次调用eventReader.nextEvent();
以获取我想要的数据。
这是奇怪的部分-它在本地服务器中很好用。我做出了回应,我感到很高兴。问题是,当我将代码部署到Google App Engine时,传出请求仍然有效,并且响应XML对我来说似乎100%相同且正确,但是响应无法解析,但出现以下异常:
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)
我有两倍,三倍,四倍检查此XML是否包含“不可见字符”或非UTF8编码的字符,等等。我在数组中逐字节查看了字节顺序标记或类似性质的东西。没有;它通过了我可能会提出的所有验证测试。更奇怪的是,如果我也使用基于Saxon的解析器,则会发生这种情况-但仅在GAE上,它在我的本地环境中始终可以正常工作。
当我只能在运行良好的环境中运行调试器时(很难找到在GAE上进行远程调试的好方法,这很难跟踪问题的代码。)不过,使用我拥有的原始方法,我已经尝试了一百万种方法,包括:
谢谢!
在过去的48个小时中,我一直对这个绝对令人毛骨悚然的bug感到头疼,所以我想我终于要把毛巾扔掉,尝试在这里问一下,然后再将笔记本电脑扔出窗户。我是...