我有下面的代碼片斷:這段代碼爲什麼會拋出一個MalformedURLException?
public class DOMTest {
public static void main(String[] args)
throws ParserConfigurationException, SAXException, IOException {
String xml = "<D:propfind xmlns:D=\"DAV:\""
+ " xmlns:C=\"urn:ietf:params:xml:ns:carddav\">\n"
+ " <D:prop>\n" + " <D:displayname />\n"
+ " <C:getctag />\n" + " </D:prop>\n" + "</D:propfind>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = null;
Document doc = null;
builder = factory.newDocumentBuilder();
System.out.println("namespaceAware=" + builder.isNamespaceAware()
+ ", validating=" + builder.isValidating());
doc = builder.parse(xml);
}
}
運行它產生以下輸出:
namespaceAware=true, validating=false
Exception in thread "main" java.net.MalformedURLException: no protocol:
<D:propfind xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav
<D:prop>
<D:displayname />
<C:getctag />
</D:prop>
</D:propfind>
at java.net.URL.<init>(URL.java:593)
at java.net.URL.<init>(URL.java:490)
at java.net.URL.<init>(URL.java:439)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:620)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:148)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:805)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:770)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
at com.lemcke.c.dav.card.DOMTest.main(DOMTest.java:31)
的XML爲請求的CardDAV一個標準的例子。這是使用命名空間時的一些配置問題嗎?
如果能夠不僅要讀,而且要明白的是一個真正的優勢:-) –