2015-11-11 65 views
0

我正在使用java.xml.transform.Transformer向SOAP请求添加身份验证头。我的应用程序在JDK1.8上运行。JDK 1.8和java.xml.transform.Transformer问题

当执行的以下代码的线I得到记录到控制台随后的警告消息

代码段:

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

登录警告:

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

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

我使用Maven和没有明确指定的Xerces或撒克逊人,的Xalan等使用,其使用Maven的CXF-CODEGEN-插件

生成的代码当我调试这个问题,我可以看到我的应用程序警告在net.sf.saxon.event.Sender中生成

任何人都可以;

  1. 因此我的代码使用一个有效的功能名称或
  2. 一种手段,从我的日志输出抑制警告消息解决方案

回答

1

我们可能需要去攻击这个从两端:(一)为什么要求验证功能,以及(b)解析器为什么不能识别它。

(a)为什么要求?如果应用程序请求基于DTD的验证,Saxon将请求此功能,例如通过执行Configuration.setValidation(true)。这个请求可能有其他各种可能的地方。

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

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

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

+0

感谢您接受答案。但我提出了各种各样的可能性,并且我很想知道(其他人稍后会来),最终的答案实际上是什么。 –