code: @Trivial
      private File getArchiveFile() {
          String methodName = "getArchiveFile";
  
          if ( archiveFileLock != null ) {
              synchronized ( archiveFileLock ) {
                  if ( (archiveFile == null) && !archiveFileFailed ) {
                      try {
                          archiveFile = extractEntry( entryInEnclosingContainer, getCacheDir() );
                          // 'extractEntry' throws IOException
  
                          if ( archiveFile != null ) {
                              archiveFilePath = archiveFile.getAbsolutePath();
                              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled() ) {
                                  Tr.debug(tc, methodName + " Archive file [ " + archiveFilePath + " ]");
                              }
                          } else {
                              archiveFileFailed = true;
                              Tr.error(tc, "extract.cache.null", entryInEnclosingContainer.getPath());
                          }
  
                      } catch ( IOException e ) {
                          archiveFileFailed = true;
                          Tr.error(tc, "extract.cache.fail", e.getMessage());
                      }
                  }
              }
          }
  
          return archiveFile;
      }
docs: Answer the archive file.  Extract it if necessary.  Answer null
  if extraction fails.
  
  If this container was created as a root-of-roots container, the archive
  will already be set.
  
  Otherwise, the container is a nested root container, and the archive may
  not have not yet been set.  In that case, extract the archive, then answer
  the extracted file as the archive file.
  
  Extraction may fail, in which case null will be returned.
  
  Extraction is only attempted once: Access to the archive file after a failure
  immediately answer null.
  
  @return The archive file.  Extracted if necessary.  Null if extraction failed.