public void readFields(DataInput in) throws IOException {
   byte version = in.readByte();
   switch (version) {
     case 1:
       majorCode = in.readByte();
       minorCode = in.readShort();
       args = WritableUtils.readCompressedStringArray(in);
       break;
     case 2:
       majorCode = in.readByte();
       minorCode = in.readShort();
       args = WritableUtils.readStringArray(in);
       break;
     default:
       throw new VersionMismatchException(VERSION, version);
   }
 }