java. net. MalformedURLException: aucun protocole


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?

Author: JJJ, 2009-11-10

2 answers

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 donner un InputStream ou Reader, par exemple un StringReader. ... Bienvenue sur les niveaux standards Java des indirections !

Fondamentalement :

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

Notez que si vous lisez votre XML à partir d'un fichier, vous pouvez directement donner l'objet File à DocumentBuilder.parse() .

En note de côté, c'est un modèle que vous rencontrerez beaucoup en Java. Habituellement, la plupart des API fonctionnent avec des flux plus qu'avec des chaînes. L'utilisation de flux signifie que potentiellement tout le contenu ne doit pas être chargé en mémoire en même temps, ce qui peut être une excellente idée !

 303
Author: Guillaume, 2018-06-29 12:15:54

Essayez au lieu de db.parse(xml):

Document doc = db.parse(new InputSource(new StringReader(**xml**)));
 18
Author: Shyam_coder, 2016-06-27 12:45:31