Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9和后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发布说明。
由于这些属性是针对当前版本新增的,建议应用程序在接口中捕获适当的异常,例如下面的示例中的SAXException。捕获应用程序可能会在旧版本上正常工作,例如示例代码中包含了以下方法,用于检测是否在支持新属性的JDK版本或JAXP实现中运行示例:
public boolean isNewPropertySupported() { try { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser parser = spf.newSAXParser(); parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "file"); } catch (ParserConfigurationException ex) { fail(ex.getMessage()); } catch (SAXException ex) { String err = ex.getMessage(); if (err.indexOf("Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.") > -1) { //预期的,不支持jaxp 1.5 return false; } } return true; }
如果由于新属性设置的限制而拒绝访问外部资源,则会抛出以下格式的错误异常:
[构造类型]:无法读取[构造类型] "[外部资源的名称]",因为由[property name]属性设置的[限制类型]访问被禁止。
例如,如果通过对http协议的访问限制拒绝获取外部DTD,如下所示:parser.setProperty("http://javax.xml.XMLConstants/property/accessExternalDTD", "file");,并且解析器解析包含对"http://java.sun.com/dtd/properties.dtd"的外部引用的XML文件,则错误消息将如下所示:
外部DTD:由于accessExternalDTD属性设置的访问限制,无法读取外部DTD ''http://java.sun.com/dtd/properties.dtd''的''http''访问。