Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Cannot Reproduce
-
2.2.5, 2.2.7
-
None
-
None
-
None
Description
I'm trying to update our software from Jackrabbit 2.2.4 to 2.2.7, I also tried version 2.2.5.
If I access the version history before calling VersionManager.checkin(), I get an NullPointerException. Bellow the stacktrace:
java.lang.NullPointerException
at org.apache.jackrabbit.core.ItemManager.getDefinition(ItemManager.java:206)
at org.apache.jackrabbit.core.ItemData.getDefinition(ItemData.java:99)
at org.apache.jackrabbit.core.ItemManager.canRead(ItemManager.java:409)
at org.apache.jackrabbit.core.ItemManager.createItemData(ItemManager.java:804)
at org.apache.jackrabbit.core.ItemManager.getItemData(ItemManager.java:379)
at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:316)
at org.apache.jackrabbit.core.ItemManager.getItem(ItemManager.java:610)
at org.apache.jackrabbit.core.SessionImpl.getNodeById(SessionImpl.java:493)
at org.apache.jackrabbit.core.VersionManagerImpl$1.perform(VersionManagerImpl.java:122)
at org.apache.jackrabbit.core.VersionManagerImpl$1.perform(VersionManagerImpl.java:114)
at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200)
at org.apache.jackrabbit.core.VersionManagerImpl.perform(VersionManagerImpl.java:95)
at org.apache.jackrabbit.core.VersionManagerImpl.checkin(VersionManagerImpl.java:114)
at org.apache.jackrabbit.core.VersionManagerImpl.checkin(VersionManagerImpl.java:100)
at com.softmodeler.repository.service.impl.RepositoryService.test(RepositoryService.java:294)
...
I created a code snippet (mixed together from a bunch of own service methods), the second execution of test() should reproduce the exception.
If the "if (!isNew)" block is replaced with versionLabel = "1.0"; , the code runs through.
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void test() {
try {
Session session = repository.login(CREDENTIALS, WORKSPACE);
Node root = session.getRootNode();
Node dataNode = null;
if (root.hasNode("test"))
else
{ dataNode = root.addNode("test", JcrConstants.NT_FOLDER); } Node fileNode = null;
String fileName = "test3.xml";
if (!dataNode.hasNode(fileName))
else
{ fileNode = dataNode.getNode(fileName); }String versionLabel = null;
boolean isNew = fileNode.isNew();
if (!isNew) {
VersionManager versionManager = session.getWorkspace().getVersionManager();
String[] versionLabels = versionManager.getVersionHistory(fileNode.getPath()).getVersionLabels();
if (versionLabels.length > 0)
}
VersionManager versionManager = session.getWorkspace().getVersionManager();
if (isNew)
{ fileNode.addMixin(JcrConstants.MIX_VERSIONABLE); }session.save();
logger.debug("checkout production node", fileNode.getPath()); //$NON-NLS-1$
versionManager.checkout(fileNode.getPath());
session.save();
Version currentVersion = versionManager.checkin(fileNode.getPath());
if (versionLabel == null)
{ versionLabel = "0.1"; //$NON-NLS-1$ }versionManager.getVersionHistory(fileNode.getPath()).addVersionLabel(currentVersion.getName(), versionLabel, true);
session.logout();
} catch (Exception e)
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
protected Node createOrUpdateFileNode(Node parent, InputStream stream, String name) throws Exception {
Node fileNode = null;
Node resNode = null;
if (!parent.hasNode(name))
else
{ fileNode = parent.getNode(name); resNode = fileNode.getNode(JcrConstants.JCR_CONTENT); } String type = mimetypesFileTypeMap.getContentType(name);
resNode.setProperty(JcrConstants.JCR_MIMETYPE, type != null ? type : ""); //$NON-NLS-1$
resNode.setProperty(JcrConstants.JCR_LASTMODIFIED, Calendar.getInstance());
Binary binary = new BinaryImpl(stream);
resNode.setProperty(JcrConstants.JCR_DATA, binary);
binary.dispose();
stream.close();
return fileNode;
}