Code used for storing report: private void createContentNode(URI uri, Map contentMap, Session session) throws RepositoryException { String path = uri2xpath(uri); Node root = session.getRootNode(); LOGGER.info("storeContent: adding content for path="+path); String[] nodes = path.split("/"); //test each node for creation Node base = root; for (String node : nodes) { if (!base.hasNode(node)) { // the node does not exist create it. LOGGER.debug("storeContent: adding node="+node); base.addNode(node); } base = base.getNode(node); } //The new node is the latest added node Node newNode = base; //here we declare all needed mixin newNode.addMixin(NodeType.MIX_CREATED); newNode.addMixin(NodeType.MIX_LAST_MODIFIED); LOGGER.debug("storeContent: defining mixin for the new node: "+NodeType.MIX_CREATED+" "+NodeType.MIX_LAST_MODIFIED); if (contentMap != null) { for (Map.Entry entry : contentMap.entrySet()) { Value[] v = parseValue(session, entry.getValue()); LOGGER.debug("storeContent: adding value to the new node value="+v); newNode.setProperty(entry.getKey(), v); } } } ============================ LOGS: 2017-09-22 08:56:26,003 | INFO | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.ContentRepositoryService | storeReport: storing report reportUri=aaa:report/G3604320170922732872 2017-09-22 08:56:26,003 | DEBUG | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.JCRContentRepositoryService | getReadWriteSession: a write session is open on the repository 2017-09-22 08:56:26,003 | DEBUG | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.JCRContentRepositoryService | startupRepository: Repository is already initialized. It will not be initialiized and configured again 2017-09-22 08:56:26,004 | INFO | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.JCRContentRepositoryService | Logged in as defaultWIMFileBasedRealm/G36043 to a Jackrabbit repository. 2017-09-22 08:56:26,004 | INFO | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.JCRContentRepositoryService | storeContent: adding content for path=aaa/report/G3604320170922732872 2017-09-22 08:56:26,022 | DEBUG | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.JCRContentRepositoryService | storeContent: adding node=G3604320170922732872 2017-09-22 08:56:26,039 | DEBUG | defaultWIMFileBasedRealm/advisor(defaultWIMFileBasedRealm/G36043) | | | WorkManager.JobLauncherWorkManager : 8 | c.o.r.s.JCRContentRepositoryService | storeContent: defining mixin for the new node: {http://www.jcp.org/jcr/mix/1.0}created {http://www.jcp.org/jcr/mix/1.0}lastModified ========================= ERROR: 2017-09-22 08:58:10,035 | ERROR | defaultWIMFileBasedRealm/advisor | | | WebContainer : 7 | c.o.r.s.ContentRepositoryService | retrieveReport: Exception from the uderlying repository javax.jcr.PathNotFoundException: aaa/report/G3604320170922732872 at org.apache.jackrabbit.core.NodeImpl$8.perform(NodeImpl.java:2167) ~[jackrabbit-core.jar:2.8.0] at org.apache.jackrabbit.core.NodeImpl$8.perform(NodeImpl.java:2161) ~[jackrabbit-core.jar:2.8.0] at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216) ~[jackrabbit-core.jar:2.8.0] at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91) ~[jackrabbit-core.jar:2.8.0] at org.apache.jackrabbit.core.NodeImpl.getNode(NodeImpl.java:2161) ~[jackrabbit-core.jar:2.8.0] at com.odcgroup.repository.service.ContentRepositoryService.retrieveReportAsStream(ContentRepositoryService.java:109) ~[repository-impl.jar:TAP/8.1.06] ============================ Retrieval Code: @Override public InputStream retrieveReportAsStream(Session readOnlySession, URI reportUri) throws RepositoryException { try { String path = getJcrContentRepository().uri2xpath(reportUri); Node root = readOnlySession.getRootNode(); Node reportNode = root.getNode(path); Node fileNode = reportNode.getNode(JCRContentRepository.FILE_NODE); Node contentNode = fileNode.getNode(Node.JCR_CONTENT); Property p = contentNode.getProperty(Property.JCR_DATA); if (p.getType() == PropertyType.BINARY) { Binary report = p.getBinary(); LOGGER.debug("retrieveReport: PDF size = "+report.getSize()); return report.getStream(); } else { LOGGER.error("retrieveReport: report not found for URI="+reportUri+" at node="+path); throw new ContentNotFoundException(this, "retrieveReport", reportUri); } } catch (javax.jcr.RepositoryException e) { LOGGER.error("retrieveReport: Exception from the uderlying repository", e); throw new RepositoryPersistenceException(this, "retrieveReport", e, new Object[]{reportUri}); } }