java.net.MalectedURLException: কোনও প্রোটোকল নেই


173

আমি জাভা ব্যতিক্রম পাচ্ছি:

java.net.MalformedURLException: no protocol

আমার প্রোগ্রামটি ব্যবহার করে একটি এক্সএমএল স্ট্রিং পার্স করার চেষ্টা করছে:

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";

কী কারণে এই ত্রুটি ঘটছে সে সম্পর্কে কোনও পরামর্শ?


সেই ত্রুটি বার্তাটি আপনি কোথায় পাচ্ছেন? এক্সএমএলকে বিশ্লেষণ করার সময়, বা এটি নেটওয়ার্কের মাধ্যমে প্রেরণের চেষ্টা করার সময়? পার্সিংয়ের সময় আপনি যদি এটি পান তবে এটি সত্যিই আশ্চর্য হবে।
জেস্পার

উত্তর:


369

ডকুমেন্টেশন আপনাকে সহায়তা করতে পারে: http://java.sun.com/j2se/1.5.0/docs/api/javax/xML/parsers/ ডকুমেন্ট বিল্ডার html

পদ্ধতিটি DocumentBuilder.parse(String)ইউআরআই লাগে এবং এটি খোলার চেষ্টা করে। আপনি যদি সরাসরি সামগ্রীটি দিতে চান তবে আপনাকে এটি দিতে হবে InputStreamবা Readerউদাহরণস্বরূপ এ StringReader। ... জাভা স্ট্যান্ডার্ড স্তরের ইন্ডিয়ারেশনে স্বাগতম!

মূলত:

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

মনে রাখবেন যে আপনি যদি কোনও ফাইল থেকে আপনার এক্সএমএল পড়েন তবে আপনি সরাসরি Fileঅবজেক্টটিকে দিতে পারেন DocumentBuilder.parse()

পার্শ্ব নোট হিসাবে, এটি জাভাতে আপনার মুখোমুখি হবে এমন একটি প্যাটার্ন। সাধারণত, বেশিরভাগ এপিআই স্ট্রিংয়ের চেয়ে স্ট্রিমের সাথে বেশি কাজ করে। স্ট্রিম ব্যবহার করার অর্থ হ'ল সম্ভাব্যভাবে সমস্ত সামগ্রী একই সাথে মেমরিতে লোড করতে হয় না, এটি দুর্দান্ত ধারণা হতে পারে!


2
@ গুইলুম, এটি করে আমি নথি পেয়েছি = বাতিল। কেন এমন হয়?
হেনিওজেআর

1
কোডটি না দেখে ধারণা নেই। হতে পারে আপনার ইনপুটটি অবৈধ এবং আপনি কোনওভাবে ব্যতিক্রম গিলেছেন ...
গিলিয়াম

কোডের এই লাইনটি কার্যকর করতে দীর্ঘ সময় নেয়। পারফরম্যান্স উন্নয়নের কোনও উপায়?
রাজ শাহ

1
আমার জন্য +1 ধরে ধরে (মূর্খভাবে, অবশ্যই) যে স্ট্রিং প্যারামিটারটি xML কে পার্স করার কথা ছিল .... অবশ্যই, এটির পরিবর্তে কোনও ইউআরআই প্রত্যাশা করা পুরোপুরি বুদ্ধিমান হবে ....
নটারি

@ রাজশাহঃ আপনার কেবলমাত্র এই যুক্তিটি শুরুতে চালানো উচিত, সুতরাং একটি বৃহত্তর সময় হিট করা উচিত নয়। আপনার খুব শীঘ্রই কনফিগারেশন পরিবর্তন করা উচিত নয়, ....
nterry

24

পরিবর্তে চেষ্টা করুন db.parse(xml):

Document doc = db.parse(new InputSource(new StringReader(**xml**)));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.