docs: public PartnerLogData container(FailureScopeController failureScopeController)
      {
          if (tc.isEntryEnabled()) Tr.entry(tc, "container", failureScopeController);
  
          final PartnerLogData pld = new XARecoveryData(failureScopeController, this);
          
          //
          // Now try to serialize the wrapper
          //
          byte[] serializedLogData = serialize();
  
          final String[] classpathArray = _xaResFactoryClasspath;
  
          if (serializedLogData == null)
          {
              // Output a message now, we will reject future enlists later
              Tr.warning(tc, "WTRN0039_SERIALIZE_FAILED");
              // Create an exceptin to log but dont throw it
              final Exception e = new NotSerializableException("XAResource recovery information failed serialization");
              Tr.audit(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE", new Object[]{_xaResInfo, e});
          }
          else
          {
              // Deserialize the wrapper and check it equals the original wrapper
              // if it does not, then raise an error as we have a problem with the implementation
              // of the resource manager XAResourceInfo - this can cause us problems and
              // multiple partner log entries both on distributed and 390.
              try
              {
                  final XARecoveryWrapper wrapper2 = deserialize(serializedLogData);
                  if (wrapper2 != null)
                  {
                      wrapper2.setXAResourceFactoryClasspath(classpathArray);
                      wrapper2.setPriority(_xaPriority);
                  }
  
                  if (!isSameAs(wrapper2))
                  {
                      Tr.error(tc, "WTRN0040_OBJECT_DESERIALIZE_FAILED", null);
                      Tr.audit(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE", new Object[]{_xaResInfo, null});
                      serializedLogData = null;
  
                      if (tc.isDebugEnabled()) Tr.debug(tc, "XAResourceInfo fails equality test");
                  }
              }
              catch (Exception e)
              {
                  FFDCFilter.processException(e, "com.ibm.ws.Transaction.JTA.XARecoveryWrapper.container", "193");
                  Tr.error(tc, "WTRN0040_OBJECT_DESERIALIZE_FAILED", e);
                  Tr.audit(tc, "WTRN0045_CANNOT_RECOVER_RESOURCE", new Object[]{_xaResInfo, e});
                  if (tc.isDebugEnabled()) Tr.debug(tc, "XAResourceInfo fails deserialization test", e);
                  serializedLogData = null;
              }
          }
  
          if (serializedLogData != null)
          {
              // With the wrapper successfully serialized we must now prepend the
              // xaResInfoClasspath data (if any) delimiting it with byte 0.
  
              byte[] combinedData = null;
  
              if (classpathArray != null)
              {
                  if (tc.isEventEnabled()) Tr.event(tc, "XAResourceInfo classpath data found. Adding to log data");
  
                  final StringBuffer classpathString = new StringBuffer();
  
                  if (tc.isDebugEnabled()) Tr.event(tc, "Creating String from array elements.");
  
                  for (int i = 0; i < classpathArray.length; i++)
                  {
                      if (tc.isDebugEnabled()) Tr.debug(tc, "Element [" + i + "] = " + classpathArray[i]);
  
                      classpathString.append(classpathArray[i]);
                      classpathString.append(File.pathSeparator);
                  }
  
                  if (tc.isDebugEnabled()) Tr.debug(tc, "ResourceInfo classpath", classpathString.toString());
  
                  final byte[] classpathData = classpathString.toString().getBytes();
                  combinedData = new byte[classpathData.length + 1 + serializedLogData.length];
  
                  System.arraycopy(classpathData, 0, combinedData, 0, classpathData.length);
                      
                  // Delimit the classpath data
                  combinedData[classpathData.length] = 0;
  
                  System.arraycopy(serializedLogData, 0, combinedData, classpathData.length + 1, serializedLogData.length);
              }
              else
              {
                  combinedData = new byte[1 + serializedLogData.length];
                  combinedData[0] = 0;
                      
                  System.arraycopy(serializedLogData, 0, combinedData, 1, serializedLogData.length);
              }
  
              pld.setSerializedLogData(combinedData);
          }
          
          if (tc.isEntryEnabled()) Tr.exit(tc, "container", pld);
          return pld;
      }