org.xml.sax.SAXParseException: प्रोलॉग में सामग्री की अनुमति नहीं है


161

मेरे पास एक जावा आधारित वेब सेवा क्लाइंट है जो जावा वेब सेवा (एक्सिस 1 ढांचे पर लागू) से जुड़ा है।

मुझे अपनी लॉग फ़ाइल में निम्न अपवाद मिल रहे हैं:

Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:114)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:198)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)

11
यदि आपने हमें XML दिखाया है तो आप उसे पार्स करने की कोशिश कर रहे हैं। (बस पहली कुछ पंक्तियाँ, मैं उम्मीद करता हूँ।)
स्टीफन C

धन्यवाद स्टीफन, मैं एक्सिस फ्रेमवर्क से एक्सएमएल अनुरोध को पुनः प्राप्त करने और इसे यहां पेस्ट करने की कोशिश कर रहा हूं। तो उपरोक्त त्रुटि की सामान्य समझ है XML अच्छी तरह से गठित नहीं है।
ag112

मेरे पास यह मुद्दा था क्योंकि मैं xml फ़ाइल के बजाय स्ट्रिंग के रूप में xml फ़ाइल के स्ट्रिंग नाम को बदलने की कोशिश कर रहा था! : पी
गौ

जवाबों:


242

यह अक्सर एक्सएमएल घोषणा से पहले एक सफेद स्थान के कारण होता है, लेकिन यह किसी भी पाठ की तरह हो सकता है , जैसे डैश या कोई भी चरित्र। मैं कहता हूं कि अक्सर सफेद स्थान होता है क्योंकि लोग मानते हैं कि सफेद स्थान हमेशा अनजान होता है, लेकिन यहां ऐसा नहीं है।


एक और बात यह है कि अक्सर ऐसा होता है एक है UTF-8 बीओएम (बाइट क्रम चिह्न) है, जो है से पहले XML घोषणा खाली स्थान के रूप में इलाज किया जा सकता है, तो दस्तावेज़ में XML पार्सर के लिए वर्णों की एक धारा के रूप में के बजाय बाइट्स की एक धारा के रूप में दिया जाता है की अनुमति दी ।

ऐसा ही हो सकता है यदि xml फ़ाइल को मान्य करने के लिए स्कीमा फ़ाइलों (.xsd) का उपयोग किया जाता है और स्कीमा फ़ाइलों में से एक में UTF-8 BOM है


17
परिवर्तन: w00te के सुझाव - मेरे जैसे हर किसी के लिए, जो समझने के लिए जॉन Humphreys से कोई लेना देना संघर्ष Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))करने के लिएDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
RealMan

32

दरअसल यूरी जुबेरव के पोस्ट के अलावा

जब आप पार्सर के लिए कोई भी xml फ़ाइल नहीं पास करते हैं। उदाहरण के लिए आप पास हैं

new File("C:/temp/abc")

जब केवल C: /temp/abc.xml फ़ाइल आपके फ़ाइल सिस्टम पर मौजूद है

किसी भी स्थिति में

builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
document = builder.parse(new File("C:/temp/abc"));

या

DOMParser parser = new DOMParser();
parser.parse("file:C:/temp/abc");

सभी एक ही त्रुटि संदेश देते हैं।

बहुत निराशाजनक बग, क्योंकि निम्नलिखित ट्रेस

javax.servlet.ServletException
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
...
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
... 40 more

'फ़ाइल का नाम गलत है' या 'ऐसी कोई फ़ाइल मौजूद नहीं है' के तथ्य के बारे में कुछ नहीं कहता। मेरे मामले में मेरे पास बिल्कुल सही xml फ़ाइल थी और वास्तविक समस्या को निर्धारित करने के लिए 2 दिन बिताने पड़े।


एक फ़ाइल नाम, FWIW के बजाय एक निर्देशिका को पार्स करने की कोशिश कर रहा है।
रोज़गारपैक

... @ इस कारण से हर कोई XML से नफरत करता है। इस तरह की मूर्खतापूर्ण असफलता के लिए 2 दिन काम करना ..
9

