2012-07-30 66 views
2

我有一個客戶端(JVM1)以RESTful方式與服務器(JVM2)通信。我正在使用JSON作爲有效載荷機制。如何反序列化從客戶端收到的客戶端異常

當服務器拋出異常時,我可以將其序列化爲JSON格式並通過網絡發送。在客戶端,我收到響應並以JSON格式查看內容。

問題是我無法確定正在拋出的Exception的具體類型。

給定JSON格式的某種異常的序列化版本(它可能是NullPointerException,IllegalStateException,甚至檢查異常)如何在客戶端構造相同類型的對象。

我可以添加任何包裝類,並在需要時在客戶端和服務器之間共享它。

在此先感謝。

回答

3

一般來說,反序列化客戶端的任意異常是一個壞主意。例如,服務器可能會拋出一個SQLException的子類,這個子類碰巧特定於正在使用的jdkc驅動程序impl。客戶端最有可能的而不是在其類路徑中有jdbc驅動程序,所以任何反序列化異常的嘗試都會導致某種瘋狂的類加載異常。最好的辦法是將異常轉換爲像「ServerException」這樣的通用類,並將相關詳細信息作爲此類的字符串成員(例如原始異常名稱,消息,堆棧跟蹤等)。

+0

謝謝你的回答。完全同意你的看法。但是,我正在討論在兩個JVM中都可用的異常。這個例子就是JDK的例外。我仍然想知道我所問的技術上是否可行。 – Chris 2012-07-31 03:44:14

+0

@Chris - 那麼,您用來將java對象轉換爲JSON的框架無法處理逆向過程? – jtahlborn 2012-07-31 12:59:17

+0

不是。它無法做到。我正在使用jackson 1.9.8 ObjectMapper mapper = new ObjectMapper(); mapper.readValue(inputStream,MyException.class); – Chris 2012-07-31 13:49:46