1

我正在尝试为 Xerces XML 验证设置功能。我很难找到/理解哪些功能SchemaFactoryValidator.

我有以下代码:

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_US_URI);
factory.setFeature("http://xml.org/sax/features/validation", true);

Schema schema = factory.newSchema(mySchemaList);
Validator validator = schema.newValidator;
validator.setFeature("http://xml.org/sax/features/validation", true);

如果我执行上述操作,我会得到: SAXNotRecognizedException: Feature 'http://xml.org/sax/features/validation

但是,如果我将 注释掉setFeatureSchemaFactory设置该功能适用​​于Validator.

所以问题:

  1. 为什么我可以在 上设置该功能,Validator但不能在 上设置SchemaFactory
  2. 我在哪里可以找到哪些功能适用于Validator和的文档SchemaFactory

仅供参考:SchemaFactory我得到的是com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory

编辑

我尝试设置但没有成功的其他一些功能是:

http://xml.org/sax/features/namespaces

http://xml.org/sax/features/namespace-prefixes

4

1 回答 1

0

来自setFeature 的 JavaDoc

为这个 SchemaFactory 设置一个特性,这个工厂创建的 Schemas,以及这些 Schemas 创建的 Validators 和 ValidatorHandlers。

实现者和开发者应该特别注意 newSchema() 返回的特殊 Schema 对象是如何被处理的。在某些情况下,例如,当 SchemaFactory 和实际加载模式的类来自不同的实现时,可能无法自动继承 SchemaFactory 功能。开发人员应确保在这两个地方都明确设置了诸如安全处理之类的功能。

如您所见,由于某些限制,某些功能可能不会被继承。话虽如此,Xerces 2.7.x 版本似乎有一个从 2.8.x 开始修复的错误

于 2012-08-22T13:32:21.583 回答