बिल्कुल सहमत @Gewure :) यह 2012 से कुछ प्राचीन पोस्ट था और मैं इसके बारे में भूल भी गया, लेकिन सच है
Egor

1
यह तब भी होता है, जब आपके पास एक सही रास्ता होता है, लेकिन विशेष प्रतीकों के साथ, जैसे: C: \ # MyFolder \ My.XML फ़ाइल मौजूद है, लेकिन "#" XML पार्सर ... जावा स्वयं, साथ ही साथ समस्या लाता है। M $ Windows, इस फ़ोल्डर के नाम के साथ कोई समस्या नहीं है .... बहुत बुरा अपवाद संदेश व्यवहार ....
एलेक्स

26

encoding="UTF-8"प्रोलॉग और समाप्ति में स्ट्रिंग के बीच एक स्थान जोड़ने का प्रयास करें ?>। XML में प्रोलॉग इस ब्रैकेट-प्रश्न चिह्न को सीमांकित तत्व को दस्तावेज़ की शुरुआत में निर्दिष्ट करता है (जबकि स्टैकओवरफ़्लो में टैग प्रोलॉग प्रोग्रामिंग भाषा को संदर्भित करता है)।

जोड़ा गया: दस्तावेज़ के आपके प्रोलॉग भाग के सामने वह डैश है? यही कारण है कि, तो इस त्रुटि हो सकता है, prolog के सामने डेटा मिलने से -<?xml version="1.0" encoding="UTF-8"?>


1
+1। मैंने पाया है कि कुछ XML पार्सर इस अपवाद को तब भी रोकते हैं जब XML prolog में स्थान होते हैं - इसलिए मुझे लगता है कि यह निश्चित रूप से जाँचने योग्य है कि कुछ भी <?xml ver...बिट से पहले नहीं होता है ।

11

मुझे एक ही समस्या थी (और इसे हल किया गया) जबकि फ्रीडमर के साथ एक्सएमएल दस्तावेज़ को पार्स करने की कोशिश की गई थी।

XML फ़ाइल के हेडर से पहले मेरे पास कोई स्पेस नहीं था।

समस्या तब होती है जब फ़ाइल एन्कोडिंग और XML एन्कोडिंग विशेषता केवल और केवल भिन्न होती है। (उदा: शीर्ष लेख में UTF-16 विशेषता के साथ UTF-8 फ़ाइल)

इसलिए मेरे पास समस्या को हल करने के दो तरीके थे:

  1. फ़ाइल की एन्कोडिंग को स्वयं बदलना
  2. शीर्ष लेख UTF-16 को UTF-8 में बदलना

1
मुझे लगता है कि सामान्य तौर पर किसी भी मामले में जहां पार्सर चरित्र एन्कोडिंग के बारे में परस्पर विरोधी जानकारी प्राप्त करता है, इस समस्या का कारण बन सकता है।
राएडवेल

9

इसका मतलब है कि XML विकृत है या प्रतिक्रिया निकाय XML दस्तावेज़ बिल्कुल नहीं है।


मैंने जाँच की और लगता है कि XML अच्छी तरह से बनाई गई है। यहाँ स्नैपशॉट है: - <? Xml संस्करण = "1.0" एन्कोडिंग = "UTF-8"?> <साबुननव: लिफाफा xmlns: साबुनवाला = " schemas.xmlsoap.org/soap/envelope " xmlns: xsd = " w3.org/ 2001 / XMLSchema "xmlns: xsi =" w3.org/2001/XMLSchema-instance "> <साबुननेव: हैडर> <wsse: सुरक्षा xmlns: wsse =" docs.oasis-open.org/wss/2004/01/… " सोपनेव: मस्टैंडरस्टैंड = "1"> .... </ wsse: सुरक्षा> </ सोपेनव: हैडर> <सोपेनव: बॉडी> .XX .. </ सोपेंव: बॉडी> </ सोपेंव: लिफाफा>
ag112

1
हां, अगर सामने पानी का छींटा है, तो यह XML को तोड़ देगा।
यूरी जुबेरव

