2009-11-10 27 views
131

Aşağıdakiler gibi bir Java istisnası alıyorum:java.net.MalformedURLException: protokol yok

java.net.MalformedURLException: no protocol 

Programım

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"; 
bu hatayı neden oluyor?

+0

tam o hata mesajı alıyorsanız? XML ayrıştırılırken veya ağ üzerinden göndermeye çalışırken? Parsing yaparken bunu elde ederseniz gerçekten garip olurdu. Java standart seviyeleri için – Jesper

cevap

283

belgeler size yardımcı olabilecek: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html

bir URI alır ve açmak için çalışır DocumentBuilder.parse(String) yöntemi. İçeriği doğrudan vermek istiyorsanız, bir InputStream vermelisiniz, örneğin bir ByteArrayInputStream. ... Java standart seviyelerinin indirilmesine hoş geldiniz! Temelde

: Bir dosyadan XML okursanız

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

Not doğrudan DocumentBuilder.parse() için File nesneyi verebileceği.

Bir yan not olarak, bu Java'da çok karşılaşacağınız bir kalıptır. Genellikle, çoğu API Streams ile Strings'ten daha fazla çalışır. Akımların kullanılması, tüm içeriğin aynı anda belleğe yüklenmesi gerekmediği anlamına gelir, bu da harika bir fikir olabilir!

+7

+1 ( –

+1

@Guillaume), bunu yapıyordum document = null. Bu neden oluyor? – HenioJR

+0

Kodu bakmadan bir fikrim yok. Belki de girişiniz geçersiz ve bir şekilde istisna yutuyorsunuz ... – Guillaume

18

yerine db.parse(xml) ait deneyin:

Document doc = db.parse(new InputSource(new StringReader(**xml**))); 
İlgili konular