3

XMLCatalogを使用して、スキーマインポートステートメントのxsdsを解決できますか?もしそうなら、好ましい/ベストプラクティスは何ですか?xsdsをjarにパッケージ化したいので、相対的なschemaLocationの使用は機能しませんでした。

これまでのところ、私は次のようなことをしようとしています。

SchemaFactory factory = SchemaFactory
        .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"/path/to/catalog.xml"});
factory.setResourceResolver(catalogResolver);

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));

運が悪かった。

4

1 に答える 1

5

ざっと見てみると、2つの問題があります。

XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"catalog.xml"});

このメソッドのJavadocを見ると、次のように読むことができます。

カタログ-絶対URIの順序付き配列リスト

これはあなたが使用するものではありません。

2番目の問題はここにあります

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));

スキーマのシステムIDを設定しないため、インポートの相対的な場所がある場合は、スキーマファイルがあるディレクトリではなく、アプリケーションの現在のディレクトリを基準にして解決されます。ソースでsetSystemIdを呼び出すか、作成時にシステムIDを渡す必要があります。

new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())
于 2009-06-11T20:31:57.020 に答える