استثناء تسلسلي غريب الأطوار عند الإفراط في الإفراط في الكائن المسلسل

StackOverflow https://stackoverflow.com/questions/2667687

  •  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 تسلسلها ... ولا أرى أي طريقة للقيام بذلك ما تريده دون إنشاء فئة فرعية صريحة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top