java.io. IOException: Сервер возвратил код ответа HTTP: 503 для URL: http://www.w3.org/TR/html4/strict.dtd

Я получаю эту ошибку со следующей строкой:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(html.toString())));

Подробнее:

java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/html4/strict.dtd
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1290)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:677)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1315)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1282)
    at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:283)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1192)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1089)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1002)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
    at concurrency.Worker.run(Worker.java:56)
    at java.lang.Thread.run(Thread.java:619)

У кого-либо есть подсказка, какова могла бы быть проблема?

1
задан l245c4l 3 July 2010 в 18:26
поделиться

2 ответа

Проблема заключалась в том, что сервер W3 в это время не работал. Код ответа HTTP 503 означает «Служба недоступна».

В своем решении вы указали парсеру DOM не пытаться получить внешние DTD. Это фактически отключает проверку любых DTD, которые ваше приложение не может найти локально. Я считаю, что это также имеет побочный эффект - не заполнять вашу DOM значениями по умолчанию для атрибутов.

Лучшим решением было бы получить копии любых внешних DTD, которые ваше приложение может использовать, и либо подключить их к вашему приложению, либо сохранить их в постоянном локальном кэше. Это изолирует ваше приложение от простоев внешнего сервера, а также снижает нагрузку на инфраструктуру W3.

Другой альтернативой может быть настройка вашего приложения на использование кэширующего веб-прокси.

1
ответ дан 2 September 2019 в 23:19
поделиться

Ок, я нашел решение.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
Document doc = factory.newDocumentBuilder().parse(new InputSource(new StringReader(html.toString())));
1
ответ дан 2 September 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: