استثناء تسلسلي غريب الأطوار عند الإفراط في الإفراط في الكائن المسلسل
-
28-09-2019 - |
سؤال
لدي فئة قابلة للتسلسل GWT ، دعنا نسميها foo. FOO تنفذ isserializable ، لديه أعضاء بدائية وقابلة للتسلسل وكذلك أعضاء عابرين آخرين ومُنشئين لم يسبق له مثيل.
class Foo implements IsSerializable {
// transient members
// primitive members
public Foo() {}
public void bar() {}
}
أيضا خدمة تستخدم مثيل FOO في RPC comunication.
// server code
public interface MyServiceImpl {
public void doStuff(Foo foo);
}
public interface MyServiceAsync {
void doStuff(Foo foo, AsyncCallback<Void> async);
}
كيف أستخدم هذا:
private MyServiceAsync myService = GWT.create(MyService.class);
Foo foo = new Foo();
...
AsyncCallback callback = new new AsyncCallback {...};
myService.doStuff(foo, callback);
في الحالة المذكورة أعلاه ، يتم تشغيل الكود ، ويتم تنفيذ طريقة OnSuccess () لمثيل رد الاتصال.
ولكن عندما أقوم بتجاوز طريقة الشريط () على مثيل FOO مثل هذا:
Foo foo = new Foo() {
public void bar() {
//do smthng different
}
};
AsyncCallback callback = new new AsyncCallback {...};
myService.doStuff(foo, callback);
أحصل على GWT SerializationException.
يرجى تنويرني ، لأنني حقًا لا أفهم السبب.
المحلول
أعتقد أن المشكلة تأتي من سياسة التسلسل RPC والتي تنشئ "قائمة بيضاء" من الأنواع القابلة للتسلسل لخدمة RPC.
في حالتك ، توجد فئة "Foo" في القائمة البيضاء ، ولكن عندما تقوم بتجاوز طريقة ما ، فإنك تنشئ فئة مجهولة تمتد FOO ولكنها ليست في القائمة البيضاء ، لذلك ترفض GWT تسلسلها ... ولا أرى أي طريقة للقيام بذلك ما تريده دون إنشاء فئة فرعية صريحة ...