Ich erhalte eine Java-Ausnahme wie:
java.net.MalformedURLException: no protocol
Mein Programm versucht, eine XML-Zeichenfolge zu analysieren, indem es Folgendes verwendet:
Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);
Die XML-Zeichenfolge enthält:
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";
Irgendwelche Vorschläge, was diesen Fehler verursacht?
Antworten:
Die Dokumentation könnte Ihnen helfen: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
Die Methode
DocumentBuilder.parse(String)
nimmt einen URI und versucht ihn zu öffnen. Wenn Sie den Inhalt direkt angeben möchten, müssen Sie ihm einInputStream
oderReader
beispielsweise einStringReader
. ... Willkommen zu den Java-Standard-Indirektionsebenen!Grundsätzlich :
Beachten Sie, dass Sie das
File
Objekt direkt übergeben können, wenn Sie Ihr XML aus einer Datei lesenDocumentBuilder.parse()
.Nebenbei bemerkt, dies ist ein Muster, auf das Sie in Java häufig stoßen werden. Normalerweise arbeiten die meisten APIs mehr mit Streams als mit Strings. Die Verwendung von Streams bedeutet, dass möglicherweise nicht der gesamte Inhalt gleichzeitig in den Speicher geladen werden muss, was eine gute Idee sein kann!
quelle
Versuchen Sie statt
db.parse(xml)
:quelle