Class RpcUtil


  • public final class RpcUtil
    extends java.lang.Object
    Grab-bag of utility functions useful when dealing with RPCs.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  RpcUtil.AlreadyCalledException
      Exception thrown when a one-time callback is called more than once.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private RpcUtil()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      private static <Type extends Message>
      Type
      copyAsType​(Type typeDefaultInstance, Message source)
      Creates a new message of type "Type" which is a copy of "source".
      static <Type extends Message>
      RpcCallback<Message>
      generalizeCallback​(RpcCallback<Type> originalCallback, java.lang.Class<Type> originalClass, Type defaultInstance)
      Take an RpcCallback accepting a specific message type and convert it to an RpcCallback<Message>.
      static <ParameterType>
      RpcCallback<ParameterType>
      newOneTimeCallback​(RpcCallback<ParameterType> originalCallback)
      Creates a callback which can only be called once.
      static <Type extends Message>
      RpcCallback<Type>
      specializeCallback​(RpcCallback<Message> originalCallback)
      Take an RpcCallback<Message> and convert it to an RpcCallback accepting a specific message type.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RpcUtil

        private RpcUtil()
    • Method Detail

      • specializeCallback

        public static <Type extends MessageRpcCallback<Type> specializeCallback​(RpcCallback<Message> originalCallback)
        Take an RpcCallback<Message> and convert it to an RpcCallback accepting a specific message type. This is always type-safe (parameter type contravariance).
      • generalizeCallback

        public static <Type extends MessageRpcCallback<Message> generalizeCallback​(RpcCallback<Type> originalCallback,
                                                                                     java.lang.Class<Type> originalClass,
                                                                                     Type defaultInstance)
        Take an RpcCallback accepting a specific message type and convert it to an RpcCallback<Message>. The generalized callback will accept any message object which has the same descriptor, and will convert it to the correct class before calling the original callback. However, if the generalized callback is given a message with a different descriptor, an exception will be thrown.
      • copyAsType

        private static <Type extends Message> Type copyAsType​(Type typeDefaultInstance,
                                                              Message source)
        Creates a new message of type "Type" which is a copy of "source". "source" must have the same descriptor but may be a different class (e.g. DynamicMessage).
      • newOneTimeCallback

        public static <ParameterType> RpcCallback<ParameterType> newOneTimeCallback​(RpcCallback<ParameterType> originalCallback)
        Creates a callback which can only be called once. This may be useful for security, when passing a callback to untrusted code: most callbacks do not expect to be called more than once, so doing so may expose bugs if it is not prevented.