7

बस एक WSDL में इसी तरह की समस्या पर नज़र रखने के लिए 4 घंटे बिताए। WSDL ने XSD का उपयोग किया जो एक और नाम स्थान XSD का आयात करता है। इस आयातित XSD में निम्नलिखित शामिल थे:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.xyz.com/Services/CommonTypes" elementFormDefault="qualified"
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:CommonTypes="http://www.xyz.com/Services/CommonTypes">

 <include schemaLocation=""></include>  
    <complexType name="RequestType">
        <....

खाली includeतत्व पर ध्यान दें ! यह मेरे कहर का मूल था। मुझे लगता है कि यह Egor की फ़ाइल पर एक भिन्नता है जो ऊपर समस्या नहीं मिली।

निराशाजनक रिपोर्टिंग के लिए +1।


4

मेरे मामले में, 'एन्कोडिंग = "UTF-8" विशेषता को पूरी तरह से हटा दिया गया।

यह एक चरित्र सेट एन्कोडिंग समस्या की तरह दिखता है, हो सकता है कि आपकी फ़ाइल वास्तव में UTF-8 में न हो।


4

मेरा जवाब शायद आपकी मदद नहीं करेगा, लेकिन यह इस समस्या को आम तौर पर मदद करता है।

जब आप इस तरह का अपवाद देखते हैं तो आपको किसी भी हेक्स संपादक में अपनी xml फाइल को खोलने की कोशिश करनी चाहिए और कुछ समय बाद आप उस फाइल की शुरुआत में अतिरिक्त बाइट्स देख सकते हैं जो टेक्स्ट-एडिटर नहीं दिखाता है।

उन्हें हटा दें और आपका xml पार्स हो जाएगा।


4

कभी-कभी यह कोड है, एक्सएमएल नहीं

निम्नलिखित कोड,

Document doc = dBuilder.parse(new InputSource(new StringReader("file.xml")));

इस त्रुटि के परिणामस्वरूप,

[घातक त्रुटि]: 1: 1: सामग्री को prolog.org.xml.sax.SAXParseException में अनुमति नहीं है; लाइननंबर: 1; कॉलमनिंबर: 1; प्रोलॉग में सामग्री की अनुमति नहीं है।

क्योंकि यह स्ट्रिंग शाब्दिक "file.xml"( file.xmlफ़ाइल की सामग्री नहीं ) पार्स करने का प्रयास कर रहा है और क्योंकि असफल रहा है"file.xml" एक स्ट्रिंग अच्छी तरह से गठित XML नहीं है।

फिक्स: निकालें StringReader():

Document doc = dBuilder.parse(new InputSource("file.xml"));

इसी तरह, गंदा बफर समस्याएं वास्तविक XML के आगे अवशिष्ट कबाड़ छोड़ सकती हैं। यदि आपने अपने XML को ध्यान से जांचा है और अभी भी यह त्रुटि हो रही है, तो पार्सर को पास की जा रही सटीक सामग्री को लॉग इन करें; कभी-कभी जो वास्तव में होने की कोशिश की जाती है, वह हैरान करने वाली होती है।


1
यह समाधान सही मार्ग में निर्देशित है क्योंकि मैं applicaionContext.xmlकोड में पथ जोड़ना भूल गया था, और कोड में जाँच नहीं कर रहा था केवल एक्सएमएल फ़ाइल में त्रुटि की तलाश थी
मृण्मय

3

पहले स्वच्छ परियोजना, फिर परियोजना का पुनर्निर्माण। मैं भी इसी मुद्दे का सामना कर रहा था। इसके बाद सब ठीक हो गया।


2

यदि अन्य सभी विफल हो जाते हैं, तो बाइनरी में फ़ाइल खोलें यह सुनिश्चित करने के लिए कि फ़ाइल की शुरुआत में कोई मज़ेदार वर्ण नहीं हैं [3 गैर प्रिंट करने योग्य वर्ण जो फ़ाइल की शुरुआत में फ़ाइल को utf-8 के रूप में पहचानते हैं]। हमने ऐसा किया और कुछ पाया। इसलिए हमने फ़ाइल को utf-8 से ascii में बदल दिया और यह काम कर गई।


