我正在开发一个用于身份验证和路由的流式SOAP代理。代理必须从SOAP标头读取和验证凭据和路由信息。它还必须使用目标服务使用的其他元数据来丰富SOAP标头。
我首先使用StAX(XMLStreamReader和XMLStreamWriter)快速概述了概念。它似乎没有问题,所以概念被证明,但性能不是我所记录的。在分析原型时,我注意到应用程序在字符编码/解码上花费了大量的cpu时间(30-80%)
我认为解决方案很简单:
这将避免所有不必要的编码/解码。但令我惊讶的是,我发现标准实现不支持getLocation() - 它返回-1。
过时的部分 - 以下实际上并不起作用,因为XMLStreamReader在读取一个字节时会消耗大量的内存。 “我注意到我可以从InputStream获得偏移量,如果我写一个一次返回一个字节的InputStreamReader并跟踪读取的字节数。但这不是正确的解决方案 - 读取调用的荒谬数量很可能与额外的解码/编码相比,性能更高。“
如果编写自定义解析器是不可能的,我有什么选择?是否有标准兼容的XMLStreamReader实现,它已经过验证并支持getLocation()?