Saving a pretty large xml file in JCR produces a NPE after upgrading to version 15

Hi everyone,

We have a need to save a pretty large xml file (used for our sitemap index) in JCR. It used to work properly when we were in Bloomreach 14.x. After upgrading to version 15, we notice that below code importTask.createOrUpdateBinaryFromContentNode produces an NPE, where importTask is new DefaultBinaryImportTask(documentManager);

    String[] binaryFolderFolderTypes = {"new-file-folder"};
    String[] binaryFolderGalleryTypes = {"hippogallery:exampleAssetSet"};

    String binaryFolderPath =
            importTask.createOrUpdateBinaryFolder(folderLocation, "hippogallery:stdAssetGallery", binaryFolderFolderTypes, binaryFolderGalleryTypes);

    String updatedBinaryLocation =
            importTask.createOrUpdateBinaryFromContentNode(contentNode, "hippogallery:exampleAssetSet",
                    binaryFolderPath, fileName);

binar
yFolderPath is /content/assets/assets/cavcodotcom/generated-sitemaps and fileName is sitemap-index.xml.

Here is the stacktrace

[INFO] [talledLocalContainer] org.onehippo.forge.content.exim.core.ContentMigrationException: java.lang.NullPointerException
[INFO] [talledLocalContainer] at org.onehippo.forge.content.exim.core.impl.DefaultBinaryImportTask.createOrUpdateBinaryFromContentNode(DefaultBinaryImportTask.java:137) ~[content-exim-core-4.0.1.jar:?]
[INFO] [talledLocalContainer] at com.cavco.cronjobs.RestfulRepositoryJob.persistBinaryImage(RestfulRepositoryJob.java:124) ~[classes/:?]
[INFO] [talledLocalContainer] at com.cavco.cronjobs.dynamicsitemap.BrandSiteSitemapJob.createSitemapIndexFile(BrandSiteSitemapJob.java:182) ~[classes/:?]
[INFO] [talledLocalContainer] at com.cavco.cronjobs.dynamicsitemap.BrandSiteSitemapJob.execute(BrandSiteSitemapJob.java:68) [classes/:?]
[INFO] [talledLocalContainer] at org.hippoecm.repository.quartz.RepositoryJobJob.execute(RepositoryJobJob.java:50) [hippo-repository-engine-15.7.1.jar:15.7.1]
[INFO] [talledLocalContainer] at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.3.2.jar:?]
[INFO] [talledLocalContainer] at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [quartz-2.3.2.jar:?]
[INFO] [talledLocalContainer] Caused by: java.lang.NullPointerException
[INFO] [talledLocalContainer] at org.apache.jackrabbit.util.ISO8601.getYear(ISO8601.java:395) ~[jackrabbit-jcr-commons-2.21.19-h4.jar:?]
[INFO] [talledLocalContainer] at org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl.createValue(ValueFactoryQImpl.java:142) ~[jackrabbit-spi-commons-2.21.19-h4.jar:?]
[INFO] [talledLocalContainer] at org.hippoecm.repository.impl.ValueFactoryDecorator.createValue(ValueFactoryDecorator.java:59) ~[hippo-repository-engine-15.7.1.jar:15.7.1]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.common.jcr.DefaultJcrContentValueConverter.toJcrValue(DefaultJcrContentValueConverter.java:242) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.common.jcr.DefaultJcrContentValueConverter.toJcrValue(DefaultJcrContentValueConverter.java:59) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.binder.jcr.DefaultJcrContentNodeBinder.createJcrValuesFromContentProperty(DefaultJcrContentNodeBinder.java:307) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.binder.jcr.DefaultJcrContentNodeBinder.bindProperties(DefaultJcrContentNodeBinder.java:192) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.binder.jcr.DefaultJcrContentNodeBinder.bind(DefaultJcrContentNodeBinder.java:148) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.binder.jcr.DefaultJcrContentNodeBinder.addSubNodes(DefaultJcrContentNodeBinder.java:256) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.binder.jcr.DefaultJcrContentNodeBinder.bind(DefaultJcrContentNodeBinder.java:152) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.pojo.binder.jcr.DefaultJcrContentNodeBinder.bind(DefaultJcrContentNodeBinder.java:48) ~[hippo-pojo-bind-jcr-1.3.1.jar:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.exim.core.impl.DefaultBinaryImportTask.updateBinaryHandleAndVariantNodeFromBinaryVariantContentNode(DefaultBinaryImportTask.java:171) ~[content-exim-core-4.0.1.ja
r:?]
[INFO] [talledLocalContainer] at org.onehippo.forge.content.exim.core.impl.DefaultBinaryImportTask.createOrUpdateBinaryFromContentNode(DefaultBinaryImportTask.java:127) ~[content-exim-core-4.0.1.jar:?]
[INFO] [talledLocalContainer] … 6 more

Any help is greatly appreciated.

Thanks,

Billy

It looks like you are using content-exim version 4.0.1. For CMS 15 you need to update to version 5.0.1

HJasper,

Thank you for pointing that out.

I just upgraded content-exim to 5.0.1, but I am still getting NPE. Anything else I can try?

Thanks,

Billy

[INFO] [talledLocalContainer] 10.03.2025 09:45:01 ERROR Hippo JCR Quartz Job Scheduler_Worker-1 [BrandSiteSitemapJob.execute:72] Error while building cavcodotcom Sitemap
[INFO] [talledLocalContainer] org.onehippo.forge.content.exim.core.ContentMigrationException: java.lang.NullPointerException
[INFO] [talledLocalContainer] at org.onehippo.forge.content.exim.core.impl.DefaultBinaryImportTask.createOrUpdateBinaryFromContentNode(DefaultBinaryImportTask.java:137) ~[content-exim-core-5.0.1.jar:?]
[INFO] [talledLocalContainer] at com.cavco.cronjobs.RestfulRepositoryJob.persistBinaryImage(RestfulRepositoryJob.java:124) ~[classes/:?]
[INFO] [talledLocalContainer] at com.cavco.cronjobs.dynamicsitemap.BrandSiteSitemapJob.createSitemapIndexFile(BrandSiteSitemapJob.java:182) ~[classes/:?]
[INFO] [talledLocalContainer] at com.cavco.cronjobs.dynamicsitemap.BrandSiteSitemapJob.execute(BrandSiteSitemapJob.java:68) [classes/:?]
[INFO] [talledLocalContainer] at org.hippoecm.repository.quartz.RepositoryJobJob.execute(RepositoryJobJob.java:50) [hippo-repository-engine-15.7.1.jar:15.7.1]
[INFO] [talledLocalContainer] at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [quartz-2.3.2.jar:?]

Its an NPE, so looking at the code there is a limited number of objects that could be NULL, unfortunately without any extra logging to be able to determine what. If you can attach a debugger it might become more clear. Failing that, check the values that are actually passed to the method. Check whether the nodes/folders actually exist.

Hi @billy.wu ,

Just following up on the comment above. Kindly let us know if you’ve had a chance to review it or if you need any further clarification. We’re happy to help if you have any questions or concerns.

Thank you!
Bloomreach Support