2

उन्हीं मुद्दों के लिए, मैंने निम्नलिखित पंक्ति को हटा दिया है,

  File file = new File("c:\\file.xml");
  InputStream inputStream= new FileInputStream(file);
  Reader reader = new InputStreamReader(inputStream,"UTF-8");
  InputSource is = new InputSource(reader);
  is.setEncoding("UTF-8");

यह ठीक काम कर रहा है। इतना निश्चित नहीं है कि UTF-8 समस्या क्यों देता है। मुझे सदमे में रखने के लिए, यह UTF-8 के लिए भी ठीक काम करता है।

जावा * jdk1.6.0_13 * के साथ विंडोज -7 32 बिट और नेटबीन्स आईडीई का उपयोग कर रहा हूं । यह कैसे काम करता है कोई पता नहीं।


2

जैसा कि माइक सोकोलोव ने पहले ही बताया है, संभावित कारणों में से एक टैग से पहले कुछ चरित्रों (जैसे कि व्हॉट्सएप) की उपस्थिति है।

यदि आपके इनपुट XML को स्ट्रिंग के रूप में पढ़ा जा रहा है (बाइट सरणी के विपरीत) तो आप अपने इनपुट स्ट्रिंग को नीचे दिए गए कोड से बदल सकते हैं ताकि यह सुनिश्चित किया जा सके कि xml टैग के मिटाए जाने से पहले सभी 'आवश्यक' वर्ण।

inputXML=inputXML.substring(inputXML.indexOf("<?xml"));

आपको यह सुनिश्चित करने की आवश्यकता है कि इनपुट xml हालांकि xml टैग से शुरू होता है।


2

मेरे मामले में web.xml अपने आवेदन में अतिरिक्त जगह के बाद भी मैं नष्ट कर दिया मैं प्रभार और उसके फिक्स वापस लौटने के लिए किया था काम नहीं किया है और हाँ, मैं के साथ खेल रहा था logging.properties और web.xml मेरी बिल्ला में लेकिन जाने के बाद भी मैं वापस लाया गया त्रुटि यह दिखाया गया है तो यह तय))।

अतिरिक्त जगह

विशिष्ट होने के लिए मैंने org.apache.catalina.filters.ExpiresFilter.level = जोड़ने का प्रयास किया । लॉगिंग के बारे में कुछ प्रवाह पर जुर्माना ढेर।


1

मैंने यहां मिलने वाले निर्देशों का पालन किया और मुझे वही त्रुटि मिली।

मैंने नोटपैड और एक्सएमएल नोटपैड में इसे हल करने के लिए (यानी एन्कोडिंग को कॉपी-पेस्ट करने के बजाय एक्सएमएल टाइप करने) को हल करने के लिए कई चीजों की कोशिश की, लेकिन काम नहीं किया।

समस्या तब हल हुई जब मैंने अपनी XML फ़ाइल को Notepad ++ (एन्कोडिंग -> utf-8 बिना BOM) में सहेजा


1

उन सभी के लिए जो इस त्रुटि को प्राप्त करते हैं: चेतावनी: कैटालिना.स्टार्ट का उपयोग कर conf / server.xml: सामग्री को अनुमति नहीं दी जाती है।

बहुत जानकारीपूर्ण नहीं है .. लेकिन इसका वास्तव में मतलब यह है कि आपके conf / server.xml फ़ाइल में कचरा है।

मैंने अन्य XML फ़ाइलों में यह सटीक त्रुटि देखी है .. यह त्रुटि पाठ संपादक के साथ बदलाव करने के कारण हो सकती है जो कचरा का परिचय देती है।

जिस तरह से आप यह सत्यापित कर सकते हैं कि आपके पास फ़ाइल में कचरा है या नहीं, इसे "HEX Editor" के साथ खोलें

     "<?xml version="1.0" encoding="UTF-8"?>"

इस तरह कचरा होगा

     "‰ŠŒ<?xml version="1.0" encoding="UTF-8"?>"

