public static byte[] serialize(String source, Throwable t) {
    GenericExceptionMessage.Builder gemBuilder = GenericExceptionMessage.newBuilder();
    gemBuilder.setClassName(t.getClass().getName());
    if (t.getMessage() != null) {
      gemBuilder.setMessage(t.getMessage());
    }
    // set the stack trace, if there is one
    List<StackTraceElementMessage> stack =
      ForeignException.toStackTraceElementMessages(t.getStackTrace());
    if (stack != null) {
      gemBuilder.addAllTrace(stack);
    }
    GenericExceptionMessage payload = gemBuilder.build();
    ForeignExceptionMessage.Builder exception = ForeignExceptionMessage.newBuilder();
    exception.setGenericException(payload).setSource(source);
    ForeignExceptionMessage eem = exception.build();
    return eem.toByteArray();
  }
Converts a ForeignException to an array of bytes.
@param source the name of the external exception source
@param t      the "local" external exception (local)
@return protobuf serialized version of ForeignException
hbase-server/src/main/java/org/apache/hadoop/hbase/errorhandling/ForeignException.java