Method getDefaultCacheFile() returns an invalid file name if the user has no home directory set. In that case the name of the fop user directory (FOP_USER_DIR!) is returned and not the name of the cache file (DEFAULT_CACHE_FILENAME). Wrong Code: public static File getDefaultCacheFile(boolean forWriting) { File userHome = getUserHome(); if (userHome != null) { File fopUserDir = new File(userHome, FOP_USER_DIR); if (forWriting) { boolean writable = fopUserDir.canWrite(); if (!fopUserDir.exists()) { writable = fopUserDir.mkdir(); } if (!writable) { userHome = getTempDirectory(); fopUserDir = new File(userHome, FOP_USER_DIR); fopUserDir.mkdir(); } } return new File(fopUserDir, DEFAULT_CACHE_FILENAME); } return new File(FOP_USER_DIR); } If getUserHome() does not return a directory the default name must be returned (and not the name of the directory): return new File(DEFAULT_CACHE_FILENAME);