Is there a Workaround in DM/DAM 5.5 to read EXIF/IPTC metadata on TIF files?

When I import JPG files with EXIF information it is read properly and reflected in the picture metadata in Nuxeo. However, when I try the same with TIF images I get an error (see dump below). I did notice that between 5.4.2 and 5.5 the following have been dropped … JAI-Adapter-0.9.5.jar, mlib_jai-1.1.2_01.jar, and possibly others(?). Even if I fix the PlanarImage error by adding required jars I still get the same error in ReadOp.createImageReader. I have, however, confirmed that the stream is readable (at least using FileUtils) by overriding the PictureChangedListener and reading the stream into a Byte array.

I haven't found the 0.9.5 source (although newer sources are available on bitbucket).

Is there any known workaround for this? Are their libraries missing in the 5.5 stream?

Thanks, Bruce.

2012-03-02 11:11:15,496 WARN  [it.tidalwave.image.java2d.ImplementationFactoryJ2D] JAI not available: java.lang.ClassNotFoundException:
2012-03-02 11:11:15,509 INFO  [it.tidalwave.image.op.ReadOp] readMetadata(, 0)
2012-03-02 11:11:16,128 ERROR [org.nuxeo.ecm.platform.picture.core.mistral.MistralMetadataUtils] Failed to get EXIF metadata Cannot read from the inputstream
    at it.tidalwave.image.op.ReadOp.createImageReader(
    at it.tidalwave.image.op.ReadOp.access$000(
    at it.tidalwave.image.op.ReadOp$
    at it.tidalwave.image.op.ReadOp$
    at it.tidalwave.image.op.ReadOp$Type$
    at it.tidalwave.image.op.ReadOp.execute(
    at it.tidalwave.image.EditableImage.create(
    at org.nuxeo.ecm.platform.picture.core.mistral.MistralMetadataUtils.getImageMetadata(
    at org.nuxeo.ecm.platform.picture.ImagingComponent.getImageMetadata(
    at org.nuxeo.ecm.platform.picture.api.adapters.AbstractPictureAdapter.setMetadata(
    at org.nuxeo.ecm.platform.picture.api.adapters.DefaultPictureAdapter.createPicture(
    at org.nuxeo.ecm.platform.picture.api.adapters.PictureBlobHolder.setBlob(
    at org.nuxeo.ecm.platform.picture.listener.PictureChangedListener.handleEvent(
    at org.nuxeo.ecm.core.event.impl.EventServiceImpl.fireEvent(
    at org.nuxeo.ecm.core.api.AbstractSession.fireEvent(
    at org.nuxeo.ecm.core.api.AbstractSession.notifyEvent(
    at org.nuxeo.ecm.core.api.AbstractSession.createDocument(
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(
    at java.lang.reflect.Method.invoke(
    at org.nuxeo.ecm.core.api.TransactionalCoreSessionWrapper.invoke(
    at $Proxy24.createDocument(Unknown Source)
    at org.nuxeo.ecm.platform.picture.extension.ImagePlugin.create(
    at org.nuxeo.ecm.platform.filemanager.service.FileManagerService.createDocumentFromBlob(
    at org.nuxeo.ecm.platform.importer.factories.FileManagerDocumentModelFactory.createLeafNode(
    at org.nuxeo.ecm.platform.importer.base.GenericThreadedImportTask.doCreateLeafNode(
    at org.nuxeo.ecm.platform.importer.base.GenericThreadedImportTask.recursiveCreateDocumentFromNode(
    at org.nuxeo.ecm.platform.importer.base.GenericThreadedImportTask.recursiveCreateDocumentFromNode(
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
    at java.util.concurrent.ThreadPoolExecutor$
1 votes

1 answers



According to, does using the new version of metadata-extractor resolve your issue? If yes, I'll try to have a look to update the version.

Using the newer version of the metadata-extractor (2.5.0-RC3) does solve this problem and opens up a much broader set of metadata for extraction. I started down the path of writing a wrapper for 2.5.0-RC3 to maintain backward compatibility with Nuxeo 5.5, but there are a fair number of connection points and it was easier just to adapt the listener and the newer extractor to purpose. Of course it would be better if 2.5.0-RC3 were wrapped into the core product!

More details on what I did and a code snippet.

0 votes

Thanks, I'll try to have a look to integrate it into Nuxeo.