我有一個Java服務器接受使用JSSE的SSL連接,並在流內使用簡單的XML消息格式。我希望服務器讀取完整的消息,然後發送回覆。事實證明,這很困難,因爲org.xml.sax.XMLReader想要讀取整個流,然後調用close()。我知道這看起來很奇怪,但是在Java 6中,Sun JSSE提供程序確實關閉了SSLSocket的兩端,因此沒有消息可以返回。我嘗試在客戶端使用Socket的shutdownOutput()方法,但這不受JSSE支持。JSSE連接上的XML流結束了嗎?
我的解決方案是傳遞一個封裝在自定義類中的InputStream,該類默默地忽略關閉請求,並指示該流在遇到第一個空行時被關閉。這限制了XML超出通常有效的範圍,但客戶端可以根據需要輕鬆地過濾輸入中的空行。有更好的解決方案嗎?