यह आपकी समस्या है .... समाधान एक अच्छा हेक्स संपादक का उपयोग करना है .. एक जो आपको विभिन्न प्रकार के एन्कोडिंग के साथ फ़ाइलों को सहेजने की अनुमति देगा ..

तो बस इसे UTF-8 के रूप में सहेजें। XML फ़ाइलों का उपयोग करने वाली कुछ प्रणालियों को UTF NO BOM के रूप में सहेजने की आवश्यकता हो सकती है जिसका अर्थ है "NO बाइट ऑर्डर मार्क"

उम्मीद है कि इससे वहां किसी को मदद मिलेगी!!



1

यूनिक्स / लिनक्स सिस्टम पर BOM समस्या को ठीक करने के लिए:

  1. जांचें कि क्या कोई अवांछित BOM वर्ण है: hexdump -C myfile.xml | more फ़ाइल के प्रारंभ में एक अवांछित BOM वर्ण दिखाई देगा...<?xml>

  2. वैकल्पिक रूप से, करते हैं file myfile.xml। BOM वर्ण वाली एक फ़ाइल इस प्रकार दिखाई देगी:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text

  3. किसी एकल फ़ाइल को ठीक करें: tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml

  4. फ़ाइल को साफ करने के लिए 1 या 2 को दोहराएं। संभवत: समझदार भी view myfile.xmlसामग्री की जांच करने के लिए रह गए हैं।

यहाँ XML फ़ाइलों के पूरे फ़ोल्डर को पवित्र करने के लिए एक बैश स्क्रिप्ट दी गई है:

#!/usr/bin/env bash

# This script is to sanitise XML files to remove any BOM characters

has_bom() { head -c3 "$1" | LC_ALL=C grep -qe '\xef\xbb\xbf'; }

for filename in *.xml ; do
  if has_bom ${filename}; then
    tail -c +4 ${filename} > temp.xml
    mv temp.xml ${filename}
  fi
done

0

भविष्य के लिए इस पर बस एक अतिरिक्त विचार। इस बग को प्राप्त करने के मामले में यह हो सकता है कि कोई बस डिलीट कुंजी या किसी अन्य कुंजी को बेतरतीब ढंग से हिट करता है जब उनके पास सक्रिय डिस्प्ले के रूप में XML विंडो होती है और ध्यान नहीं दे रहे होते हैं। यह मेरे वेब एप्लिकेशन में struts.xml फ़ाइल के साथ पहले हुआ है। अनाड़ी कोहनी ...


मुझे यकीन है कि मैं किसी भी कुंजी मार नहीं रहा हूँ
मैड-डी

0

मैं भी वही हो रहा था

XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.

, जब मेरा एप्लिकेशन एक रेस्टफुल वेब्स सर्विस कॉल के लिए एक्सएमएल प्रतिक्रिया बना रहा था। XML प्रारूप स्ट्रिंग बनाते समय मैंने & lt & & gt को <और> से बदल दिया और फिर त्रुटि दूर हो गई, और मुझे उचित प्रतिक्रिया मिल रही थी। यकीन नहीं होता कि यह कैसे काम किया लेकिन यह काम किया।

नमूना :

String body = "<ns:addNumbersResponse xmlns:ns=\"http://java.duke.org\"><ns:return>"
            +sum
            +"</ns:return></ns:addNumbersResponse>";

0

मेरी भी यही समस्या थी।

पहले मैंने XML फाइल को स्थानीय डेस्कटॉप पर डाउनलोड किया और मुझे मिल गया Content is not allowed in prolog पोर्टल सर्वर पर आयात फ़ाइल के दौरान । यहां तक ​​कि नेत्रहीन फ़ाइल मुझे अच्छी लग रही थी, लेकिन किसी तरह यह भ्रष्ट हो गया था।

इसलिए मैंने उसी फ़ाइल को फिर से डाउनलोड किया और वही कोशिश की और यह काम कर गई।


0

