Notice: In order to edit this ticket you need to be either: a Product Owner, The owner or the reporter of the ticket, or, in case of a Task not yet assigned, a team_member"

Task #7886 (closed)

Opened 8 years ago

Closed 7 years ago

Bug: OME-TIFF from TILL Photonics

Reported by: jburel Owned by: mlinkert
Priority: critical Milestone: OMERO-4.4
Component: Import Version: n.a.
Keywords: n.a. Cc: jamoore, cxallan
Resources: n.a. Referenced By: n.a.
References: n.a. Remaining Time: 0.0d
Sprint: 2012-03-13 (10)

Description

TILL Photonics is one the companies that offers direct saving of their data into OME TIFF files.
We have been setting up a new experimental set-up recently and used their LA-software for controlliong the hardware and acquiring the data.
Unfortunately, their OME TIFF files fail to import into our OMERO installation. Please find part of the error messages below.

java.lang.RuntimeException: omero.ValidationException
    serverStackTrace = "ome.conditions.ValidationException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective
                                at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:648)
                                at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
                                at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:117)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at ome.tools.hibernate.ProxyCleanupFilter$Interceptor.invoke(ProxyCleanupFilter.java:231)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at ome.services.util.ServiceHandler.invoke(ServiceHandler.java:116)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
                                at $Proxy64.doWork(Unknown Source)
                                at ome.services.util.Executor$Impl.execute(Executor.java:371)
                                at ome.services.throttling.Adapter.run(Adapter.java:51)
                                at ome.services.throttling.InThreadThrottlingStrategy.runnableCall(InThreadThrottlingStrategy.java:89)
                                at ome.services.blitz.impl.AbstractAmdServant.runnableCall(AbstractAmdServant.java:150)
                                at ome.services.blitz.impl.MetadataStoreI.saveToDB_async(MetadataStoreI.java:190)
                                at omero.api._MetadataStoreTie.saveToDB_async(_MetadataStoreTie.java:85)
                                at omero.api._MetadataStoreDisp.___saveToDB(_MetadataStoreDisp.java:218)
                                at omero.api._MetadataStoreDisp.__dispatch(_MetadataStoreDisp.java:366)
                                at IceInternal.Incoming.invoke(Incoming.java:159)
                                at Ice.ConnectionI.invokeAll(ConnectionI.java:2037)
                                at Ice.ConnectionI.message(ConnectionI.java:972)
                                at IceInternal.ThreadPool.run(ThreadPool.java:577)
                                at IceInternal.ThreadPool.access$100(ThreadPool.java:12)
                                at IceInternal.ThreadPool$EventHandlerThread.run(ThreadPool.java:971)
                        "
    serverExceptionClass = "ome.conditions.ValidationException"
    message = "not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective"
        at ome.formats.OMEROMetadataStoreClient.saveToDB(OMEROMetadataStoreClient.java:2163)
        at ome.formats.importer.ImportLibrary.importMetadata(ImportLibrary.java:357)
        at ome.formats.importer.ImportLibrary.importImage(ImportLibrary.java:539)
        at org.openmicroscopy.shoola.env.data.OMEROGateway.importImage(OMEROGateway.java:6402)
        at org.openmicroscopy.shoola.env.data.OmeroImageServiceImpl.importFile(OmeroImageServiceImpl.java:1191)
        at org.openmicroscopy.shoola.env.data.views.calls.ImagesImporter.importFile(ImagesImporter.java:85)
        at org.openmicroscopy.shoola.env.data.views.calls.ImagesImporter.access$000(ImagesImporter.java:54)
        at org.openmicroscopy.shoola.env.data.views.calls.ImagesImporter$1.doCall(ImagesImporter.java:111)
        at org.openmicroscopy.shoola.env.data.views.BatchCall.doStep(BatchCall.java:144)
        at org.openmicroscopy.shoola.util.concur.tasks.CompositeTask.doStep(CompositeTask.java:226)
        at org.openmicroscopy.shoola.env.data.views.CompositeBatchCall.doStep(CompositeBatchCall.java:126)
        at org.openmicroscopy.shoola.util.concur.tasks.ExecCommand.exec(ExecCommand.java:165)
        at org.openmicroscopy.shoola.util.concur.tasks.ExecCommand.run(ExecCommand.java:274)
        at org.openmicroscopy.shoola.util.concur.tasks.AsyncProcessor$Runner.run(AsyncProcessor.java:91)
        at java.lang.Thread.run(Thread.java:680)
