我有一个 Java 服务器,它接受使用 JSSE 的 SSL 连接,并在流中使用简单的 XML 消息格式。我希望服务器阅读完整的消息,然后发送回复。事实证明这非常困难,因为 org.xml.sax.XMLReader 想要读取整个流,然后调用 close()。我知道这看起来很奇怪,但是在带有 Sun JSSE 提供程序的 Java 6 中,这确实关闭了 SSLSocket 的两端,因此没有消息可以返回。我尝试在客户端使用 Socket 的 shutdownOutput() 方法,但 JSSE 不支持此方法。
我的解决方案是传递一个包装在自定义类中的 InputStream,该类静默忽略关闭请求,并指示流在遇到第一个空行时关闭。这将 XML 限制在通常有效的范围之外,但客户端可以在必要时轻松过滤掉输入中的空白行。有更好的解决方案吗?