हमारे पास हाल ही में यही समस्या थी और यह खराब URL का मामला था और फलस्वरूप मानक 403 HTTP प्रतिक्रिया (जो स्पष्ट रूप से वैध XML ग्राहक नहीं दिख रहा था) के लिए प्रतिक्रिया है। यदि कोई व्यक्ति इस संदर्भ में इस समस्या को चलाता है तो मैं विस्तार से साझा करने जा रहा हूं:

यह एक स्प्रिंग आधारित वेब एप्लिकेशन था जिसमें एक "JavaWsPortProxyFactoryBean" बीन को एक दूरस्थ पोर्ट के लिए एक प्रॉक्सी को उजागर करने के लिए कॉन्फ़िगर किया गया था।

<bean id="ourPortJaxProxyService"
    class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"
    p:serviceInterface="com.amir.OurServiceSoapPortWs"
    p:wsdlDocumentUrl="${END_POINT_BASE_URL}/OurService?wsdl"
    p:namespaceUri="http://amir.com/jaxws" p:serviceName="OurService"
    p:portName="OurSoapPort" />

"END_POINT_BASE_URL" एक पर्यावरण चर है जो वेब एप्लिकेशन को होस्ट करने वाले टॉमकैट उदाहरण के "setenv.sh" में कॉन्फ़िगर किया गया है। फ़ाइल की सामग्री कुछ इस प्रकार है:

export END_POINT_BASE_URL="http://localhost:9001/BusinessAppServices"
#export END_POINT_BASE_URL="http://localhost:8765/BusinessAppServices"

लापता ";" प्रत्येक पंक्ति के बाद विकृत URL और इस प्रकार खराब प्रतिक्रिया हुई। "," BusinessAppServices / OurService? Wsdl "के बजाय URL में" / "से पहले एक CR था। समस्या का निवारण करते समय "टीसीपी / आईपी मॉनिटर" काफी उपयोगी था।


0

मेरे मामले में मुझे यह त्रुटि मिली क्योंकि मैंने जिस API का उपयोग किया था, वह डेटा को XML में या JSON प्रारूप में वापस कर सकता है। जब मैंने इसे एक ब्राउज़र का उपयोग करके परीक्षण किया, तो यह XML प्रारूप में डिफ़ॉल्ट हो गया, लेकिन जब मैंने एक जावा एप्लिकेशन से उसी कॉल को आमंत्रित किया, तो एपीआई ने JSON स्वरूपित प्रतिक्रिया लौटा दी, जो स्वाभाविक रूप से एक पार्सिंग त्रुटि उत्पन्न हुई।


0

यहां तक ​​कि मुझे भी इसी तरह की समस्या का सामना करना पड़ा। कारण फ़ाइल की शुरुआत में कुछ कचरा पात्र था।

फिक्स: बस एक टेक्स्ट एडिटर में फाइल को खोलें (सब्लिम टेक्स्ट पर टेस्ट किया गया) किसी भी इंडेंट को हटा दें यदि कोई भी फाइल में है और फाइल की सभी सामग्री को एक नई फाइल में कॉपी कर ले और उसे सेव कर दे। बस!। जब मैंने नई फाइल चलाई तो यह बिना किसी त्रुटि के चली।


0

मैंने दिनेशकुमार का कोड लिया और अपनी XML फ़ाइल को सही ढंग से सत्यापित करने के लिए संशोधित किया:

import org.apache.log4j.Logger;

public class Myclass{

private static final Logger LOGGER = Logger.getLogger(Myclass.class);

/**
 * Validate XML file against Schemas XSD in pathEsquema directory
 * @param pathEsquema directory that contains XSD Schemas to validate
 * @param pathFileXML XML file to validate
 * @throws BusinessException if it throws any Exception
 */
public static void validarXML(String pathEsquema, String pathFileXML) 
	throws BusinessException{	
	String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
	String nameFileXSD = "file.xsd";
	String MY_SCHEMA1 = pathEsquema+nameFileXSD);
	ParserErrorHandler parserErrorHandler;
	try{
		SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA);
		
		Source [] source = { 
			new StreamSource(new File(MY_SCHEMA1))
			};
		Schema schemaGrammar = schemaFactory.newSchema(source);

