java.net.MalformedURLException: कोई प्रोटोकॉल नहीं


173

मुझे जावा अपवाद मिल रहा है जैसे:

java.net.MalformedURLException: no protocol

मेरा प्रोग्राम उपयोग करके XML स्ट्रिंग पार्स करने की कोशिश कर रहा है:

Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);

XML स्ट्रिंग में शामिल हैं:

String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
    "   <s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">"+
    "       <s:Header>"+
    "           <ActivityId CorrelationId=\"15424263-3c01-4709-bec3-740d1ab15a38\" xmlns=\"http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics\">50d69ff9-8cf3-4c20-afe5-63a9047348ad</ActivityId>"+
    "           <clalLog_CorrelationId xmlns=\"http://clalbit.co.il/clallog\">eb791540-ad6d-48a3-914d-d74f57d88179</clalLog_CorrelationId>"+
    "       </s:Header>"+
    "       <s:Body>"+
    "           <ValidatePwdAndIPResponse xmlns=\"http://tempuri.org/\">"+
    "           <ValidatePwdAndIPResult xmlns:a=\"http://schemas.datacontract.org/2004/07/ClalBit.ClalnetMediator.Contracts\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">"+
    "           <a:ErrorMessage>Valid User</a:ErrorMessage>"+
    "           <a:FullErrorMessage i:nil=\"true\" />"+
    "           <a:IsSuccess>true</a:IsSuccess>"+
    "           <a:SecurityToken>999993_310661843</a:SecurityToken>"+
    "           </ValidatePwdAndIPResult>"+
    "           </ValidatePwdAndIPResponse>"+
    "       </s:Body>\n"+
    "   </s:Envelope>\n";

इस त्रुटि के कारण के बारे में कोई सुझाव?


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

जवाबों:


369

प्रलेखन आपकी मदद कर सकता है: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

विधि DocumentBuilder.parse(String)एक यूआरआई लेती है और इसे खोलने की कोशिश करती है। यदि आप सीधे सामग्री देना चाहते हैं, तो आपको इसे InputStreamया तो देना होगा Reader, उदाहरण के लिए ए StringReader। ... अप्रत्यक्ष के जावा मानक स्तरों में आपका स्वागत है!

मूल रूप से:

DocumentBuilder db = ...;
String xml = ...;
db.parse(new InputSource(new StringReader(xml)));

ध्यान दें कि यदि आप किसी फ़ाइल से अपना XML पढ़ते हैं, तो आप सीधे Fileऑब्जेक्ट को दे सकते हैं DocumentBuilder.parse()

एक साइड नोट के रूप में, यह एक पैटर्न है जिसका आप जावा में बहुत सामना करेंगे। आमतौर पर, ज्यादातर एपीआई स्ट्रिंग्स के साथ स्ट्रीम्स से ज्यादा काम करते हैं। धाराओं का उपयोग करने का अर्थ है कि संभवतः सभी सामग्री को एक ही समय में मेमोरी में लोड नहीं करना पड़ता है, जो एक महान विचार हो सकता है!


2
@ गिलूम, ऐसा करने से मुझे दस्तावेज़ मिलता है = अशक्त। क्यों होता है ऐसा?
हेनियोजेआर

1
कोड देखे बिना कोई विचार नहीं। हो सकता है कि आपका इनपुट अमान्य हो और आप अपवाद को किसी तरह से निगल लें ...
Guillaume

कोड की इस लाइन को निष्पादित होने में लंबा समय लगता है। प्रदर्शन में सुधार करने का कोई तरीका?
राज शाह

1
+1 मेरे लिए (मूर्खतापूर्ण, निश्चित रूप से) कि स्ट्रिंग पैरामीटर को xml को पार्स करने के लिए माना जाता था .... निश्चित रूप से, इसके बजाय URI की अपेक्षा करना सही अर्थ है ....
nterry

@RajShah आपको केवल स्टार्टअप पर इस तर्क को चलाना चाहिए, इसलिए एक बड़ा समय हिट होना चाहिए। आपको कॉन्फ़िगरेशन को बहुत बार बदलना नहीं चाहिए, या तो ....
nterry

24

इसके बजाय कोशिश करें db.parse(xml):

Document doc = db.parse(new InputSource(new StringReader(**xml**)));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.