Saya mendapatkan pengecualian Java seperti:
java.net.MalformedURLException: no protocol
Program saya mencoba mengurai string XML dengan menggunakan:
Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);
String XML berisi:
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";
Ada saran tentang apa yang menyebabkan kesalahan ini?
Jawaban:
Dokumentasi dapat membantu Anda: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
Metode ini
DocumentBuilder.parse(String)
mengambil URI dan mencoba membukanya. Jika Anda ingin langsung memberikan konten, Anda harus memberikannyaInputStream
atauReader
, misalnya aStringReader
. ... Selamat datang di level tipu daya standar Java!Pada dasarnya:
Perhatikan bahwa jika Anda membaca XML dari file, Anda dapat langsung memberikan
File
objekDocumentBuilder.parse()
.Sebagai catatan, ini adalah pola yang akan Anda temui banyak di Jawa. Biasanya, sebagian besar API bekerja dengan Streams lebih dari dengan Strings. Menggunakan Streaming berarti bahwa secara potensial tidak semua konten harus dimuat dalam memori pada saat yang sama, yang dapat menjadi ide bagus!
sumber
Coba alih-alih
db.parse(xml)
:sumber