次のようなJava例外が発生しています。
Java.net.MalformedURLException: no protocol
私のプログラムは、次を使用してXML文字列を解析しようとしています。
Document dom;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(xml);
XML文字列には次が含まれます。
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";
このエラーの原因に関する提案はありますか?
ドキュメントはあなたを助けることができます: http://Java.Sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/DocumentBuilder.html
メソッドDocumentBuilder.parse(String)
はURIを受け取り、それを開こうとします。コンテンツを直接提供する場合は、InputStream
またはReader
を指定する必要があります(たとえば、StringReader
)。 ... Java標準レベルのインダイレクションへようこそ!
基本的に :
DocumentBuilder db = ...;
String xml = ...;
db.parse(new InputSource(new StringReader(xml)));
ファイルからXMLを読み取る場合は、File
オブジェクトをDocumentBuilder.parse()
に直接渡すことができます。
補足として、これはJavaでよく遭遇するパターンです。通常、ほとんどのAPIは、ストリングよりもストリームで機能します。 Streamsを使用すると、潜在的にすべてのコンテンツをメモリに同時にロードする必要がなくなる可能性があります。これは素晴らしいアイデアです。
db.parse(xml)
の代わりに試してください:
Document doc = db.parse(new InputSource(new StringReader(**xml**)));