當系統間傳輸xstream生成的xml格式的報文時,如果對報文進行簽名認證,很可能認證失敗,原因就是xstream生成的xml報文各個元素之間有空格和換行符,而接收端如果用BUfferedReader接收報文,則會自動忽略換行符,導致簽名的報文和認證的報文不一致。爲解決這個問題,需要改變xstream生成xml的格式,即去掉換行符和空格。
去掉換行符可使用 replaceAll("\r","").replaceAll("\n","")
去掉空格 Writer writer = new StringWriter(); xstream.marshal(retMessage, new CompactWriter(writer));
既去空格又去換行符 OutputStream output = new ByteArrayOutputStream(); xstream.marshal(txnMsgContent, new CompactWriter(new OutputStreamWriter(output)));