【问题标题】:Xerces - Feature not recognized for SchemaFactory but OK for ValidatorXerces - SchemaFactory 无法识别功能但验证器可以
【发布时间】:2012-08-22 12:11:04
【问题描述】:

我正在尝试为 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

但是,如果我为SchemaFactory 注释掉setFeature,则设置该功能适用​​于Validator

所以问题:

  1. 为什么我可以在Validator 上设置该功能,而不能在SchemaFactory 上设置?
  2. 我在哪里可以找到关于哪些功能对 ValidatorSchemaFactory 有效的文档?

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

编辑

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

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

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

【问题讨论】:

    标签: java xerces xml-validation


    【解决方案1】:

    来自JavaDoc of setFeature

    为这个 SchemaFactory 设置一个特性,这个工厂创建的 Schemas, 并且通过扩展,由这些创建的 Validators 和 ValidatorHandlers 架构。

    实施者和开发者应特别注意 处理 newSchema() 返回的特殊 Schema 对象。在一些 例如,当 SchemaFactory 和类实际上 加载模式来自不同的实现,它可能不是 SchemaFactory 功能可以自动继承。 开发人员应确保安全处理等功能, 在这两个地方都明确设置。

    如您所见,由于某些限制,某些功能可能无法继承。话虽如此,Xerces 2.7.x version seems to have a bug around this which was fixed from the 2.8.x onwards.

    【讨论】:

    • 但问题不在于该功能没有被传播到验证器,而是工厂无法识别它。另外,我不知道去哪里查看工厂和/或验证器会识别哪些功能,因为我没有找到工厂识别的任何功能,只有一个验证器识别。
    • @JohnB xerces 邮件列表是您提出问题的正确位置
    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2015-11-19
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多