code: public static Extension deserialize(byte[] extensionBytes) throws ServiceLocationException
      {
          int extensionId = readInt(extensionBytes, 0, ID_BYTES_LENGTH);
          Extension extension = createExtension(extensionId);
          if (extension != null)
          {
              byte[] bodyBytes = new byte[extensionBytes.length - ID_BYTES_LENGTH - NEXT_EXTENSION_OFFSET_BYTES_LENGTH];
              System.arraycopy(extensionBytes, ID_BYTES_LENGTH + NEXT_EXTENSION_OFFSET_BYTES_LENGTH, bodyBytes, 0, bodyBytes.length);
              extension.deserializeBody(bodyBytes);
          }
          return extension;
      }
docs: Returns an Extension subclass object obtained deserializing the given bytes, or null
  if the bytes contain an extension that is not understood.
  
  @param extensionBytes The bytes to deserialize
  @throws ServiceLocationException If the deserialization fails