Uploaded image for project: 'camunda BPM'
  1. camunda BPM
  2. CAM-9672

Oracle db, IllegalArgumentException when querying for file variable with "empty" filename

    XMLWordPrintable

Details

    • Bug Report
    • Resolution: Fixed
    • L3 - Default
    • 7.11.0, 7.11.0-alpha5
    • 7.10.0, 7.9.6, 7.11.0, 7.11.0-alpha2, 7.11.0-alpha3
    • engine
    • Oracle

    Description

      Scenario:
      1. Process instance containing Embedded Form with optional File field.
      2. Submit the form without providing a file.
      (after the fix of CAM-8189) a variable is created with empty value and empty name (empty string)
      Here is an example of the request:

      POST process-definition/{id}/submit-form
      {
      	"variables": {
      		"invoiceDocument": {
      			"value": "",
      			"type": "File",
      			"valueInfo": {
      				"filename": ""
      			}
      		}
      }
      

      3. Query for this file variable (for example open the runtime view of the process instance in Cockpit)

      Current behavior:
      The following exception is thrown

      24-Jan-2019 12:57:26.836 SEVERE [http-nio-8080-exec-10] org.camunda.commons.logging.BaseLogger.logError ENGINE-16004 Exception while closing command context: UTILS-02001 Parameter 'filename' is null
       java.lang.IllegalArgumentException: UTILS-02001 Parameter 'filename' is null
      	at org.camunda.commons.utils.EnsureUtilLogger.parameterIsNullException(EnsureUtilLogger.java:24)
      	at org.camunda.commons.utils.EnsureUtil.ensureNotNull(EnsureUtil.java:34)
      	at org.camunda.bpm.engine.variable.impl.value.builder.FileValueBuilderImpl.<init>(FileValueBuilderImpl.java:40)
      	at org.camunda.bpm.engine.variable.Variables.fileValue(Variables.java:407)
      	at org.camunda.bpm.engine.variable.Variables.fileValue(Variables.java:399)
      	at org.camunda.bpm.engine.impl.variable.serializer.FileValueSerializer.readValue(FileValueSerializer.java:71)
      	at org.camunda.bpm.engine.impl.variable.serializer.FileValueSerializer.readValue(FileValueSerializer.java:32)
      	at org.camunda.bpm.engine.impl.persistence.entity.util.TypedValueField.getTypedValue(TypedValueField.java:95)
      	at org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity.getTypedValue(VariableInstanceEntity.java:268)
      	at org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope.collectVariables(AbstractVariableScope.java:113)
      	at org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope.collectVariables(AbstractVariableScope.java:120)
      	at org.camunda.bpm.engine.impl.cmd.GetTaskFormVariablesCmd.execute(GetTaskFormVariablesCmd.java:67)
      	at org.camunda.bpm.engine.impl.cmd.GetTaskFormVariablesCmd.execute(GetTaskFormVariablesCmd.java:37)
      	at org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:27)
      	at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:106)
      	at org.camunda.bpm.engine.impl.interceptor.ProcessApplicationContextInterceptor.execute(ProcessApplicationContextInterceptor.java:69)
      	at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:32)
      	at org.camunda.bpm.engine.impl.FormServiceImpl.getTaskFormVariables(FormServiceImpl.java:114)
      	at org.camunda.bpm.engine.rest.sub.task.impl.TaskResourceImpl.getFormVariables(TaskResourceImpl.java:345)
      	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.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
      	at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:257)
      	at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:222)
      	at org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:159)
      	at org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:107)
      	at org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:154)
      	at org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:92)
      	at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:542)
      	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
      	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
      	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
      	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
      	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.camunda.bpm.engine.rest.filter.CacheControlFilter.doFilter(CacheControlFilter.java:44)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.camunda.bpm.engine.rest.filter.EmptyBodyFilter.doFilter(EmptyBodyFilter.java:100)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.camunda.bpm.webapp.impl.security.filter.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:164)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilterSecure(SecurityFilter.java:70)
      	at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilter(SecurityFilter.java:54)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:61)
      	at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:59)
      	at org.camunda.bpm.webapp.impl.security.SecurityActions.runWithAuthentications(SecurityActions.java:43)
      	at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:59)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
      	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
      	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
      	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
      	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
      	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
      	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
      	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
      	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
      	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      	at java.lang.Thread.run(Thread.java:745)
      

      Expected behavior:
      The variable is retrieve successfully.

      Solution:

      • We allow creating variables with file name null.
      • Another option is to apply predefault filename depending on the variable name.

      Notes:
      In Oracle, an empty string is equivalent to NULL. So the filename (TEXT_ of ACT_RU_VARIABLE) is saved as a NULL which causes the exception.
      https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements005.htm#SQLRF51081
      Also if the user doesn't provide input for String field, in Oracle db it is saved as NULL as well. However, when we query for it we don't have such null check for String vars.

      mgm-controller-panel

        This is the controller panel for Smart Panels app

        Attachments

          Activity

            People

              Unassigned Unassigned
              yana.vasileva Yana Vasileva
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Salesforce