gpt4 book ai didi

java - 将 Saxon 的 DocumentBuilder 与 JAXB 结合使用会发出有关验证的警告

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:25 25 4
gpt4 key购买 nike

我有一个使用 JAXB (Moxy) 和 Saxon 来运行 XPath 表达式的应用程序。一切都按预期工作,但 Saxon 的 DocumentBuilder 发出此警告:

XML Parser does not recognize the feature http://xml.org/sax/features/validation

代码:

Processor proc = new Processor(false);
DocumentBuilder builder = proc.newDocumentBuilder();
XdmNode doc = builder.build(new JAXBSource(jaxbContext, jaxbObject));//The warning occurs here
...

我认为发生的情况是 JAXB 使用 StaX 解析器,而 Saxon 使用 SAX。因此,当 Saxon 尝试在 StaX 解析器上设置上述属性时,它会失败。

有没有办法阻止 Saxon 在构建文档时设置该属性,或者至少抑制该警告?我尝试在处理器上设置一堆不同的属性,但没有一个起作用。无论如何,我不需要验证,因为文档已经过验证并读入 JAXB 对象。

编辑:我一直在尝试覆盖 Processor、DocumentBuilder 和 JAXBSource 上的 errorListener,但该消息不会通过其中任何一个。

最佳答案

我将更仔细地研究这一点,但首先要说的是 JAXBSource 扩展了 SAXSource,而 Saxon 对待它就像对待任何其他 SAXSource 一样。 JAXB 文档中的警告“因此在一般应用程序中强烈建议不要访问 SAXSource 上定义的方法”是空洞的 - 当应用程序(如 Saxon)被定义为接受类 X 的对象时,通常不会注意到它们从未听说过的 X 子类规范中给出的建议。

属性“http://xml.org/sax/features/validation”的状态​​有点不清楚。 IIRC SAX 规范并没有说每个 XMLReader 都必须识别此属性,但他们确实将其定义为请求 DTD 扩展的唯一方式,并且 XSLT 处理器需要 DTD 扩展才能进行;如果 XMLReader 不进行 DTD 扩展,则转换可能会以不可预测的方式失败,因此发出警告是合理的。

抑制警告的最简洁方法可能是提供一个确实识别此属性的 XMLReader,并从那里委托(delegate)给不识别它的 XMLReader。

关于java - 将 Saxon 的 DocumentBuilder 与 JAXB 结合使用会发出有关验证的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33920142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com