Caused by: omero.ValidationException
    serverStackTrace = "ome.conditions.ValidationException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective
                                at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:648)
                                at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
                                at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:117)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at ome.tools.hibernate.ProxyCleanupFilter$Interceptor.invoke(ProxyCleanupFilter.java:231)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at ome.services.util.ServiceHandler.invoke(ServiceHandler.java:116)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
                                at $Proxy64.doWork(Unknown Source)
                                at ome.services.util.Executor$Impl.execute(Executor.java:371)
                                at ome.services.throttling.Adapter.run(Adapter.java:51)
                                at ome.services.throttling.InThreadThrottlingStrategy.runnableCall(InThreadThrottlingStrategy.java:89)
                                at ome.services.blitz.impl.AbstractAmdServant.runnableCall(AbstractAmdServant.java:150)
                                at ome.services.blitz.impl.MetadataStoreI.saveToDB_async(MetadataStoreI.java:190)
                                at omero.api._MetadataStoreTie.saveToDB_async(_MetadataStoreTie.java:85)
                                at omero.api._MetadataStoreDisp.___saveToDB(_MetadataStoreDisp.java:218)
                                at omero.api._MetadataStoreDisp.__dispatch(_MetadataStoreDisp.java:366)
                                at IceInternal.Incoming.invoke(Incoming.java:159)
                                at Ice.ConnectionI.invokeAll(ConnectionI.java:2037)
                                at Ice.ConnectionI.message(ConnectionI.java:972)
                                at IceInternal.ThreadPool.run(ThreadPool.java:577)
                                at IceInternal.ThreadPool.access$100(ThreadPool.java:12)
                                at IceInternal.ThreadPool$EventHandlerThread.run(ThreadPool.java:971)
                        "
    serverExceptionClass = "ome.conditions.ValidationException"
    message = "not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective"
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at IceInternal.BasicStream$DynamicUserExceptionFactory.createAndThrow(BasicStream.java:2243)
        at IceInternal.BasicStream.throwException(BasicStream.java:1632)
        at IceInternal.Outgoing.throwUserException(Outgoing.java:442)
        at omero.api._MetadataStoreDelM.saveToDB(_MetadataStoreDelM.java:162)
        at omero.api.MetadataStorePrxHelper.saveToDB(MetadataStorePrxHelper.java:254)
        at omero.api.MetadataStorePrxHelper.saveToDB(MetadataStorePrxHelper.java:226)
        at ome.formats.OMEROMetadataStoreClient.saveToDB(OMEROMetadataStoreClient.java:2148)
        ... 14 more

        at org.openmicroscopy.shoola.env.data.OMEROGateway.importImage(OMEROGateway.java:6447)
        at org.openmicroscopy.shoola.env.data.OmeroImageServiceImpl.importFile(OmeroImageServiceImpl.java:1191)
        at org.openmicroscopy.shoola.env.data.views.calls.ImagesImporter.importFile(ImagesImporter.java:85)
        at org.openmicroscopy.shoola.env.data.views.calls.ImagesImporter.access$000(ImagesImporter.java:54)
        at org.openmicroscopy.shoola.env.data.views.calls.ImagesImporter$1.doCall(ImagesImporter.java:111)
        at org.openmicroscopy.shoola.env.data.views.BatchCall.doStep(BatchCall.java:144)
        at org.openmicroscopy.shoola.util.concur.tasks.CompositeTask.doStep(CompositeTask.java:226)
        at org.openmicroscopy.shoola.env.data.views.CompositeBatchCall.doStep(CompositeBatchCall.java:126)
        at org.openmicroscopy.shoola.util.concur.tasks.ExecCommand.exec(ExecCommand.java:165)
        at org.openmicroscopy.shoola.util.concur.tasks.ExecCommand.run(ExecCommand.java:274)
        at org.openmicroscopy.shoola.util.concur.tasks.AsyncProcessor$Runner.run(AsyncProcessor.java:91)
        at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.RuntimeException: omero.ValidationException
    serverStackTrace = "ome.conditions.ValidationException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective
                                at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:648)
                                at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
                                at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:117)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at ome.tools.hibernate.ProxyCleanupFilter$Interceptor.invoke(ProxyCleanupFilter.java:231)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at ome.services.util.ServiceHandler.invoke(ServiceHandler.java:116)
                                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
                                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
                                at $Proxy64.doWork(Unknown Source)
                                at ome.services.util.Executor$Impl.execute(Executor.java:371)
                                at ome.services.throttling.Adapter.run(Adapter.java:51)
                                at ome.services.throttling.InThreadThrottlingStrategy.runnableCall(InThreadThrottlingStrategy.java:89)
                                at ome.services.blitz.impl.AbstractAmdServant.runnableCall(AbstractAmdServant.java:150)
                                at ome.services.blitz.impl.MetadataStoreI.saveToDB_async(MetadataStoreI.java:190)
                                at omero.api._MetadataStoreTie.saveToDB_async(_MetadataStoreTie.java:85)
                                at omero.api._MetadataStoreDisp.___saveToDB(_MetadataStoreDisp.java:218)
                                at omero.api._MetadataStoreDisp.__dispatch(_MetadataStoreDisp.java:366)
                                at IceInternal.Incoming.invoke(Incoming.java:159)
                                at Ice.ConnectionI.invokeAll(ConnectionI.java:2037)
                                at Ice.ConnectionI.message(ConnectionI.java:972)
                                at IceInternal.ThreadPool.run(ThreadPool.java:577)
                                at IceInternal.ThreadPool.access$100(ThreadPool.java:12)
                                at IceInternal.ThreadPool$EventHandlerThread.run(ThreadPool.java:971)
                        "
    serverExceptionClass = "ome.conditions.ValidationException"
    message = "not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective"
        at ome.formats.OMEROMetadataStoreClient.saveToDB(OMEROMetadataStoreClient.java:2163)
        at ome.formats.importer.ImportLibrary.importMetadata(ImportLibrary.java:357)
        at ome.formats.importer.ImportLibrary.importImage(ImportLibrary.java:539)
        at org.openmicroscopy.shoola.env.data.OMEROGateway.importImage(OMEROGateway.java:6402)
        ... 11 more
