1

Spring-namespacesを使用すると、Spring Bean の構成方法を独自の構造で定義できます。とてもかっこいい。

spring.schemas で次のように定義されているサードパーティ ソフトウェア (Assentis Docbase) を使用する必要があります (以下の例は簡略化されています)。

http\://com.apress.prospring2/ch07/custom.xsd=custDir:/custom.xsd

意味: ユーザーが spring-xml で schema-location: "http://com.apress.prospring2/ch07/custom.xsd" を定義すると、Spring はこのファイルを custom.xsd に対して検証します。

custDir は、提供された jar の外側のディレクトリです。junit テスト中にこの custDir を有効なパスを指すように設定する方法を知っている人はいますか? -DcustDir=/pathToXsd/ は既に試しましたが、うまくいきませんでした。

custDir を削除すると、すべてが期待どおりに機能しますが、提供された spring.schemas から削除することはできません。これはサード パーティのソフトウェアであるためです。

おそらくこれは、プロパティファイルがJavaでどのように処理されるかの問題ですが、私にはわかりません。

4

2 に答える 2

0

独自のカスタム spring.schemas ファイルに同じエントリを提供することで、このエントリを「オーバーライド」できる場合がありますが、カスタム xsd ファイルの場所を指定します。問題は、これは spring.schemas がロードされる順序に大きく依存することですが、試してみる価値はあります。

custDir はプレースホルダーではないため、このように置き換えることはできません。サードパーティのスキーマの場所がクラスパスの外にあることに驚いています。

于 2012-07-06T11:47:45.007 に答える
0

私の質問で提供された Iの構文はspring.schemas、サードパーティ ソフトウェアの独自の定義です。彼らはEntityResolver、手動で反応して"custDir:"いくつかの魔法のアルゴリズムを開始する独自のものを実装しました。そこで、次の回避策にたどり着きました。

my_spring.schemasでライブにする必要がある独自のものを作成する必要がありますMETA-INF/。スプリングがロードされていないことを確認する必要がmy_spring.schemasありspring.schemasます。

TestingContextのサブクラスである独自の実装でそれを達成しましたClassPathXmlApplicationContext。でTestingContextメソッドを上書きしprotected void loadBeanDefinitions(DefaultListableBeanFactory beanFactory) throws IOException、からの実装で埋めましたorg.springframework.context.support.AbstractXmlApplicationContext。私が行った唯一の変更は、 に行beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this))を追加することでしたbeanDefinitionReader.setEntityResolver(new PluggableSchemaResolver(getClassLoader(), "META-INF/my_spring.schemas)。そして、私がTestingContext自分のものを使用すると出来上がりmy_spring.schemasがロードされます。

このソリューションの欠点は、Spring が定義を検索するデフォルト名が変更されているため、jar にすべての xsd を提供する必要があることです。

于 2012-07-09T11:48:45.913 に答える