		Validator schemaValidator = schemaGrammar.newValidator();
		schemaValidator.setErrorHandler(
			parserErrorHandler= new ParserErrorHandler());
		
		/** validate xml instance against the grammar. */
		File file = new File(pathFileXML);
		InputStream isS= new FileInputStream(file);
		Reader reader = new InputStreamReader(isS,"UTF-8");
		schemaValidator.validate(new StreamSource(reader));
		
		if(parserErrorHandler.getErrorHandler().isEmpty()&& 
			parserErrorHandler.getFatalErrorHandler().isEmpty()){
			if(!parserErrorHandler.getWarningHandler().isEmpty()){
				LOGGER.info(
				String.format("WARNING validate XML:[%s] Descripcion:[%s]",
					pathFileXML,parserErrorHandler.getWarningHandler()));
			}else{
				LOGGER.info(
				String.format("OK validate  XML:[%s]",
					pathFileXML));
			}
		}else{
			throw new BusinessException(
				String.format("Error validate  XML:[%s], FatalError:[%s], Error:[%s]",
				pathFileXML,
				parserErrorHandler.getFatalErrorHandler(),
				parserErrorHandler.getErrorHandler()));
		}		
	}
	catch(SAXParseException e){
		throw new BusinessException(String.format("Error validate XML:[%s], SAXParseException:[%s]",
			pathFileXML,e.getMessage()),e);
	}
	catch (SAXException e){
		throw new BusinessException(String.format("Error validate XML:[%s], SAXException:[%s]",
			pathFileXML,e.getMessage()),e);
	}
	catch (IOException e) {
		throw new BusinessException(String.format("Error validate XML:[%s], 
			IOException:[%s]",pathFileXML,e.getMessage()),e);
	}
	
}

}


0

अपने दस्तावेज़ को इस तरह बनाएँ:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    %children%
</root>

0

वसंत के साथ मेरा भी यही मुद्दा था

MarshallingMessageConverter

और पूर्व-समर्थक कोड द्वारा।

Mayby किसी को कारण की आवश्यकता होगी: BytesMessage #readBytes - बाइट्स पढ़ना .. और मैं यह भूल गया कि पढ़ना एक दिशा ऑपरेशन है। आप दो बार नहीं पढ़ सकते।


0

Apache.commons.io में BOMInputStream के साथ प्रयास करें:

public static <T> T getContent(Class<T> instance, SchemaType schemaType, InputStream stream) throws JAXBException, SAXException, IOException {

    JAXBContext context = JAXBContext.newInstance(instance);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    Reader reader = new InputStreamReader(new BOMInputStream(stream), "UTF-8");

    JAXBElement<T> entry = unmarshaller.unmarshal(new StreamSource(reader), instance);

    return entry.getValue();
}

0

मुझे info.plistअपने मैक में फ़ाइल पार्स करते समय भी यही समस्या थी । हालाँकि, समस्या को निम्न आदेश का उपयोग करके ठीक किया गया था जिसने फ़ाइल को XML में बदल दिया।

plutil -convert xml1 info.plist

आशा है कि किसी की मदद करता है।


0

मुझे कुछ XML फ़ाइलों के साथ एक ही समस्या थी, मैंने एएनएसआई एन्कोडिंग (विंडोज -1252) के साथ फाइल पढ़ने और यूटीएफ -8 एन्कोडिंग के साथ एक फाइल को पाइथन में एक छोटी स्क्रिप्ट के साथ लिखने का हल किया। मैंने नोटपैड ++ का उपयोग करने की कोशिश की, लेकिन मुझे सफलता नहीं मिली:

import os
import sys

path = os.path.dirname(__file__)

file_name = 'my_input_file.xml'

if __name__ == "__main__":
    with open(os.path.join(path, './' + file_name), 'r', encoding='cp1252') as f1:
        lines = f1.read()
        f2 = open(os.path.join(path, './' + 'my_output_file.xml'), 'w', encoding='utf-8')
        f2.write(lines)
        f2.close()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.