2011-03-28 34 views
1

URLから一部のRSSを読み込んでいて、いくつかの問題が発生しています。 は当初、私はこのような簡単な実装を持っていた:org.apache.xerces.dom.DeferredDocumentImplがorg.dom4j.Documentと互換性がありません

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

しかし、このdidntの応答が非常に遅かったなら、私が要求をタイムアウトすることができます。これをしようとすると、私はannyoingエラーを取得

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 

私はこの問題を回避するにはどうすればよい?だから私はそれを変更しましたか上記のいずれのメソッドも、そのタイプのDocumentを返すことは想定されておらず、正しいドキュメントタイプにキャストしようとしています。

EDIT:問題はorg.w3c.domを返すdb.parse(is)です。 。

答えて

0

問題が解決しました。使用することにより

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

org.w3c.dom.Document

3

など、あなたのElementはタイプorg.dom4j.Elementなくorg.w3c.domjavax.bind.xmlであることを確認します

つまり、dom4jのAPIはJavaの組み込みXML APIと互換性がありません。この2つは、文字列で操作しない限り(例えば、dom4jでXMLを生成し、JavaのXMLでXMLを解析する、またはその逆の場合など)、一緒に混在しないでください。

+0

からorg.dom4j.Documentを作成するには、どうもありがとうございました!問題を解決すると思われる – matskn

+0

問題はdb.parse()メソッドです。 org.w3c.dom型のオブジェクトを返します。 – matskn

関連する問題