2012-01-10 68 views
1

我需要在我的小應用程序中轉換JSON數據。我正在使用一個簽名的小程序。我已經簽署了gson-1.4.jar和java類文件,但無法轉換JSON數據。請告訴我樣品。如何使用applet轉換JSON數據?

代碼: -

import com.google.gson.Gson; 

import java.applet.*; 

    public class MyApplet extends Applet implements Runnable { 

     private Gson JSON; 

     public void init() { 
     JSON = new Gson(); 
     } 

     public void start() 
     { 
     String json = "{\"menu\": {\"id\": \"1\", \"value\": \"test\"} }"; 
     Gson gson = new Gson(); 
     System.out.println("start"); 
     MenuWrapper m = gson.fromJson(json, MenuWrapper.class); 
     System.out.println(m.getMenu().getId()); 
     System.out.println(m.getMenu().getValue()); 
     System.out.println("end"); 
     } 

     public void run(){ 
     } 
} 

class Menu { 

    String id; 
    String value; 

    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getValue() { 
     return value; 
    } 
    public void setValue(String value) { 
     this.value = value; 
    } 
    public String toString() { 
     return String.format("id: %s, value: %d", id, value); 
    } 
} 

class MenuWrapper { 

    Menu menu; 
    public Menu getMenu() { 
     return menu; 
    } 
    public void setMenu(Menu m) { 
     menu = m; 
    } 
} 

沒有發現錯誤,輸出來 「啓動」

請告訴我如何來解決這個問題。

+2

1)我看不到任何[Gson](http://code.google.com/p/google-gson/)小程序需要數字簽名的原因。你的applet爲什麼被簽名? 2)不要在帖子中包含「緊急」之類的內容。它不會得到更快的幫助,事實上更可能會讓你忽略。 3)*「沒有發現錯誤,輸出是」開始「」*我理解逗號前面的部分,但*輸出是「開始」*意味着什麼? DYM你在輸出中看到「開始」了嗎?還有別的嗎? 4)*「請......樣品。」* SO不是代碼生成工廠。 5)請按照預期檢查代碼示例格式的預覽。 – 2012-01-10 08:14:44

+0

也有類似的問題和答案在這裏 http://stackoverflow.com/questions/3850859/java-using-gson-in-an-applet-causes-securityexception – 2012-03-06 09:27:15

回答

0

我會拋開「簽名罐子」的事情。事實上,我會放下整個Applet的東西,專注於你JSON轉換的東西。因此,首先嚐試運行您的代碼,將JSON實際轉換爲MenuWrapper類。運行它,你會看到下列之一:

  • 的MenuWrapper創建預期,並且一切正常 在這種情況下,它應該是什麼毛病配置(你應該在Java控制檯或觀察異常這種情況下)
  • 轉換過程中拋出某種異常。 在這種情況下,請將其發佈到此處,它不會與Applets相關,而是與JSON和使用GSON有關的問題。

希望這有助於

+0

感謝您的答覆。我得到了以下錯誤。 \t \t java.security.AccessControlException:訪問被拒絕(java.lang.reflect.ReflectPermission suppressAccessChecks) \t在java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) \t在java.security.AccessController.checkPermission( AccessController.java:546) \t在java.lang.SecurityManager.checkPermission(SecurityManager.java:532) \t在java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:74) \t在com.google.gson .MappedObjectConstructor.getNoArgsConstructor(MappedObjectConstructor.java:85) – Grace 2012-01-10 11:16:21

+0

這看起來像你的json conve rter dooesn無法正常工作。可能你沒有默認構造函數或有效的getter/setter。它正是我談論的第二個案例。你應該修復GSON的東西,然後才能在applet中運行。 – 2012-01-10 11:57:35

+0

謝謝。但是,如果我運行該程序,而不使用小程序,它的工作正常使用相同的json jar文件。 – Grace 2012-01-10 12:57:05

0

這裏也有類似的問題:

Java: Using Gson in an Applet causes SecurityException

看來這個小程序必須進行簽名,以便在反序列化庫中的反射才能正常工作。

+0

...或者應創建一個策略文件以允許反射工作。 – 2012-03-06 09:29:16