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