我想使用 RELAX NG 模式验证 XML 文档,并且我想使用JAXP 验证 API.
通过谷歌搜索,我似乎可以使用Jing和ISO RELAX JARV 至 JAXP 桥。不幸的是,将两者添加到我的类路径后,我无法让它工作。SchemaFactory
只是抛出一个IllegalArgumentException
当它尝试实例化工厂时 - 我查看了内部SchemaFactory
, 显然SchemaFactoryFinder
返回空结果。
所以我很感激任一问题的答案:
- 我怎样才能让这个与Jing和这座桥一起工作?
- 我应该尝试一组更好/不同的库吗?
我需要它与 Java 5 和 Java 6 一起使用。
Thanks!
我解决了这个错误在 Java 1.6 上与以下行:
// Specify you want a factory for RELAX NG "compact"
System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);
这允许我使用 Jing 根据 Compact RELAX NG 模式验证 XML 文档。完整示例如下。我没有使用这座桥或其他任何东西。运行时类路径只有 jing.jar (20091111) 和我自己的 Validator 类。
import java.io.File;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
public class Validate
{
public static void main(String[] args) throws SAXException, IOException
{
// Specify you want a factory for RELAX NG
System.setProperty(SchemaFactory.class.getName() + ":" + XMLConstants.RELAXNG_NS_URI, "com.thaiopensource.relaxng.jaxp.CompactSyntaxSchemaFactory");
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.RELAXNG_NS_URI);
// Load the specific schema you want.
// Here I load it from a java.io.File, but we could also use a
// java.net.URL or a javax.xml.transform.Source
File schemaLocation = new File(args[0]);
// Compile the schema.
Schema schema = factory.newSchema(schemaLocation);
// Get a validator from the schema.
Validator validator = schema.newValidator();
for (int i = 1; i < args.length; i++)
{
String file = args[i];
// Check the document
try
{
validator.validate(new StreamSource(new File(file)));
System.out.println(file + " is valid.");
}
catch (SAXException ex)
{
System.out.print(file + " is not valid because: " + ex.getMessage());
}
}
}
}
再说一次,我只测试了这个 ion Java 1.6。
$ java -version
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)