org.apache.xerces.dom.DeferredDocumentImpl несовместим с org.dom4j.Document - PullRequest
1 голос
/ 28 марта 2011

Я читаю некоторые RSS с URL и испытываю некоторые проблемы.Первоначально у меня была простая реализация, подобная этой:

SAXReader reader = new SAXReader();
Document doc = reader.read(new URL(sURL));

Однако это не позволило мне тайм-аут запроса, если ответ был очень медленным.Поэтому я изменил его на:

public static org.dom4j.Document readXml(InputStream is) throws SAXException, IOException,
        ParserConfigurationException {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

        dbf.setValidating(false);
        dbf.setIgnoringComments(false);
        dbf.setIgnoringElementContentWhitespace(true);
        dbf.setNamespaceAware(true);

        DocumentBuilder db = null;
        db = dbf.newDocumentBuilder();

        return (org.dom4j.Document)db.parse(is);
    }

     SAXReader reader = new SAXReader();

    URL myUrl = new URL(sURL);
    URLConnection c = myUrl.openConnection();
    c.setConnectTimeout(10000);
    c.setReadTimeout(10000);
    org.dom4j.Document doc = readXml(c.getInputStream());
    Element root = doc.getRootElement();

При попытке этого я получаю сообщение об ошибке:

org.apache.xerces.dom.DeferredDocumentImpl incompatible with org.dom4j.Document

Как мне избежать этого?Ни один из вышеперечисленных методов не должен возвращать этот тип документа, и я также пытаюсь привести его к правильному типу документа.дом ..

Ответы [ 2 ]

4 голосов
/ 28 марта 2011

Убедитесь, что ваш Element имеет тип org.dom4j.Element, а не org.w3c.dom, javax.bind.xml и т. Д.

Другими словами, dom4j API не совместим со встроенным Java API XML. Они просто не смешиваются вместе, если вы не работаете со строками (например, генерируете XML в dom4j и анализируете его с помощью XML в Java или наоборот).

1 голос
/ 28 марта 2011

Проблема решена!

С помощью:

DOMReader domReader = new DOMReader();
org.dom4j.Document dom4jDoc = domReader.read(doc);
org.dom4j.Element root = (Element)dom4jDoc.getRootElement();

Для создания org.dom4j.Document из org.w3c.dom.Document

...