Sometimes friday is not the best day to debug. I've been looking at my
code this morning and found the problem.
First this line:
contentNode.setProperty(NODE_PROP_TYPE_DATA, new
FileInputStream(file));
and a few lines later:
contentNode.setProperty(NODE_PROP_TYPE_DATA, "");
And wondering why it would keep empty. :D
Thanks,
Nick Stolwijk
Nick Stolwijk wrote:
We have a problem with Jackrabbit 1.3.1. All the directory and file
nodes get created, only my files stay empty. Can somebody help me with
this problem? My code:
public static final String NODE_PROP_TYPE_FOLDER = "nt:folder";
public static final String NODE_PROP_TYPE_FILE = "nt:file";
public static final String NODE_PROP_TYPE_DATA = "jcr:data";
public static final String NODE_PROP_MIME_TYPE = "jcr:mimeType";
public static final String NODE_PROP_TYPE_CONTENT = "jcr:content";
public static final String NODE_PROP_TYPE_RESOURCE = "nt:resource";
public static final String NODE_PROP_LAST_MODIFIED =
"jcr:lastModified";
public static final String NODE_PROP_CREATED = "jcr:created";
public static final String NODE_PROP_ENCODING = "jcr:encoding";
/**
* Method importFile imports the specified file to the location
specified by the node path into the JCR.
*
* @param file of type File the file to import into the JCR
* @param relativeSubNode of type String a nodePath relative to the
configured rootName which should not start or end with a "/"
* @param relativeNodePath of type String a nodePath relative to
the specified sub node which should not start or end with a "/"
* @throws JackrabbitMediaImportException when the specified file
is invalid or the specified path is invalid
*/
public void importFile(final String relativeSubNode, final String
relativeNodePath, final File file)
throws JackrabbitMediaImportException {
checkInitialized();
try {
if (null == file) {
throw new JackrabbitMediaImportException("Failed to
import file <null>.");
} else if (!file.exists()) {
throw new JackrabbitMediaImportException("Failed to
import "
+ file.getPath() + ", the file does not exist.");
}
log.debug("Import " + rootName + "/" + relativeSubNode +
"/" + relativeNodePath + "/" + file.getName());
Node root = getSession().getRootNode();
// Navigate to (optionally create on the fly) the location
specified by the node path
Node currentFolderNode = getOrCreateNodePath(root,
rootName + "/" + relativeSubNode + "/" +
getRelativeNodePathCasing(relativeNodePath));
log.debug("File will be imported as " +
currentFolderNode.getPath() + "/" + file.getName());
// Store the specified file into the specified node path
storeFile(currentFolderNode, file);
root.save();
root.getSession().save();
} catch (InvalidNodePathException e) {
throw new JackrabbitMediaImportException("Failed to import "
+ file.getPath() + " to " + relativeNodePath + " of
the JCR", e);
} catch (RepositoryException e) {
throw new JackrabbitMediaImportException("Failed to import
" + file.getPath() + " into JCR", e);
}
}
/**
* Method storeFile does the actual streaming of the file to the JCR.
*
* @param folder of type Node which will contain the actual file
* @param file of type File the file to store
* @throws JackrabbitMediaImportException when
*/
private void storeFile(final Node folder, final File file) throws
JackrabbitMediaImportException {
synchronized (mutex) {
try {
ValueFactory valueFactory =
folder.getSession().getValueFactory();
String filename =
getFilenamePlusExtensionCasing(file.getName());
Node fileNode = folder.addNode(filename,
NODE_PROP_TYPE_FILE);
Node contentNode =
fileNode.addNode(NODE_PROP_TYPE_CONTENT, NODE_PROP_TYPE_RESOURCE);
contentNode.setProperty(NODE_PROP_TYPE_DATA, new
FileInputStream(file));
MimetypesFileTypeMap mimetypesFileTypeMap = new
MimetypesFileTypeMap();
// It does not know PDF by default (...)
mimetypesFileTypeMap.addMimeTypes("application/pdf pdf
PDF");
contentNode.setProperty(NODE_PROP_MIME_TYPE,
mimetypesFileTypeMap.getContentType(file));
contentNode.setProperty(NODE_PROP_LAST_MODIFIED,
valueFactory.createValue(Calendar.getInstance()));
contentNode.setProperty(NODE_PROP_TYPE_DATA, "");
contentNode.setProperty(NODE_PROP_ENCODING, "");
// Save the newly added information
folder.save();
} catch (RepositoryException e) {
throw new JackrabbitMediaImportException("Unable to
read from / write to repository.", e);
} catch (FileNotFoundException e) {
throw new JackrabbitMediaImportException("Failed to
import " + file.getPath() + " into JCR", e);
}
}
}
With regards,
Nick Stolwijk