Сериализация родительского класса в RPC - PullRequest
0 голосов
/ 16 мая 2019

Я использую 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?

...