setSchemaで例外

| コメント(0) | トラックバック(0)

最近XML SchemaでXML文章の検証ってのをJava上でやっている。数年前のプロジェクトのメンテナンス+新機能追加って感じのプロジェクトなので新旧いろんなのが混じってる。

さて本題。XMLのパースにはSAXを使ってる。XML Schemaを使うには大体こんな感じ。

// Schemaオブジェクトの作成

SchemaFactory sf =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
sf.setErrorHandler(new MyErrorHandler()); // *1
Source schemaFile = new StreamSource(new File("schema.xsd"));
Schema schema = sf.newSchema(schemaFile);

// パーサーの作成
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(false);
factory.setSchema(schema);

SAXParser parser = factory.newSAXParser();

*1 MyErrorHandlerはDefaultHandlerをオーバーライド

これで普通に動いてたんだけど、antでビルドしてパッケージ作って起動すると、factory.setSchema(schema)の行で以下の例外が…

java.lang.UnsupportedOperationException: This parser does not support spe
cification "null" version "null"

結論から言うと、SAXParserFactoryが古いJAXPを使おうとしているかららしく、以下のようなファイルをclasspathから取り除けばokらしい。
jaxp.jar
xerces-2.6.2.jar
crimson.jar
xalan.jar

なんで、そんな事が起きたかというと、build.xmlでクラスパスを指定するところで、

>include name="${hibernate.dir}/**/*.jar" /<
>include name="${hibernate-annotations.dir}/**/*.jar" /<

と横着したからでした。

参考になったのはここ(英語)。

トラックバック(0)

トラックバックURL: http://www.kazu.tv/blog-mgr/mt-tb.cgi/650

コメントする

このブログの作者

名前:kazu
仕事:IT関係の何でも屋
メール:kazu 後幕 kazu どと tv
詳しくはこの辺

このブログ記事について

このページは、kazuが2007年11月21日 09:31に書いたブログ記事です。

ひとつ前のブログ記事は「価格差」です。

次のブログ記事は「実行可能なjar」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