How to store JSON in process? Example from manual doesn't work

I tried to test this example from manual:

public class MyDelegate implements JavaDelegate {
  @Override
  public void execute(DelegateExecution execution) throws Exception {
    String json = "{\"name\" : \"jonny\","
        + "\"address\" : {"
          + "\"street\" : \"12 High Street\","
          + "\"post code\" : 1234"
          + "}"
        + "}";
    JsonValue jsonValue = SpinValues.jsonValue(json).create();
    execution.setVariable("customerJonny", jsonValue);
  }
}

But when I start a process I get this error:
The process could not be started. : Cannot instantiate process definition Process_1:1:6e6b5420-c5f0-11e7-b228-e0db55ea9499: Cannot find serializer for value 'Value 'null' of type 'json''.

What’s wrong?

Hi @mykola,

the example is correct and working fine. You may have problems with your project setup. Would you provide the stack trace and your pom.xml.

Hi @sebwarnke!

here’s pom.xml (actually I use Spring 5, but with camunda’s Spring 3.1.2 everything’s the same):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>camunda-test</groupId>
    <artifactId>camunda-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <version.camunda>7.4.0</version.camunda>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <camunda.version>7.4.0</camunda.version>
        <spring.version>3.1.2.RELEASE</spring.version>

        <tomcat.password>manager</tomcat.password>
        <tomcat.username>manager</tomcat.username>
    </properties>

    <repositories>
        <repository>
            <id>camunda-bpm-nexus</id>
            <name>camunda-bpm-nexus</name>
            <url>https://app.camunda.com/nexus/content/groups/public</url>
        </repository>

        <repository>
            <id>Spring Milestones Repository</id>
            <name>Spring Milestones Repository</name>
            <url>http://repo.spring.io/milestone/</url>
        </repository>

        <repository>
            <id>Maven Central</id>
            <name>Maven Central</name>
            <url>http://central.maven.org/maven2/</url>
        </repository>
    </repositories>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.camunda.bpm</groupId>
                <artifactId>camunda-bom</artifactId>
                <version>${camunda.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.camunda.spin</groupId>
            <artifactId>camunda-spin-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.camunda.spin</groupId>
            <artifactId>camunda-spin-dataformat-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-engine-plugin-spin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-engine</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-engine-spring</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <update>true</update>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

And the stacktrace:

> 14-Nov-2017 18:09:19.460 SEVERE [http-nio-8080-exec-35] org.camunda.commons.logging.BaseLogger.logError ENGINE-16006 BPMN Stack Trace:
>         Task_1891pyf (activity-execute, ProcessInstance[c9d7141b-c94d-11e7-8b01-e0db55ea9499], pa=myApplication)
>         Task_1891pyf
>           ^
>           |
>         StartEvent_1
> 
> 14-Nov-2017 18:09:19.461 SEVERE [http-nio-8080-exec-35] org.camunda.commons.logging.BaseLogger.logError ENGINE-16004 Exception while closing command context: Cannot find serializer for value 'Value 'null' of type 'json''.
>  org.camunda.bpm.engine.ProcessEngineException: Cannot find serializer for value 'Value 'null' of type 'json''.
>         at org.camunda.bpm.engine.impl.variable.serializer.DefaultVariableSerializers.findSerializerForValue(DefaultVariableSerializers.java:69)
>         at org.camunda.bpm.engine.impl.persistence.entity.util.TypedValueField.setValue(TypedValueField.java:104)
>         at org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity.setValue(VariableInstanceEntity.java:238)
>         at org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity.create(VariableInstanceEntity.java:123)
>         at org.camunda.bpm.engine.impl.persistence.entity.VariableInstanceEntity.createAndInsert(VariableInstanceEntity.java:107)
>         at org.camunda.bpm.engine.impl.variable.AbstractPersistentVariableStore.createVariableInstance(AbstractPersistentVariableStore.java:147)
>         at org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableStore.createOrUpdateVariable(AbstractVariableStore.java:29)
>         at org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope.setVariableLocal(AbstractVariableScope.java:305)
>         at org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope.setVariable(AbstractVariableScope.java:301)
>         at org.camunda.bpm.engine.impl.core.variable.scope.AbstractVariableScope.setVariable(AbstractVariableScope.java:284)
>         at ru.camunda.test.MyDelegate.execute(MyDelegate.java:21)
>         at org.camunda.bpm.engine.impl.bpmn.delegate.JavaDelegateInvocation.invoke(JavaDelegateInvocation.java:36)
>         at org.camunda.bpm.engine.impl.delegate.DelegateInvocation.proceed(DelegateInvocation.java:54)
>         at org.camunda.bpm.engine.impl.delegate.DefaultDelegateInterceptor.handleInvocationInContext(DefaultDelegateInterceptor.java:86)
>         at org.camunda.bpm.engine.impl.delegate.DefaultDelegateInterceptor.handleInvocation(DefaultDelegateInterceptor.java:58)
>         at org.camunda.bpm.engine.impl.bpmn.behavior.ServiceTaskJavaDelegateActivityBehavior.execute(ServiceTaskJavaDelegateActivityBehavior.java:49)
>         at org.camunda.bpm.engine.impl.bpmn.behavior.ServiceTaskJavaDelegateActivityBehavior.execute(ServiceTaskJavaDelegateActivityBehavior.java:40)
>         at org.camunda.bpm.engine.impl.bpmn.behavior.ClassDelegateActivityBehavior$1.call(ClassDelegateActivityBehavior.java:63)
>         at org.camunda.bpm.engine.impl.bpmn.behavior.ClassDelegateActivityBehavior$1.call(ClassDelegateActivityBehavior.java:60)
>         at org.camunda.bpm.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior.executeWithErrorPropagation(AbstractBpmnActivityBehavior.java:105)
>         at org.camunda.bpm.engine.impl.bpmn.behavior.ClassDelegateActivityBehavior.execute(ClassDelegateActivityBehavior.java:60)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute.execute(PvmAtomicOperationActivityExecute.java:41)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationActivityExecute.execute(PvmAtomicOperationActivityExecute.java:26)
>         at org.camunda.bpm.engine.impl.interceptor.AtomicOperationInvocation.execute(AtomicOperationInvocation.java:81)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.invokeNext(CommandContext.java:180)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:159)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:134)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:494)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:471)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerStart.eventNotificationsCompleted(PvmAtomicOperationTransitionNotifyListenerStart.java:56)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionNotifyListenerStart.eventNotificationsCompleted(PvmAtomicOperationTransitionNotifyListenerStart.java:26)
>         at org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:65)
>         at org.camunda.bpm.engine.impl.interceptor.AtomicOperationInvocation.execute(AtomicOperationInvocation.java:81)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.invokeNext(CommandContext.java:180)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:159)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:134)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:124)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:505)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:480)
>         at org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:58)
>         at org.camunda.bpm.engine.impl.interceptor.AtomicOperationInvocation.execute(AtomicOperationInvocation.java:81)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.invokeNext(CommandContext.java:180)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:159)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:134)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:124)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:505)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:480)
>         at org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:58)
>         at org.camunda.bpm.engine.impl.interceptor.AtomicOperationInvocation.execute(AtomicOperationInvocation.java:81)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.invokeNext(CommandContext.java:180)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:159)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:134)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:124)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:505)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperationSync(ExecutionEntity.java:480)
>         at org.camunda.bpm.engine.impl.core.operation.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:58)
>         at org.camunda.bpm.engine.impl.interceptor.AtomicOperationInvocation.execute(AtomicOperationInvocation.java:81)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.invokeNext(CommandContext.java:180)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:159)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext$1.call(CommandContext.java:150)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext$1.call(CommandContext.java:148)
>         at org.camunda.bpm.engine.impl.context.ProcessApplicationClassloaderInterceptor.call(ProcessApplicationClassloaderInterceptor.java:44)
>         at org.camunda.bpm.application.AbstractProcessApplication.execute(AbstractProcessApplication.java:109)
>         at org.camunda.bpm.engine.impl.context.Context.executeWithinProcessApplication(Context.java:186)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:148)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:134)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:494)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:471)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationTransitionCreateScope.scopeCreated(PvmAtomicOperationTransitionCreateScope.java:34)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope.execute(PvmAtomicOperationCreateScope.java:49)
>         at org.camunda.bpm.engine.impl.pvm.runtime.operation.PvmAtomicOperationCreateScope.execute(PvmAtomicOperationCreateScope.java:23)
>         at org.camunda.bpm.engine.impl.interceptor.AtomicOperationInvocation.execute(AtomicOperationInvocation.java:81)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.invokeNext(CommandContext.java:180)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:167)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext$1.call(CommandContext.java:150)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext$1.call(CommandContext.java:148)
>         at org.camunda.bpm.engine.impl.context.ProcessApplicationClassloaderInterceptor.call(ProcessApplicationClassloaderInterceptor.java:44)
>         at org.camunda.bpm.application.AbstractProcessApplication.execute(AbstractProcessApplication.java:109)
>         at org.camunda.bpm.engine.impl.context.Context.executeWithinProcessApplication(Context.java:186)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performNext(CommandContext.java:148)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:134)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.performOperation(ExecutionEntity.java:494)
>         at org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.startWithFormProperties(ExecutionEntity.java:384)
>         at org.camunda.bpm.engine.impl.cmd.SubmitStartFormCmd.execute(SubmitStartFormCmd.java:80)
>         at org.camunda.bpm.engine.impl.cmd.SubmitStartFormCmd.execute(SubmitStartFormCmd.java:39)
>         at org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
>         at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:95)
>         at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:30)
>         at org.camunda.bpm.engine.impl.FormServiceImpl.submitStartForm(FormServiceImpl.java:74)
>         at org.camunda.bpm.engine.rest.sub.repository.impl.ProcessDefinitionResourceImpl.submitForm(ProcessDefinitionResourceImpl.java:166)
>         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:729)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.camunda.bpm.engine.rest.filter.CacheControlFilter.doFilter(CacheControlFilter.java:41)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilterSecure(SecurityFilter.java:67)
>         at org.camunda.bpm.webapp.impl.security.filter.SecurityFilter.doFilter(SecurityFilter.java:51)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:59)
>         at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter$1.execute(AuthenticationFilter.java:56)
>         at org.camunda.bpm.webapp.impl.security.SecurityActions.runWithAuthentications(SecurityActions.java:38)
>         at org.camunda.bpm.webapp.impl.security.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:56)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
>         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
>         at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
>         at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
>         at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
>         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
>         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
>         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)

we ran into the same problem, would be intrested if you found a solutiuon.

Hi folks,

Make sure the Spin process engine plugin is activated for the engine that you use. See https://docs.camunda.org/manual/7.7/user-guide/data-formats/configuring-spin-integration/#configuring-the-spin-process-engine-plugin for details.

Cheers,
Thorben

edit: Also do not include the Spin dependencies in your application, if you are using a shared process engine.

Hi, @thorben!

Yes, indeed. All I have to do is to set <scope>provided</scope> to all spin dependencies. Strange because I thought I tried this when I unsuccesfully attempted to use it in my project.
But two more questions arouse. Why is it marked red?


and how to see whole value? because when I try to edit it (like I usually do when I need to read long string value) it turns into empty value, like this:

P.S. We use Camunda 7.4, so may be it’s just a bug which is fixed in current version.

That’s a bug that I think is fixed in 7.8.

I think this is a feature that is implemented in later versions as well.

Cheers,
Thorben