2014-01-26 49 views
1

我正在使用服務器序列化和android客戶端反序列化作爲通信協議。類註解導致ClassNotFound異常

使用的POJO被定義爲

@EntityTag(uri = "/t.do", layout_id = "teacher") 
public class Teacher extends UIEntity{ 
    private static final long serialVersionUID = (long)0x000010; 
    public Teacher() throws UIEntityFormatException {super();} 

    @ViewTag(view_id = "t_name") 
    private String name; 
    @ViewTag(view_id = "t_sur_name") 
    private String surName; 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

    public String getSurName() { 
    return surName; 
    } 

    public void setSurName(String surName) { 
    this.surName = surName; 
    } 
} 

的EntityTag和ViewTag是分別定義的。用於服務器寫入對象

代碼是

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     try { 
     final Teacher t = new Teacher(); 
     t.setName("jacob"); 
     t.setSurName("bush"); 
     final ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream()); 
     oos.writeObject(t); 
     oos.flush(); 
     } catch (UIEntityFormatException e) { 
     e.printStackTrace(); 
     } 
    } 

和代碼在客戶端用於接收該

 final ObjectInputStream objectInputStream = new ObjectInputStream(response.getEntity().getContent()); 
     ret = (Result) objectInputStream.readObject(); 
     objectInputStream.close(); 

使用AndroidHttpClient。並且在客戶端運行時拋出EntityTag.class的ClassNotFound。

教師,UIEntity和註釋放在一個稱爲協議的模塊中,客戶端服務器模塊依賴於此(我正在使用Intellij IDEA 13)我無法弄清楚是什麼導致了異常。

謝謝

回答

0

對不起,延遲迴復,尼克。

我弄清楚出了什麼問題。

Java序列化是在註釋之前創建十年的舊機制。我想這就是爲什麼默認序列化/反序列化不能正確處理問題。

當我使用byte []從服務器讀取並把它放到一個純文本文件中我可以看到註釋已被定義爲一個類。我想這就是爲什麼JVM試圖加載這個註解(因爲它在服務器和客戶端的居民都可以完全忽略),所以我試圖寫過Serialaizable類的readObject和writeObject方法。沒有更多的註釋類代表和解決問題。

這不是配置問題。但在處理新舊技術的結合時,我們應該小心。

無論如何感謝您的幫助