java - JDK 1.8 和 java.xml.transform.Transformer 的问题

标签 java xml xml-parsing saxon

我正在使用 java.xml.transform.Transformer 将身份验证 header 添加到 SOAP 请求。我的应用程序运行在 JDK1.8 上。

当执行下面的代码行时,我会收到记录到控制台的后续警告消息

代码片段:

transformer.transform(authenticationHeader, header.getResult());

记录的警告:

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

输出是警告,不会阻止请求成功完成,但我想从日志文件中删除。

我正在使用 Maven,并且没有明确指定 Xerces 或 Saxon、Xalan 等。我的应用程序使用的是使用 Maven cxf-codegen-plugin 生成的代码

当我调试此问题时,我可以看到警告是在 net.sf.saxon.event.Sender 中生成的

任何人都可以;

  1. 我的代码使用有效功能名称的解决方案或
  2. 一种抑制日志输出中警告消息的方法

最佳答案

我们可能需要从两端攻击这个问题:(a) 为什么请求验证功能,以及 (b) 为什么解析器无法识别它。

(a) 为什么会被要求?如果应用程序请求基于 DTD 的验证,例如通过执行 Configuration.setValidation(true),Saxon 将请求此功能。可能还有很多其他地方可以提出此请求。

(b) 为什么不被识别?名称http://xml.org/sax/features/validation被记录为 Apache Xerces 的一项功能,但我不知道内置的 JDK 解析器是否支持它:找到该文档并不容易。在 XMLReader javadoc 中,它没有被描述为每个解析器都必须识别的功能,但它被用作示例功能名称。我总是将我的环境配置为默认使用 Apache Xerces,因此需要付出一些努力来运行测试,以了解在 Apache Xerces 不存在的情况下支持哪些功能。

也许解析器实际上并不是 JDK 默认的解析器,而是其他一些解析器 - 也许是用户编写的过滤器,它不是“真正的”解析器,但过滤了真实解析器的输出(这很常见,而且它是此类过滤器的一个常见错误是不将配置设置传递给底层解析器)。不幸的是,在某些路径中,Saxon 报告哪个解析器拒绝了请求,但此特定路径的情况并非如此。我会解决这个问题。

这并不像忽略警告那么简单。如果应用程序请求 DTD 验证但没有发生,则可能会产生严重后果。 children 可能会死。

关于java - JDK 1.8 和 java.xml.transform.Transformer 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33654220/

相关文章:

c# - 如何使用 XmlConvert 将转换为对象的值类型转换为字符串?

android - 您可以使用 XML 将 View 连接到事件处理程序吗?

ios - 使用 NSTimer 在后台解析 XML 的最佳方法是什么

java - 在 java-8 中解码 xml 时出错 "secure-processing org.xml.sax.SAXNotRecognizedException causing java.lang.IllegalStateException"

java - 两个对象值为null;为什么?

java - 是否有在线中央 javadoc 存储库?

java - 短暂不活动后,Openshift 服务不可用

Java ETL流程

xml - 在 WCF 中修改 XML 响应;损坏的 XML

java - xslt处理