我想使用自定义验证器验证自定义内容类型文档(xml 种类)。想用 xsd 验证它,但只能在对主文档进行某些预处理之后。无法使用普通 xml 验证器,因为 - 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(); 给出零消息,即使主文档文件中存在错误。