XML namespace problems with IBM JDK(xml在使用ibm jdk時解釋錯誤)

zenzuguo發表於2005-11-02

問題描述:

jdom/dom4j在解釋xml時,用的是ibm的jre 1.4.1時,如果xml檔案中有xmlns:udm時,就會在將string input stream轉成document時出現:java.lang.IllegalStateException: can't declare any more prefixes in this context錯誤,請教各位大蝦這問題怎麼解決?,

xml檔案中包含一個這樣的元素:
如果用sun的jdk1.4.2就沒這個問題.
異常詳細資訊如下 :
Root cause: java.lang.IllegalStateException: can't declare any more prefixes in this context
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:691)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:287)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:583)

原因分析

是由於xml parser: Crimson不能解釋帶有類似於xmlns:xsi這樣的屬性.要用Xerces才行,但是IBM的jre在預設情況下尋找Crimson作為parser解決辦法是透過在程式中設定jre的xml parser為Xerces,同時將Xerces的jar包加入到classpath中,一共有三個包:xalan.jar,xercesImpl.jar,xml-apis.jar

從上可以下載.


jre的xml parser設定:是jrelib下的一個叫jaxp.properties檔案,最後有三行是關於指定 xml parser的,將註釋去掉,或者在程式中加入以下語句也可以:
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
System.setProperty("javax.xml.parsers.SAXParserFactory","org.apache.xerces.jaxp.SAXParserFactoryImpl");

如下連結中的文章解釋得非常具體:

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/106285/viewspace-809162/,如需轉載,請註明出處,否則將追究法律責任。

相關文章