Why RPCRequest and RPCResponse are abstract classs other than an interfaces, since there is no (partial) implementation here? My understanding is, in Java unless you want to add some implementation, interface is generally prefered to abstract class. 