मैं पिछले 48 घंटों से इस पूरी तरह से घुसपैठ वाले बग के खिलाफ अपना सिर पीट रहा हूं, इसलिए मैंने सोचा कि मैं आखिर में तौलिया फेंक दूंगा और खिड़की से बाहर अपना लैपटॉप फेंकने से पहले यहां पूछने की कोशिश करूंगा।
मैं एक कॉल से प्रतिक्रिया XML पार्स करने की कोशिश कर रहा हूं जो मैंने AWS सिंपलडीबी को किया था। प्रतिक्रिया ठीक तार पर वापस आ रही है; उदाहरण के लिए, ऐसा लग सकता है:
<?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 ऐप इंजन को कोड तैनात करता हूं, तो आउटगोइंग अनुरोध अभी भी काम करता है, और प्रतिक्रिया 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 को 'अदृश्य वर्णों' या गैर-यूटीएफ 8 एनकोडेड वर्णों आदि के लिए जांचा। मैंने इसे बाइट-ऑर्डर-मार्क्स या उस प्रकृति के कुछ के लिए एक सरणी में बाइट-बाय-बाइट पर देखा। कुछ भी तो नहीं; यह मेरे द्वारा फेंके जाने वाले हर सत्यापन परीक्षण से गुजरता है। यहां तक कि अजनबी, ऐसा होता है अगर मैं सैक्सन-आधारित पार्सर का उपयोग करता हूं - लेकिन केवल जीएई पर, यह हमेशा मेरे स्थानीय वातावरण में ठीक काम करता है।
समस्याओं के लिए कोड का पता लगाना बहुत कठिन हो जाता है जब मैं केवल डिबगर को ऐसे वातावरण पर चला सकता हूं जो पूरी तरह से काम करता है (मुझे जीएई पर दूरस्थ रूप से डिबग करने का कोई अच्छा तरीका नहीं मिला है)। फिर भी, मेरे पास मौजूद आदिम साधनों का उपयोग करते हुए, मैंने एक लाख दृष्टिकोण की कोशिश की है जिसमें शामिल हैं:
- XML के साथ और बिना prolog
- साथ और बिना नई सुर्खियों के
- के साथ और "एन्कोडिंग =" विशेषता के बिना prolog में
- दोनों न्यू स्टाइल
- HTTP स्ट्रीम में मौजूद चैंकिंग जानकारी के साथ और उसके बिना
और मैंने इनमें से अधिकांश को कई संयोजनों में आज़माया है जहाँ यह समझ में आता है कि वे बातचीत करेंगे - कुछ भी नहीं! मेरा विवेक खत्म हो रहा है। किसी को इस तरह से पहले एक मुद्दा देखा है कि उम्मीद कर सकते हैं उस पर कुछ प्रकाश डाला?
धन्यवाद!