2011-11-14 60 views
1

我有以下实现任务,我不知道如何解决它。管道两个萨克斯解析器?

我们有一个基于SAX的语法检查器,用于检查某个结束endElement()中的hashsum的xml格式。此哈希码是使用一种过滤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

由于散列计算从输入流中读取,所以规范化的结果最终必须作为输入流呈现。您可以使用连接到PipedOutputStream的PipedInputStream或临时字节数组上的一对ByteArrayOutputStream/ByteArrayInputStream。

相反,如果两个部件在设计时考虑到管道内衬,你也可以使用一个org.xml.sax.XmlFilter从canonicalizer事件与哈希计算/语法检查的处理程序连接

+0

我一直在寻找的架构像这个:(http://javadoc.iaik.tugraz.at/xsect/1.022/apidocs/xsect/iaik/xml/filter/impl/dsig/package-summary.html)但由于许可原因,我回退到ByteArrayOut - > ByteArrayIn。另请参阅(http://ostermiller.org/convert_java_outputstream_inputstream.html),了解java中管道流的各种方式的简要说明。 – Bastl