2009-11-10 5 views
131

मैं जावा अपवाद की तरह हो रही है:java.net.MalformedURLException: कोई प्रोटोकॉल

java.net.MalformedURLException: no protocol 

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

Document dom; 
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
dom = db.parse(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"; 

इस त्रुटि के कारण क्या कोई सुझाव है?

+0

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

उत्तर

283

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

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

असल:

DocumentBuilder db = ...; 
String xml = ...; 
db.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8")))); 

ध्यान दें कि यदि आप एक फ़ाइल से अपने एक्सएमएल पढ़ते हैं, तो आप सीधे File वस्तु DocumentBuilder.parse() को दे सकते हैं।

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

+7

संकेतों के जावा मानक स्तर के लिए +1 –

+1

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

+0

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

18

db.parse(xml) के बजाय का प्रयास करें:

Document doc = db.parse(new InputSource(new StringReader(**xml**))); 
संबंधित मुद्दे