XStream在marshall和unmarshall throwable的object的时候,采取的机制与其他的不是太一样,我的app里面的exception都是以chain的形式连在一起,所以可以一直跟踪到最下面的rootcause,例如:
1 <t class="java.lang.Exception">
2 <cause class="java.lang.Exception" reference=".."/>
3 <stackTrace>
4 <trace>com.*.exception.TestXStreamExceptionHandle.main(TestXStreamExceptionHandle.java:22)</trace>
5 </stackTrace>
6 </t>
也就是其中的cause字段会一直重复到最root的exception,这样在如果在服务器端进行unmarshall,有一个要求就是cause所涉及到的所有exception类必须在classpath当中,而有时候并不需要这么多的信息,所以可以用transient关键字来标记throwable的不需要在客户端和服务器端进行marshall和unmarshall,而用其他字段来hold这个信息。
2 <cause class="java.lang.Exception" reference=".."/>
3 <stackTrace>
4 <trace>com.*.exception.TestXStreamExceptionHandle.main(TestXStreamExceptionHandle.java:22)</trace>
5 </stackTrace>
6 </t>