code: static XARecoveryWrapper deserialize(byte[] serializedWrapper)
      {
          if (tc.isEntryEnabled()) Tr.entry(tc, "deserialize");
  
          XARecoveryWrapper wrapper = null;
              
          try
          {
              final ByteArrayInputStream bis = new ByteArrayInputStream(serializedWrapper);
              final ObjectInputStream oin = new ObjectInputStream(bis);
              wrapper = (XARecoveryWrapper) oin.readObject();
              oin.close();
          }
          catch (ClassNotFoundException e)
          {
              FFDCFilter.processException(e, "com.ibm.ws.Transaction.JTA.XARecoveryWrapper.deserialize", "298");
              if (tc.isDebugEnabled()) Tr.debug(tc, "Unable to deserialize an object from byte stream", e);
              String notfound = e.getMessage ();
              final int index = notfound.indexOf (":");
              notfound = notfound.substring (index + 1);
              Tr.error(tc, "WTRN0002_UNABLE_TO_FIND_RESOURCE_CLASS", notfound);
          }
          catch (Throwable t)
          {
              FFDCFilter.processException(t, "com.ibm.ws.Transaction.JTA.XARecoveryWrapper.deserialize", "306");
              if (tc.isDebugEnabled()) Tr.debug(tc, "Unable to deserialize an object from byte stream", t);
              Tr.error(tc, "WTRN0040_OBJECT_DESERIALIZE_FAILED", t);
          }
  
          if (tc.isEntryEnabled()) Tr.exit(tc, "deserialize", wrapper);
          return wrapper;
      }
docs: which classloader is passed in and which is on the thread.