java - जीडब्ल्यूटी आवेदन के भीतर से आरपीसी प्रदर्शन करते समय SerializationPolicy त्रुटि




gwt rpc (7)

अपने युद्ध / ऐप निर्देशिका में * .gwt.rpc फ़ाइलों को हटाने, साफ और पुनर्निर्माण करने का प्रयास करें।

ध्यान देने योग्य एक बात: यदि संभव हो तो आपको लंबे या लंबे समय से बचना चाहिए क्योंकि वे हैं
जीडब्ल्यूटी पर नकल (क्योंकि कोई देशी जावास्क्रिप्ट लंबा नहीं है) और बहुत कुछ
धीमी गति से। जहां भी आप कर सकते हैं इसके बजाय int का उपयोग करें।

मुझे निम्नलिखित अपवाद मिल रहा है:

com.google.gwt.user.client.rpc.SerializationException: टाइप करें 'java.lang.Long' प्रकारों के सेट में शामिल नहीं किया गया था जिसे इस सीरियलाइजेशन पॉलिसी द्वारा क्रमबद्ध किया जा सकता है या इसकी क्लास ऑब्जेक्ट लोड नहीं की जा सकी। सुरक्षा उद्देश्यों के लिए, इस प्रकार को क्रमबद्ध नहीं किया जाएगा

जीडब्ल्यूटी 2.1 और जेटी सर्वर में निर्मित का उपयोग करना। दस्तावेज़ों के मुताबिक, यह प्रकार निश्चित रूप से क्रमबद्ध है ... मैं इसे SerializationPolicy में कैसे शामिल कर सकता हूं?


आवश्यकता में आरपीसी सेवा में एक अनिवार्य विधि शामिल है जो कई वस्तुओं को "श्वेतसूची" देती है। यह जेनेरिक के उपयोग के कारण उत्पन्न होता है, जीडब्ल्यूटी यह निर्धारित करने में असमर्थ है कि मैं किस सामान्य वस्तु को कुछ सामान्य के भीतर शामिल करने के लिए क्रमबद्ध कर सकता हूं।

मैंने उन सभी प्रकारों को शामिल किया जिन्हें (ऑब्जेक्ट) ऑब्जेक्ट के सदस्यों ( SerializableWhitelist ) के रूप में क्रमबद्ध करने की आवश्यकता हो सकती है। मैंने आरपीसी सर्वलेट ऑब्जेक्ट को एक विधि जोड़ा जैसे:

public SerializableWhitelist junk(SerializableWhitelist l) { return null; }

यह ध्यान देने योग्य है कि आपको श्वेतसूची डेटाटाइप को एक तर्क और वापसी प्रकार के रूप में शामिल करने की आवश्यकता है, क्योंकि जीडब्ल्यूटी स्पष्ट रूप से दो अलग क्रमिकरण नीतियों को बनाए रखता है।


एफडब्ल्यूआईडब्ल्यू, मुझे यह समस्या हो रही थी लेकिन मेरे 'ऑब्जेक्ट' प्रकार को जेनरेटेड क्लास के पीछे छुपाया गया था। त्रुटि संदेश स्वयं गलत था।

तो यदि आपकी आरपीसी विधियों में से एक वर्ग में शामिल है:

class Xxx<T> implements IsSerializable {...

इसे बदलने की जरूरत है:

class Xxx<T extends IsSerializable> implements IsSerializable {...


यहां लिंक है जो समस्या को हल करना चाहिए: http://developerlife.com/tutorials/?p=131

एक उपयोगकर्ता परिभाषित वर्ग serializable है अगर:

  1. कक्षा IsSerializable या java.io.Serializable को असाइन करने योग्य है, या तो क्योंकि यह इन इंटरफेस में से एक को लागू करता है, या क्योंकि यह एक सुपरक्लास से लिया गया है जो इन इंटरफेस में से एक को लागू करता है।
  2. सभी वर्ग के गैर-अंतिम, गैर-क्षणिक उदाहरण फ़ील्ड क्रमिक हैं
  3. कक्षा में एक सार्वजनिक डिफ़ॉल्ट (शून्य तर्क) कन्स्ट्रक्टर है

समस्या भी हो सकती है क्योंकि आपके स्थानीय मशीन पर जिस कोड पर आप होस्टेड मोड चला रहे हैं वह बाहरी सर्वर पर एक जैसा नहीं है जिसे आप RPC के माध्यम से कनेक्ट कर रहे हैं। तो मेरे मामले में मैं बाहरी सर्वर पर तैनात किए गए मिलान से मेल खाने के लिए अपनी स्थानीय मशीन पर एक गिट खींच रहा था। परिवर्तन gwt.rpc में शामिल कक्षाओं में से एक में केवल एक नई संपत्ति थी, लेकिन यह पहले से ही पर्याप्त था कि gwt.rpc md5 फ़ाइल नाम अलग थे और इस प्रकार उपर्युक्त त्रुटि हुई।


http://groups.google.com/group/google-web-toolkit/browse_thread/thread/7dd5123d359ddfa8 से प्रेरित

ग्रहण और maven और gwt 2.1.1 का उपयोग करना

जीटीटी युद्ध संकलित और तैनात करें।

ग्रहण से लॉन्च ओओपीएचएम का उपयोग करने का प्रयास करें।

यह मेरे लिए असफल होगा।

यह सर्वर लॉग में उत्पन्न होगा:

त्रुटि: क्रमबद्धता नीति फ़ाइल 'blah.gwt.rpc' नहीं मिली थी; क्या आप इसे इस तैनाती में शामिल करना भूल गए?

चेतावनी: मॉड्यूल के लिए serializationPolicy '94DEC228B2828D3A5897FEE3D6845A40' प्राप्त करने में विफल http: // blah: 8080 / BlahUI / BlahUI / '; एक विरासत, 1.3.3 संगत, क्रमबद्धता नीति का उपयोग किया जाएगा। परिणामस्वरूप आप SerializationExceptions का अनुभव कर सकते हैं।

और तब

आने वाले आरपीसी कॉल को भेजते समय अपवाद com.google.gwt.user.client.rpc.SerializationException: '[LpathToClass;' टाइप करें 'com.google.gwt.user.client.rpc.IsSerializable' के लिए असाइन करने योग्य नहीं था और उसके पास कस्टम फ़ील्ड serializer नहीं था। सुरक्षा उद्देश्यों के लिए, इस प्रकार को क्रमबद्ध नहीं किया जाएगा .: instance = [LpathToClass; @ 9d524af com पर। google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize (ServerSerializationStreamWriter.java:614)

अब अतिरिक्त gwt.rpc फ़ाइलों को उत्पन्न किया गया है (या तो eclipse / maven प्लगइन जो जानता है?)

Recompile (यहां तक ​​कि एक साफ संकलन काम करेगा क्योंकि gwt.rpc फ़ाइलें लक्ष्य फ़ोल्डर में नहीं हैं, मेरी OOPHM gwt.rpc फ़ाइलें एंट्रीपॉइंट एचटीएमएल के समान फ़ोल्डर में हैं) और पुन: नियोजित करें। इस नई युद्ध फ़ाइल में उत्पन्न gwt.rpc फ़ाइलें शामिल होंगी।

ग्रहण से ओओपीएचएम पुनः लॉन्च करें।

मेरे लिये कार्य करता है।