我有以下实施任务,我不知道如何解决它。
我们有一个基于SAX的语法检查器,用于检查某些结束endElement()中的hashsum的xml格式。此 hashsum 是使用一种过滤InputStream 构建的,它在读取内容时更新MessageDigest。 SAX-syntaxchecker使用此输入流作为其InputSource。
问题(我的任务)是,hashsum应该建在输入xml的一些规范化部分上(参见http://www.w3.org/TR/xml-c14n)。
现在很棘手:我们有一个 Canonicalizer也使用SAX 来规范化输入。 (需要注意区分属性和节点等的当前上下文,这就是我们使用SAX的原因)
我想重用那个Canonicalizer,但是我觉得如何将这两个SAX解析器结合起来。
我想我想要某种流水线操作:
InputFile - > Canonicalizer - > HashCalculation-InputStream - > SyntaxChecker。
任何想法/参考如何实现? TIA。
答案 0 :(得分:0)
由于哈希计算从输入流中读取,因此规范化的结果最终必须呈现为输入流。您可以使用连接到PipedOutputStream的PipedInputStream,或临时字节数组上的一对ByteArrayOutputStream / ByteArrayInputStream。
相反,如果两个组件的设计都考虑了管道衬里,那么您可以使用org.xml.sax.XmlFilter
将规范化器中的事件与哈希计算/语法检查器的处理程序连接起来