ROME に RSS1.0 の Dom Document オブジェクトを渡すとエラー発生。jdom1.0 でも jdom1.1 でもダメだった。


Exception in thread "main" org.jdom.IllegalAddException: The namespace xmlns="http://purl.org/rss/1.0/" could not be added as a namespace to "RDF": The namespace prefix "" collides with the element namespace prefix
  at org.jdom.Element.addNamespaceDeclaration(Element.java:342)
  at org.jdom.DefaultJDOMFactory.addNamespaceDeclaration(DefaultJDOMFactory.java:189)
  at org.jdom.input.DOMBuilder.buildTree(DOMBuilder.java:234)
  at org.jdom.input.DOMBuilder.buildTree(DOMBuilder.java:170)
  at org.jdom.input.DOMBuilder.build(DOMBuilder.java:135)
  at com.sun.syndication.io.WireFeedInput.build(WireFeedInput.java:250)
  at com.sun.syndication.io.SyndFeedInput.build(SyndFeedInput.java:148)

サンプルコード


// XML文字列からDOM Documentを生成
String xmlcontent = getXmlContent(); // getXmlContentは独自実装
StringReader sr = new StringReader(xmlcontent);
org.xml.sax.InputSource is = new org.xml.sax.InputSource(sr);
org.w3c.dom.Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
 
// SyndFeed生成器
SyndFeedInput sfi = new SyndFeedInput();
 
// これだと RSS1.0 のとき org.jdom.IllegalAddException が発生してしまう
// SyndFeed sf = sfi.build(doc);
 
// こっちだと RSS1.0 でも例外が発生しない
ByteArrayInputStream bais = new ByteArrayInputStream(xmlcontent.getBytes("UTF-8"));
SyndFeed sf = sfi.build(new com.sun.syndication.io.XmlReader(bais));

Ref.
-ROME: RSS/Atom syndication and publishing tools
-JDOM

tags: Java zurazure

Posted by NI-Lab. (@nilab)