Import service | Missing instanceMedia on import should skip line and continue

Description

When loading a KBART file, if the publication_type column is empty, the line should be skipped and the problem logged as an error: "Missing publication_type for title: <title line>, but the process should continue with any other lines in the file

Currently when a line is missing publication_type the whole load fails. e.g. trying to load the attached KBART file results in failure with no useful information to the user. The console reports:

2020-03-13 09:58:07.832 DEBUG --- [pool-4-thread-1] org.olf.ImportService : Attempting to import package from KBART file 2020-03-13 09:58:07.837 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.838 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.840 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.842 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.857 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.869 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.872 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.877 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.879 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.893 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.896 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.898 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.899 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.900 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.905 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.942 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.944 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.946 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.947 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.974 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.982 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.984 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.996 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:07.998 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.002 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.009 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.012 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.015 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.023 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.027 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.030 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.043 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.045 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.049 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.050 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.051 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.051 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.052 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.064 ERROR --- [pool-4-thread-1] org.olf.ImportService : Property [value] of class [class org.olf.dataimport.erm.Identifier] cannot be null 2020-03-13 09:58:08.081 DEBUG --- [ XNIO-2 task-7] c.k.o.s.OkapiAuthenticationFilter : Request is to process authentication 2020-03-13 09:58:08.081 DEBUG --- [ XNIO-2 task-7] c.k.o.s.OkapiAuthenticationFilter : Authentication success. Updating SecurityContextHolder to contain: com.k_int.okapi.springsecurity.OkapiAuthenticationToken@ca48de84: Principal: com.k_int.okapi.springsecurity.OkapiAuthenticationToken$OkapiUserDetails@390baad5; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: okapi.erm.jobs.item.get 2020-03-13 09:58:08.084 DEBUG --- [ XNIO-2 task-7] com.k_int.okapi.OkapiInterceptor : OkapiInterceptor::performSchemaCheck(diku) 2020-03-13 09:58:08.099 DEBUG --- [ XNIO-2 task-7] com.k_int.okapi.OkapiTenantAdminService : Checking to see if diku is already present in getAllTenantIds() : true 2020-03-13 09:58:08.099 DEBUG --- [ XNIO-2 task-7] com.k_int.okapi.OkapiTenantAdminService : performSchemaCheck(diku) -- true - no action needed 2020-03-13 09:58:08.111 DEBUG --- [ XNIO-2 task-11] c.k.o.s.OkapiAuthenticationFilter : Request is to process authentication 2020-03-13 09:58:08.112 DEBUG --- [ XNIO-2 task-11] c.k.o.s.OkapiAuthenticationFilter : Authentication success. Updating SecurityContextHolder to contain: com.k_int.okapi.springsecurity.OkapiAuthenticationToken@3989eb8f: Principal: com.k_int.okapi.springsecurity.OkapiAuthenticationToken$OkapiUserDetails@540f956b; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: okapi.erm.jobs.collection.get 2020-03-13 09:58:08.113 DEBUG --- [ XNIO-2 task-11] com.k_int.okapi.OkapiInterceptor : OkapiInterceptor::performSchemaCheck(diku) 2020-03-13 09:58:08.113 DEBUG --- [ XNIO-2 task-11] com.k_int.okapi.OkapiTenantAdminService : Checking to see if diku is already present in getAllTenantIds() : true 2020-03-13 09:58:08.113 DEBUG --- [ XNIO-2 task-11] com.k_int.okapi.OkapiTenantAdminService : performSchemaCheck(diku) -- true - no action needed 2020-03-13 09:58:08.114 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Got comparision parts [eqOrIsNull, status.label, Queued] 2020-03-13 09:58:08.114 DEBUG --- [ XNIO-2 task-11] com.k_int.web.toolkit.utils.DomainUtils : Returning org.olf.general.jobs.PersistentJob:status.label from cache. 2020-03-13 09:58:08.114 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Looking for property status.label 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Checking for status 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Full match not found... 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : ...propStr: status 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : ...alias: null 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Creating alias: status -> alias0 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Added quick string: status -> alias0 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Converted Queued into Queued 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Got comparision parts [eqOrIsNull, status.label, In progress] 2020-03-13 09:58:08.115 DEBUG --- [ XNIO-2 task-11] com.k_int.web.toolkit.utils.DomainUtils : Returning org.olf.general.jobs.PersistentJob:status.label from cache. 2020-03-13 09:58:08.149 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Looking for property status.label 2020-03-13 09:58:08.149 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Checking for status 2020-03-13 09:58:08.149 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Converted In progress into In progress 2020-03-13 09:58:08.149 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Got comparision parts [eqOrIsNull, status.label, Ended] 2020-03-13 09:58:08.149 DEBUG --- [ XNIO-2 task-11] com.k_int.web.toolkit.utils.DomainUtils : Returning org.olf.general.jobs.PersistentJob:status.label from cache. 2020-03-13 09:58:08.150 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Looking for property status.label 2020-03-13 09:58:08.150 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Checking for status 2020-03-13 09:58:08.150 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Converted Ended into Ended 2020-03-13 09:58:08.150 DEBUG --- [ XNIO-2 task-11] com.k_int.web.toolkit.utils.DomainUtils : Returning org.olf.general.jobs.PersistentJob:started from cache. 2020-03-13 09:58:08.150 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Looking for property started 2020-03-13 09:58:08.150 DEBUG --- [ XNIO-2 task-11] c.k_int.web.toolkit.SimpleLookupService : Sort on started desc. 2020-03-13 09:58:08.158 DEBUG --- [ XNIO-2 task-10] c.k.o.s.OkapiAuthenticationFilter : Request is to process authentication 2020-03-13 09:58:08.159 DEBUG --- [ XNIO-2 task-10] c.k.o.s.OkapiAuthenticationFilter : Authentication success. Updating SecurityContextHolder to contain: com.k_int.okapi.springsecurity.OkapiAuthenticationToken@3ce85f48: Principal: com.k_int.okapi.springsecurity.OkapiAuthenticationToken$OkapiUserDetails@67070299; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: okapi.erm.refdata.collection.get 2020-03-13 09:58:08.160 DEBUG --- [ XNIO-2 task-10] com.k_int.okapi.OkapiInterceptor : OkapiInterceptor::performSchemaCheck(diku) 2020-03-13 09:58:08.160 DEBUG --- [ XNIO-2 task-10] com.k_int.okapi.OkapiTenantAdminService : Checking to see if diku is already present in getAllTenantIds() : true 2020-03-13 09:58:08.160 DEBUG --- [ XNIO-2 task-10] com.k_int.okapi.OkapiTenantAdminService : performSchemaCheck(diku) -- true - no action needed 2020-03-13 09:58:08.203 DEBUG --- [ XNIO-2 task-14] c.k.o.s.OkapiAuthenticationFilter : Request is to process authentication 2020-03-13 09:58:08.203 DEBUG --- [ XNIO-2 task-14] c.k.o.s.OkapiAuthenticationFilter : Authentication success. Updating SecurityContextHolder to contain: com.k_int.okapi.springsecurity.OkapiAuthenticationToken@7b2b8a20: Principal: com.k_int.okapi.springsecurity.OkapiAuthenticationToken$OkapiUserDetails@20c4d7f1; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: okapi.erm.refdata.collection.get 2020-03-13 09:58:08.216 DEBUG --- [ XNIO-2 task-14] com.k_int.okapi.OkapiInterceptor : OkapiInterceptor::performSchemaCheck(diku) 2020-03-13 09:58:08.216 DEBUG --- [ XNIO-2 task-14] com.k_int.okapi.OkapiTenantAdminService : Checking to see if diku is already present in getAllTenantIds() : true 2020-03-13 09:58:08.216 DEBUG --- [ XNIO-2 task-14] com.k_int.okapi.OkapiTenantAdminService : performSchemaCheck(diku) -- true - no action needed 2020-03-13 09:58:08.279 ERROR --- [pool-4-thread-1] org.olf.general.jobs.JobRunnerService : null 2020-03-13 09:58:08.279 ERROR --- [pool-4-thread-1] org.olf.general.jobs.JobRunnerService : Job execution failed java.lang.NullPointerException: null at org.olf.ImportService.importPackageFromKbart(ImportService.groovy:231) at org.olf.ImportService$importPackageFromKbart.call(Unknown Source) at org.olf.general.jobs.KbartImportJob$_getWork_closure1$_closure4.doCall(KbartImportJob.groovy:57) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.Closure.call(Closure.java:420) at groovy.lang.Closure.call(Closure.java:436) at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91) at org.grails.datastore.gorm.GormStaticApi.withTransaction(GormStaticApi.groovy:1014) at org.grails.datastore.gorm.GormStaticApi.withTransaction(GormStaticApi.groovy:877) at org.grails.datastore.gorm.GormEntity$Trait$Helper.withTransaction(GormEntity.groovy:939) at org.grails.datastore.gorm.GormEntity$Trait$Helper$withTransaction$7.call(Unknown Source) at org.olf.general.jobs.PersistentJob.withTransaction(PersistentJob.groovy) at org.olf.general.jobs.PersistentJob$withTransaction$8.call(Unknown Source) at org.olf.general.jobs.KbartImportJob$_getWork_closure1.doCall(KbartImportJob.groovy:26) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1099) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1099) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.Closure.call(Closure.java:420) at groovy.lang.Closure.call(Closure.java:414) at java_util_concurrent_Callable$call.call(Unknown Source) at org.olf.general.jobs.JobRunnerService$_enqueueJob_closure5$_closure7$_closure8.doCall(JobRunnerService.groovy:171) at sun.reflect.GeneratedMethodAccessor735.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.Closure.call(Closure.java:420) at groovy.lang.Closure.call(Closure.java:436) at grails.gorm.multitenancy.Tenants$_withId_closure2$_closure6.doCall(Tenants.groovy:265) at grails.gorm.multitenancy.Tenants$_withId_closure2$_closure6.call(Tenants.groovy) at org.grails.orm.hibernate.GrailsHibernateTemplate$1.doInHibernate(GrailsHibernateTemplate.java:153) at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:299) at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:243) at org.grails.orm.hibernate.GrailsHibernateTemplate.executeWithNewSession(GrailsHibernateTemplate.java:150) at org.grails.orm.hibernate.GrailsHibernateTemplate.executeWithExistingOrCreateNewSession(GrailsHibernateTemplate.java:209) at org.grails.orm.hibernate.AbstractHibernateDatastore.withNewSession(AbstractHibernateDatastore.java:369) at grails.gorm.multitenancy.Tenants$_withId_closure2.doCall(Tenants.groovy:258) at grails.gorm.multitenancy.Tenants$_withId_closure2.call(Tenants.groovy) at grails.gorm.multitenancy.Tenants$CurrentTenant.withTenant(Tenants.groovy:358) at grails.gorm.multitenancy.Tenants.withId(Tenants.groovy:236) at grails.gorm.multitenancy.Tenants.withId(Tenants.groovy:169) at grails.gorm.multitenancy.Tenants$withId.call(Unknown Source) at org.olf.general.jobs.JobRunnerService$_enqueueJob_closure5$_closure7.doCall(JobRunnerService.groovy:166) at sun.reflect.GeneratedMethodAccessor734.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1099) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034) at groovy.lang.Closure.call(Closure.java:420) at groovy.lang.Closure.call(Closure.java:414) at groovy.lang.Closure.run(Closure.java:501) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