Caused by: omero.ValidationException
    serverStackTrace = "ome.conditions.ValidationException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ome.model.acquisition.OTF.objective

Change History (9)

comment:1 Changed 8 years ago by mlinkert

The broader issue here is how to handle these sorts of subtly invalid OME-XML/OME-TIFF files. I can think of a few approaches:

  1. Leave things as they are, as it's ultimately a problem in some other software that is causing this.
  2. Add a method that checks whether or not an OMEXMLMetadataStore is valid (i.e. all required attributes are populated). If not valid, then bypass the OME-TIFF reader and use the regular TIFF reader instead.
  3. Add a method that checks whether or not an OMEXMLMetadataStore is valid, and if not valid then populates any missing attributes.

Any preferences or other ideas?

comment:2 Changed 8 years ago by jmoore

Quick 2 cents: seems like this is something that may should be configurable. "STRICT" v. "LAX" or whatever, which in the user-interface could be represented as a "force import" or "import as TIFF".

It seems like users could be surprised to think they're importing an OME-TIFF and then only get a TIFF out of it, silently. On the other hand, completely bailing is equally annoying.

Are there other cases where we tolerate a bad element (here the OTF) perhaps by nulling it out?

comment:3 Changed 8 years ago by mlinkert

  • Sprint set to 2012-02-14 (8)

comment:4 Changed 8 years ago by mlinkert

  • Cc mlinkert-x removed
  • Owner set to mlinkert-x

comment:5 Changed 8 years ago by mlinkert

See also #6309. Would be good to discuss this at the dev meeting next week.

comment:6 Changed 7 years ago by jburel

  • Sprint changed from 2012-02-14 (8) to 2012-02-28 (9)

Moved from sprint 2012-02-14 (8)

comment:7 Changed 7 years ago by mlinkert

  • Remaining Time set to 0.001
  • Status changed from new to accepted

What I've done for now is just disabled conversion of OTF elements:

https://github.com/melissalinkert/bioformats/commit/9326a944b1c3a51432ec9bd317841afdf5e6b783

That solves this problem, but as we've discussed there is still the broader issue of what to do with subtly invalid OME-TIFF files.

comment:8 Changed 7 years ago by jburel

  • Sprint changed from 2012-02-28 (9) to 2012-03-13 (10)

Moved from sprint 2012-02-28 (9)

comment:9 Changed 7 years ago by mlinkert

  • Remaining Time changed from 0.001 to 0
  • Resolution set to fixed
  • Status changed from accepted to closed
Note: See TracTickets for help on using tickets. You may also have a look at Agilo extensions to the ticket.

1.3.13-PRO © 2008-2011 Agilo Software all rights reserved (this page was served in: 0.90045 sec.)

We're Hiring!