これは、maven-jaxb2-plugin用に作成したリゾルバーです。このリゾルバーは、システム ID を Maven アーティファクトのリソースに解決します。これは、あなたのタスクと多少似ています。
- あなたの仕事は、基本的に、
resolveEntity
メソッドを実装することです。
- 通常、既存の を拡張することが実用的
CatalogResolver
です。
- その後、メソッドをオーバーライドできます
getResolvedEntity
。
- 通常、最初に super メソッドを呼び出して
systemId
/を解決しますpublicId
。
- 次に、カスタム解像度を実行しようとします。
systemId
通常、リソースの場所の URL (または論理 URI) です。
publicId
多くの場合、名前空間 URI です。
クラスパスで解決される別のリゾルバーからの簡単なコード スニペットを次に示します。classpath:com/acme/foo/schema.xsd
public static final String URI_SCHEME_CLASSPATH = "classpath";
@Override
public String getResolvedEntity(String publicId, String systemId) {
final String result = super.getResolvedEntity(publicId, systemId);
if (result == null) {
return null;
}
try {
final URI uri = new URI(result);
if (URI_SCHEME_CLASSPATH.equals(uri.getScheme())) {
final String schemeSpecificPart = uri.getSchemeSpecificPart();
final URL resource = Thread.currentThread()
.getContextClassLoader()
.getResource(schemeSpecificPart);
if (resource == null) {
return null;
} else {
return resource.toString();
}
} else {
return result;
}
} catch (URISyntaxException urisex) {
return result;
}
}
あなたのシナリオでは、次のことを行います。
- のように URI スキーマを定義します
database:schema:table:value:id:schema.xsd
。
- そのような URI を解決できるカタログ リゾルバーを作成します。
- 名前空間 URI または絶対スキーマの場所の URL を URI に書き換えるカタログ ファイルを定義します
database:...
。
簡単な表記法では、これは次のようになります。
REWRITE_SYSTEM "http://example.com/schemas" "database:schemas:content:schema_id:example/schemas"
- したがって、「ベース」カタログ リゾルバーは最初
http://example.com/schemas/schema.xsd
にdatabase:schemas:content:schema_id:example/schemas/schema.xsd
.
- その後、コードは
database:schemas:content:schema_id:example/schemas/schema.xsd
データベース リソースに解決されます。