Je reçois une exception Java comme:
java.net.MalformedURLException: no protocol
Mon programme essaie d'analyser une chaîne XML en utilisant:
Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);
La chaîne XML contient:
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";
Des suggestions sur la cause de cette erreur?
Réponses:
La documentation pourrait vous aider: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
La méthode
DocumentBuilder.parse(String)
prend un URI et essaie de l'ouvrir. Si vous voulez donner directement le contenu, vous devez lui donner unInputStream
ouReader
, par exemple unStringReader
. ... Bienvenue dans les niveaux standard des indirections Java!Fondamentalement :
Notez que si vous lisez votre XML à partir d'un fichier, vous pouvez directement donner l'
File
objet àDocumentBuilder.parse()
.En remarque, c'est un modèle que vous rencontrerez souvent en Java. Habituellement, la plupart des API fonctionnent plus avec les flux qu'avec les chaînes. L'utilisation de Streams signifie que tout le contenu ne doit pas être chargé en mémoire en même temps, ce qui peut être une excellente idée!
la source
Essayez au lieu de
db.parse(xml)
:la source