2012-12-19 15 views
7

आरपीसी और जावा जेनिक्स का उपयोग करते हुए ऑब्जेक्ट्स की सूची भेजते समय हमारे पास सीरियलाइजेशन अपवाद त्रुटि हो रही है।जीडब्ल्यूटी और जेनेरिक

मैं इस विजेट बना रहा हूं त्रुटि को दिखाने के लिए:

public class Test<T> { 

    ListDataProvider<T> ldp = new ListDataProvider<T>(); 

    public void setItems(List<T> list){ 
     for(T t :list){ 
      ldp.getList().add(t); 
     } 
    } 

    public List<T> getItems(){ 
     return ldp.getList(); 

    } 

} 

इस टेस्ट विजेट बनाने और POJOs (जहां ExporterFormKey POJO वस्तु है)

List<ExporterFormKey> list = new ArrayList<ExporterFormKey>(); 
ExporterFormKey key = new ExporterFormKey(); 
key.setKey("key1"); 
list.add(key); 

Test<ExporterFormKey> test = new Test<ExporterFormKey>(); 
test.setItems(list); 
की एक सूची पारित करने के लिए कोड है

service.sendList(test.getList(), new AsyncCallback...); 

जबकि अगले:

अंत अगले कोड पर एक SerializationException फेंकता एक ठीक करता है:

service.sendList(list, new AsyncCallback...); 

----- संपादित ----

मैंने पाया अगले कोड कर भी काम करता है कि

List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(); 
newList.add(test.getItems().get(0)); 
service.sendList(newList , new AsyncCallback...); 

या यह भी काम करता है

List<ExporterFormKey> newList = new ArrayList<ExporterFormKey>(test.getItems()); 

मुझे टेस्ट कार्यों पर यह परिवर्तन भी मिला!

public List<T> getItems(){ 
    return new ArrayList<T>(ldp.getList()); 
} 
+0

आपको test.getList() को सूची टाइप करने के लिए या <टी एक्सपोर्टरफॉर्मकी> के साथ टेस्ट घोषित करने के लिए टेस्ट करना पड़ सकता है। – SSR

+1

शायद आपकी ListDataProvider () एक ArrayList को वापस नहीं कर रहा है लेकिन सूची का एक अन्य कार्यान्वयन (उदाहरण के लिए एक संग्रह .unmodifiableList() सूची या एक सार सूची प्राप्त प्रकार। क्या आप पूर्ण SerializationException और सर्वर लॉग पोस्ट कर सकते हैं? यह कहना चाहिए क्यों क्रमबद्धता विफल हो रही है और जो आपत्तिजनक वर्ग है। – izaera

उत्तर

1

http://blog.rubiconred.com/2011/04/gwt-serializationexception-on-rpc-call.html

izaera ListDataProvider सुझाव दिया एक गैर serializable सूची कार्यान्वयन (ListWrapper) जो सीधे तार भर में नहीं भेजा जा सकता का उपयोग करता है।

ListDataProvider की getList() विधि से एक नई ArrayList में प्रतिक्रिया को लपेटने जैसा आपने अपनी पोस्ट में सुझाव दिया है, इस मुद्दे को हल करने का सबसे आसान तरीका है।

+0

यदि कोई उत्तर के लिए यहां जा रहा है, तो ऊपर दिया गया लिंक अब मर चुका है और 404 लौटाता है। पृष्ठ को कैश नहीं किया जाता है। – JRSofty

संबंधित मुद्दे