John Eberhard
-
2021-06-28
- assigned_to: Zhang Ze
Hi JTOpen Team,
We ran into the following exception today
com.lkww.db2.conversion.recordformat.exception.RecordFormatRetrieveException: Failed to retrieve record format for objectPath
Our code in this scenario is quite simple:
AS400FileRecordDescription recordDescription = new AS400FileRecordDescription(as400, objectPath);
RecordFormat[] recordFormats = recordDescription.retrieveRecordFormat();
The problem only appears on one specific table where we have a field specified as CLOB data type. According to the debugger we get fieldtype '1' from our AS400 for this field, but the implementation at com.ibm.as400.access.AS400FileRecordDescriptionImplRemote.addFieldDescription only seems to support the following data types:
case 'A': // Character field
case 'B': // Binary field
case 'E': // DBCS-Either field
case 'F': // Float field
case 'G': // DBCS-Graphic field
case 'H': // Hex field
case 'J': // DBCS-Only field
case 'L': // Date field
case 'O': // DBCS-Open field
case 'P': // Packed decimal field
case 'S': // Zoned decimal field
case 'T': // Time field
case 'Z': // Timestamp field
Here is the full stacktrace:
com.lkww.db2.conversion.recordformat.exception.RecordFormatRetrieveException: Failed to retrieve record format for objectPath /QSYS.LIB/LKWSQL.LIB/TENDER.FILE/TENDER.MBR
at com.lkww.db2.conversion.recordformat.AS400RecordFormatManager.getRecordFormat(AS400RecordFormatManager.java:31)
at com.lkww.db2.conversion.recordformat.RecordFormatCache.getRecordFormat(RecordFormatCache.java:47)
at com.lkww.db2.conversion.journal.JournalEntryConverter.createJournalEntry(JournalEntryConverter.java:122)
at com.lkww.db2.conversion.journal.JournalEntryConverter.createJournalEntry(JournalEntryConverter.java:96)
at com.lkww.db2.conversion.kafka.JournalEntryConsumer.consumeJournalEntry(JournalEntryConsumer.java:64)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:171)
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:120)
at org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:48)
at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:329)
at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:86)
at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:51)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:1878)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeOnMessage(KafkaMessageListenerContainer.java:1860)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:1797)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:1737)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:1634)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:1364)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1080)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:988)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)\nCaused by: com.ibm.as400.access.InternalErrorException: An unknown problem has occurred.
at com.ibm.as400.access.AS400FileRecordDescriptionImplRemote.addFieldDescription(AS400FileRecordDescriptionImplRemote.java:735)
at com.ibm.as400.access.AS400FileRecordDescriptionImplRemote.retrieveRecordFormat(AS400FileRecordDescriptionImplRemote.java:1334)
at com.ibm.as400.access.AS400FileRecordDescription.retrieveRecordFormat(AS400FileRecordDescription.java:488)
at com.lkww.db2.conversion.recordformat.AS400RecordFormatManager.getRecordFormat(AS400RecordFormatManager.java:24)
... 25 common frames omitted\n