I recently created a simple action:
1action GetResult Binary {2 initialcheck none;3 parameter ResultId Integer;4}This action will simply return a BLOB with roughly 200 kilobytes.
When I try to call this, I get the following exception back:
12024-08-19T11:41:16.882975687+02:00 stdout F {"event.module":"liberty_message","host.name":"ifsapp-odata-5978755579-8f8d2","ibm_userDir":"\/opt\/ifs\/wlp\/usr\/","ibm_serverName":"defaultServer","message":"2024-08-19 09:41:16.882 ERROR 6758 5aaf35b1-af2f-4941-9c87-14d835d39635 com.ifsworld.fnd.provider.processor.FndErrorProcessor.processError() : Error Stack : Attribute 'GetResult' with model type 'Binary' has length of '224689', which exceeds the upper bound '64000'.2com.ifsworld.fnd.common.exceptions.ODataProviderPayloadTooLargeException: Attribute 'GetResult' with model type 'Binary' has length of '224689', which exceeds the upper bound '64000'.3 at com.ifsworld.fnd.storage.mapper.MapperUtil.getByteArrayFromBlob(MapperUtil.java:864)4 at com.ifsworld.fnd.storage.mapper.MapperUtil.getObjectFromResultSet(MapperUtil.java:498)5 at com.ifsworld.fnd.storage.mapper.PrimitiveDataMapper.map(PrimitiveDataMapper.java:78)6 at com.ifsworld.fnd.storage.mapper.PrimitiveDataMapper.map(PrimitiveDataMapper.java:193)7 at com.ifsworld.fnd.storage.mapper.PrimitiveDataMapper.map(PrimitiveDataMapper.java:55)8 at com.ifsworld.fnd.storage.PlsqlStatementExecutor.execute(PlsqlStatementExecutor.java:113)9 at com.ifsworld.fnd.storage.PlsqlStatementExecutor.execute(PlsqlStatementExecutor.java:86)10 at com.ifsworld.fnd.storage.PlsqlStatementExecutor.execute(PlsqlStatementExecutor.java:63)11 at com.ifsworld.fnd.storage.invoker.PlsqlOperationInvoker.invoke(PlsqlOperationInvoker.java:56)12 at com.ifsworld.fnd.storage.invoker.BpaInvokerWrapper.invoke(BpaInvokerWrapper.java:168)13 at com.ifsworld.fnd.provider.processor.FndActionProcessor.processActionPrimitive(FndActionProcessor.java:471)14 at org.apache.olingo.server.core.ODataDispatcher.handleActionDispatching(ODataDispatcher.java:254)15 at org.apache.olingo.server.core.ODataDispatcher.handleResourceDispatching(ODataDispatcher.java:143)16 at org.apache.olingo.server.core.ODataDispatcher.dispatch(ODataDispatcher.java:119)17 at org.apache.olingo.server.core.ODataHandlerImpl.processInternal(ODataHandlerImpl.java:168)18 at org.apache.olingo.server.core.ODataHandlerImpl.process(ODataHandlerImpl.java:89)19 at com.ifsworld.fnd.provider.ODataHandlerWrapper.process(ODataHandlerWrapper.java:64)20 at com.ifsworld.fnd.provider.ODataHandlerWrapper.process(ODataHandlerWrapper.java:77)21 at com.ifsworld.fnd.web.api.FndODataServletBase.serviceODataRequest(FndODataServletBase.java:330)22 at com.ifsworld.fnd.web.api.FndODataServletBase.serviceProjectionRequest(FndODataServletBase.java:163)23 at com.ifsworld.fnd.web.api.FndODataServletBase.service(FndODataServletBase.java:112)24 at javax.servlet.http.HttpServlet.service(HttpServlet.java:791)25 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1258)26 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:746)27 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443)28 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:193)29 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:98)30 at com.ifsworld.fnd.web.api.ResponseFilterBase.doFilter(ResponseFilterBase.java:60)31 at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)32 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)33 at com.ifsworld.fnd.web.api.InitConfigurationFilterBase.doFilter(InitConfigurationFilterBase.java:202)34 at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)35 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)36 at com.ibm.ws.security.jaspi.JaspiServletFilter.doFilter(JaspiServletFilter.java:56)37 at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:201)38 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91)39 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:1002)40 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1140)41 at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5049)42 at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.handleRequest(DynamicVirtualHost.java:316)43 at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1007)44 at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:281)45 at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1184)46 at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:453)47 at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:412)48 at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:566)49 at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:500)50 at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:360)51 at com.ibm.ws.http.channel.internal.inbound.HttpICLReadCallback.complete(HttpICLReadCallback.java:70)52 at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:504)53 at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:574)54 at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:958)55 at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1047)56 at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:238)57 at java.base\/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)58 at java.base\/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)59 at java.base\/java.lang.Thread.run(Unknown Source)","ibm_threadId":"00001a66","_timestamp":"2024-08-19T09:41:16.882+0000","module":"SystemErr","log.level":"SystemErr","ibm_methodName":"","log.logger":"","event.sequence":"1724060476882_0000000002A37","ext_requestID":"AAAUgxApFcq_AAAAAAAAYSY","process.thread.name":"Default Executor-thread-1478"}60I understand that we shouldn’t return large objects from a single HTTP REST API, but 200k isn’t an extreme case. Why even implement binary as a return type if it’s restricted to 64000 bytes?
Or maybe I’m just missing something?