Отключение проверки может не помешать процессору извлекать DTD, так как он все еще может делать это для использования значений по умолчанию атрибутов и т. Д., Присутствующих в DTD (который он будет помещать в дерево), даже если он не выполняет проверка по грамматике DTD.
Один из способов предотвращения сетевой активности при обработке XML-документа заключается в использовании «распознавателя гашения», такого как:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class BlankingResolver implements EntityResolver
{
public InputSource resolveEntity( String arg0, String arg1 ) throws SAXException,
IOException
{
return new InputSource( new ByteArrayInputStream( "".getBytes() ) );
}
}
, а затемустановите это перед обработкой следующим образом:
DocumentBuilderFactory factory = DocumentBuilderFactory.
factory.setNamespaceAware( true );
builder = factory.newDocumentBuilder();
builder.setEntityResolver( new BlankingResolver() );
myDoc = builder.parse( myDocUri );
// etc.
Затем вы также будете уверены, что обрабатываемый документ не был изменен какой-либо информацией из DTD.y