Я использую Java, и мы хотим сделать вызов RPC для другой службы.
Class BaseClass {
// some other fields with getter setter;
private String type;
}
Class Type1Class extends BaseClass {
// some fields with getter setter;
}
Class Type2Class extends BaseClass {
// some fields with getter setter;
}
// Some function inside the class.
public String doSomething(BaseClass obj) {
String result = "";
if(obj.getType().equals("Type1")){
Type1Class obj1 =(Type1Class) obj;
// do something here
} else {
Type2Class obj2 =(Type2Class) obj;
// do something here
}
return result;
}
Теперь из другой службы я вызываю эту функцию как RPC.
Type1Class obj = new Type1Class();
serviceClass.doSomething(obj);
Теперь в обычном классе Java (без вызова RPC) это будет работать.Но при вызове той же вещи, что и RPC, я получаю сообщение об ошибке: не удается привести объект BaseClass к объекту Type1Class.
Мне кажется, проблема в том, что когда объект Type1Class отправляется по сети, он сериализуется с использованием Джексона (присутствуют все поля класса).Теперь в другом сервисе, когда происходит десериализация, он создает объект BaseClass вместо Type1Class.Теперь, когда типом является «Type1», тогда, когда я пытаюсь привести объект Type1Class, он не работает, потому что исходный объект, созданный после десериализации, фактически имеет Baseclass, а не Type1Class (тип объекта не сохраняется при вызове RPC), тогда как в обычном вызове Java, оригинальный объект по-прежнему является объектом Type1Class (вызов по ссылке), и он работает.Как я могу решить это в вызове RPC?