いまさらながら感がありますが、java1.4でutf-8のBOM付XMLファイルをパースすると失敗するっぽい
2007/11/05
2007/11/06
java
xml
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"
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);
}
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の世界に移行しないと....
: