code: private final static String getClassName(byte[] buffer, int offset, int length) {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "getClassName", new Object[]{offset, length});
  
      // If the classname has a length of 0 then we've been given rubbish so pack it in now
      if (length == 0) {
        throw new IllegalArgumentException("Invalid buffer: classname length = 0");
      }
  
      // The classname should be in UTF8, if that fails FFDC and default in the hope of carrying on.
      String className;
      try {
        className = new String(buffer, offset, length, "UTF8"); // the class name itself
      }
      catch (UnsupportedEncodingException e) {
        FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.JsMessageFactoryImpl.getClassName", "644");
        className = new String(buffer, offset, length);
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "getClassName", className);
      return className;
    }
docs: Extract the class name from the buffer containing the (first part of) a restored value.
  
  @param buffer    The buffer
  @param offset    The offset of the classname's encoded bytes in the buffer
  @param length    The length of the classname's encoded bytes
  
  @return String The class name of the message to restore
  
  @exception This method will throw runtime exceptions if the length is 0, the
  buffer isn't long enough, etc etc etc.
  The caller will catch and FFDC it, as the data to be FFDC depends
  on the caller.