2

カスタム バリデーターを使用して、カスタム コンテンツ タイプ ドキュメント (xml 種類) を検証したいと考えています。xsd で検証したいが、メイン ドキュメントの特定の前処理の後でのみ。1.) スキーマの場所 (xsd) と名前空間がメイン ドキュメント ファイルで定義されていません。2.) 最初の理由の bcz など、xsd 検証を適用する前に、ドキュメント ファイルに前処理を行いたいと考えています。

したがって、xmlバリデーターを使用したいのですが、ファイルの前処理の後でのみです。

私の plugin.xml は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

<extension
point="org.eclipse.core.runtime.contentTypes">

<content-type
id="com.xyz.ide.core.contentType.dummy"
base-type="org.eclipse.core.runtime.xml"
file-extensions="blabla"
/>

</extension>

<extension
point="org.eclipse.wst.sse.ui.sourcevalidation">
<validator
scope="total"
class="mc.CustomValidator"
id="com.xyz.myValidator">
<contentTypeIdentifier
id="com.xyz.ide.core.contentType.dummy">
<partitionType
id="org.eclipse.wst.xml.XML_DEFAULT">
</partitionType>
</contentTypeIdentifier>
</validator>
</extension>

</plugin>

CustomValidator.java

public class CustomValidator implements ISourceValidator, IValidator {
XMLValidator validator = new XMLValidator();
IDocument document;

public void validate(IValidationContext helper, IReporter reporter) {
String fileContent = this.document.get();
final InputStream is = new ByteArrayInputStream(fileContent.toLowerCase().getBytes());

// Whats the problem in this line???
XMLValidationReport report = validator.validate("/home/rchawla/xmlWorkspace/abc.xsd", is);

ValidationMessage[] messages = report.getValidationMessages();
for(ValidationMessage message:messages){
System.out.println(message.getMessage());
}
}

プラグインをデバッグ モードで実行すると、validate メソッドを実行できますが、ドキュメントは xsd で検証されません。ValidationMessage[] messages = report.getValidationMessages(); として、上記のメソッドで間違っているのは何ですか? メインのドキュメント ファイルにエラーがあるにもかかわらず、メッセージが表示されません。

4

1 に答える 1

0

org.eclipse.wst.sse.ui.sourcevalidationまた、拡張ポイントを機能させるのに苦労しました。最終的に、別の拡張ポイントorg.eclipse.wst.validation.validatorV2を使用しました。2つのバリデーターの唯一の違いは、これはファイルの保存時にのみトリガーされ、入力中はトリガーされないことです。以下の例を参照してください。

<extension id="customValidator" name="Custom Validator" point="org.eclipse.wst.validation.validatorV2">
    <validator class="aaa.bbb.CustomValidator" markerId="customMarker" version="3">
        <include>
            <rules>
                <contentType id="customContentType" exactMatch="false"/>
            </rules>
        </include>
    </validator>
</extension>

バリデーターの実装はをオーバーライドする必要がありますorg.eclipse.wst.validation.AbstractValidator

于 2012-12-03T10:13:31.660 に答える