thread - java.net.MalformedURLException: sin protocolo
java net malformedurlexception no protocol ${ client url (2)
Estoy obteniendo la excepción de Java como:
java.net.MalformedURLException: no protocol
Mi programa está tratando de analizar una cadena XML usando:
Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);
La cadena XML contiene:
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";
¿Alguna sugerencia sobre qué está causando este error?
La documentación podría ayudarlo: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
El método DocumentBuilder.parse(String)
toma un URI e intenta abrirlo. Si desea dar directamente el contenido, debe darle un InputStream
, por ejemplo, un ByteArrayInputStream
. ... ¡Bienvenido a los niveles estándares de Java de indirecciones!
Básicamente :
DocumentBuilder db = ...;
String xml = ...;
db.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("utf-8"))));
Tenga en cuenta que si lee su XML de un archivo, puede darle directamente el objeto File
a DocumentBuilder.parse()
.
Como nota al margen, este es un patrón que encontrará mucho en Java. Por lo general, la mayoría de las API funcionan con Streams más que con Strings. Usar Streams significa que potencialmente no todo el contenido debe cargarse en la memoria al mismo tiempo, ¡lo cual puede ser una gran idea!
Pruebe en lugar de db.parse(xml)
:
Document doc = db.parse(new InputSource(new StringReader(**xml**)));