Ваша виртуальная машина в сети? Возможно, что средство визуализации / анализатор пытается загрузить связанные ресурсы, такие как
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd
, которые необходимы для обеспечения правильности предоставленного вами xml (xhtml).
В сервлете я делаю следующее, что, кажется, работает (некоторые онлайн-ресурсы доступны в моей файловой системе, потому что у сервера нет подключения к Интернету):
final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if (systemId.contains("xhtml1-transitional.dtd")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml1-transitional.dtd"));
} else if (systemId.contains("xhtml-lat1.ent")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml-lat1.ent"));
} else if (systemId.contains("xhtml-symbol.ent")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml-symbol.ent"));
} else if (systemId.contains("xhtml-special.ent")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml-special.ent"));
} else {
return null;
}
}
});
final ByteArrayInputStream inputStream = new ByteArrayInputStream(html.getBytes("UTF-8"));
final Document doc = builder.parse(inputStream);
inputStream.close();
final ITextRenderer renderer = new ITextRenderer(26f * 4f / 3f, 26);
renderer.setDocument(doc, request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort());
renderer.layout();
Это в основном устанавливает DocumentBuilder, а затем анализирует мой документ (который имеет формат String и представлен переменной html )