CSP Request Details

None

CSP Rejection Details

None

Potential Workaround

None

Attachments

1
  • 13 Mar 2020, 10:05 AM

Checklist

hide

TestRail: Results

Activity

Show:

steve.osguthorpeMarch 18, 2020 at 2:32 PM
Edited

ImportService.groovy:231 is what is reported as being the source of the error. We can see that here: https://github.com/folio-org/mod-agreements/blob/master/service/grails-app/services/org/olf/ImportService.groovy#L231

This again is due to not being null safe.
`instanceMedia.toLowerCase()` will fail if instanceMedia is null and that is exactly what is happening. We can use a mixture of null-safe access to make this not fail:

i.e. `instanceMedia?.toLowercase()` but this issue suggests we should instead pre-check for null and skip but log an error. So we should instead wrap https://github.com/folio-org/mod-agreements/blob/master/service/grails-app/services/org/olf/ImportService.groovy#L230-L275 inside an if/else statement:

if (!instanceMedia) { // Skip the import log.error "Some text here..." } else { // Add... }

Owen StephensMarch 16, 2020 at 3:58 PM

Thanks . Confirmed - I've fixed all the missing values in the "publication_type" column in the file and the file imports OK

Ethan FreestoneMarch 16, 2020 at 3:40 PM
Edited

Line 231 in ImportService is instanceMedia.toLowerCase() == 'monograph'. This would seem to indicate that instanceMedia is null for one of the lines in this file. If this is a case of a missing column then we need to decide whether this column is mandatory, and if it's a missing field on a single line we need a way to gracefully fail the line with a proper error message

Done

Details

Assignee

Reporter

Components

Priority

Sprint

Development Team

Bienenvolk

TestRail: Cases

Open TestRail: Cases

TestRail: Runs

Open TestRail: Runs

Created March 13, 2020 at 10:06 AM
Updated March 23, 2020 at 11:20 AM
Resolved March 23, 2020 at 11:20 AM
TestRail: Cases
TestRail: Runs

Flag notifications