いまさらながら感がありますが、java1.4でutf-8のBOM付XMLファイルをパースすると失敗するっぽい 2007/11/05
2007/11/06

javaです。バージョンは1.4です。

どうもutf-8のBOM付XMLファイルをパースすると失敗するようです。
下記のようなエラーがでるようです。

org.xml.sax.SAXParseException: ドキュメントのルート要素がありません。
at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3376)
at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3364)
at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:668)
at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:185)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:76)
at x.A.a(A.java:68)
at x.A.main(A.java:24)
Exception in thread "main"


utf-8のBOMなしでやるとうまくいきました。

使用しているコードは、
public static void a() throws ParserConfigurationException, SAXException,
IOException {

URL url = A.class.getResource("b.xml");
InputStream inputStream = url.openStream();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

System.out.println(">>" + builder);

Document doc = builder.parse(inputStream);

}



それで、H氏からの情報
かわりに Apache Xerces-J を使うとうまくいきます。


あと、

Xerces-J-bin.2.9.1.zip or tar.gz から xercesImpl.jar と xml-apis.jar を取り出し、
java 起動時に、これら二つを読み込みつつ、

-Djavax.xml.parsers.DocumentBuilderFactory=<DocumentBuilderFactoryImpl>
-Djavax.xml.transform.TransformerFactory=<TransformerFactoryImpl>


もう1.4からjava5の世界に移行しないと....

: