Community

Process Variables made by Java cannot be deserialized

created by Gerardo Navarro Suarez in jBPM - View the full discussion

Hi All,

 

I have problems understanding why this little process doesn't work. Especially why the variable cannot be deserialized.

 

I'm using jBoss-5.0.0.GA and jBPM-4.3.

But first of all the process:

 

<?xml version="1.0" encoding="UTF-8"?>

 

<process name="TaskformTest" xmlns="http://jbpm.org/4.3/jpdl">

    <start g="72,104,48,48" name="start">

        <transition to="Setting Variable" />

    </start>

 

    <java class="de.hpi.pois.firsttest.Application" g="151,102,92,52"

        method="createApplication" name="Setting Variable" var="application">

 

        <arg>

            <string value="Gerardo,g@hpi.cu" />

        </arg>

        <transition to="Taskform" />

    </java>

 

    <task candidate-users="alex" form="de/hpi/pois/firsttest/taskformTest.ftl"

        g="249,160,92,52" name="Taskform">

        <transition to="wait" />

    </task>

 

    <state g="362,94,92,52" name="wait">

        <transition to="end" />

    </state>

 

    <end g="507,101,48,48" name="end" />

</process>

 

The class looks like this:

 

package de.hpi.pois.firsttest;

 

import java.io.Serializable;

 

public class Application implements Serializable
{
    private static final long serialVersionUID = 1L;
   
    public String name;
    public String email;
   
    public Application(){}
   
    public Application(String name, String email)
    {
        setName(name);
        setEmail(email);
    }
   
    public static Application createApplication(String entry)
    {
        String[] entryElements = entry.split(",");
       
        return new Application(entryElements[0], entryElements[1]);
    }
   
    public void setName(String name) {
        this.name = name;
    }

 

    public String getName() {
        return name;

    }

 

    public void setEmail(String email) {
        this.email = email;
    }

 

    public String getEmail() {
        return email;
    }
}

 

the taskformTest.flt looks like this:

 

<html>
  <head>
    <style type="text/css">  
     ${CSS!".body {font-family:sans-serif;}"}
    </style>
  </head>
  <body>
   
    <form action="${form.action}" method="POST" enctype="multipart/form-data">
   
      <h3>Getting the name of the applicant</h3>
     
      <br/>
      <br/>

      Name of the applicant: ${application.name}
     
      <br/>
      <br/>

      <input type="submit" name="done" value="Done"/>

 

    </form>
  </body>
</html>

 

So what happens?

 

I start a new process instance via jbpm-console. Afterwards I go to alex's Personal Tasks and open the taskform (taskformTest.ftl). Then the following error occurs. I cannot understand why the object application cannot be deserialized, although the class application implements Serializable. In DevGuide it is said that process variables can be used in freemarker as variables, but I don't think the problem lies there. The same error happen when I select the created process instance and then click on Instance Data.

 

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.jboss.resteasy.spi.UnhandledException: org.jbpm.api.JbpmException: couldn't deserialize object
     org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:319)
     org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:230)
     org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:206)
     org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:360)
     org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:173)
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:93)
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:68)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     org.jboss.bpm.console.server.util.GWTJsonFilter.doFilter(GWTJsonFilter.java:59)
     org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

org.jbpm.api.JbpmException: couldn't deserialize object
     org.jbpm.pvm.internal.type.converter.SerializableToBytesConverter.revert(SerializableToBytesConverter.java:79)
     org.jbpm.pvm.internal.type.Variable.getValue(Variable.java:105)
     org.jbpm.pvm.internal.type.variable.BlobVariable.getValue(BlobVariable.java:61)
     org.jbpm.pvm.internal.model.ScopeInstanceImpl.getVariable(ScopeInstanceImpl.java:192)
     org.jbpm.pvm.internal.cmd.GetExecutionVariablesCmd.execute(GetExecutionVariablesCmd.java:63)
     org.jbpm.pvm.internal.cmd.GetExecutionVariablesCmd.execute(GetExecutionVariablesCmd.java:36)
     org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
     org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.executeInNewTx(JtaTransactionInterceptor.java:87)
     org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:66)
     org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
     org.jbpm.pvm.internal.tx.JtaRetryInterceptor.executeWithRetry(JtaRetryInterceptor.java:52)
     org.jbpm.pvm.internal.tx.JtaRetryInterceptor.execute(JtaRetryInterceptor.java:45)
     org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
     org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
     org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)
     org.jbpm.pvm.internal.svc.ExecutionServiceImpl.getVariables(ExecutionServiceImpl.java:139)
     org.jbpm.integration.console.forms.TaskFormDispatcher.provideForm(TaskFormDispatcher.java:103)
     org.jbpm.integration.console.forms.FormDispatcherComposite.provideForm(FormDispatcherComposite.java:65)
     org.jboss.bpm.console.server.FormProcessingFacade.provideForm(FormProcessingFacade.java:203)
     org.jboss.bpm.console.server.FormProcessingFacade.renderTaskUI(FormProcessingFacade.java:125)
     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     java.lang.reflect.Method.invoke(Method.java:597)
     org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:117)
     org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:260)
     org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:232)
     org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:166)
     org.jboss.resteasy.core.DispatcherUtilities.getJaxrsResponse(DispatcherUtilities.java:142)
     org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)
     org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:173)
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:93)
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:68)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     org.jboss.bpm.console.server.util.GWTJsonFilter.doFilter(GWTJsonFilter.java:59)
     org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

java.lang.ClassNotFoundException: de.hpi.pois.firsttest.Application
     java.net.URLClassLoader$1.run(URLClassLoader.java:202)
     java.security.AccessController.doPrivileged(Native Method)
     java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     java.lang.ClassLoader.loadClass(ClassLoader.java:307)
     sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
     java.lang.ClassLoader.loadClass(ClassLoader.java:248)
     java.lang.Class.forName0(Native Method)
     java.lang.Class.forName(Class.java:247)
     org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:276)
     org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1099)
     org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:735)
     org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:378)
     java.lang.ClassLoader.loadClass(ClassLoader.java:248)
     java.lang.Class.forName0(Native Method)
     java.lang.Class.forName(Class.java:247)
     java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:604)
     java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
     java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
     java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
     java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
     java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
     org.jbpm.pvm.internal.type.converter.SerializableToBytesConverter.revert(SerializableToBytesConverter.java:69)
     org.jbpm.pvm.internal.type.Variable.getValue(Variable.java:105)
     org.jbpm.pvm.internal.type.variable.BlobVariable.getValue(BlobVariable.java:61)
     org.jbpm.pvm.internal.model.ScopeInstanceImpl.getVariable(ScopeInstanceImpl.java:192)
     org.jbpm.pvm.internal.cmd.GetExecutionVariablesCmd.execute(GetExecutionVariablesCmd.java:63)
     org.jbpm.pvm.internal.cmd.GetExecutionVariablesCmd.execute(GetExecutionVariablesCmd.java:36)
     org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:42)
     org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.executeInNewTx(JtaTransactionInterceptor.java:87)
     org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:66)
     org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
     org.jbpm.pvm.internal.tx.JtaRetryInterceptor.executeWithRetry(JtaRetryInterceptor.java:52)
     org.jbpm.pvm.internal.tx.JtaRetryInterceptor.execute(JtaRetryInterceptor.java:45)
     org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
     org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
     org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)
     org.jbpm.pvm.internal.svc.ExecutionServiceImpl.getVariables(ExecutionServiceImpl.java:139)
     org.jbpm.integration.console.forms.TaskFormDispatcher.provideForm(TaskFormDispatcher.java:103)
     org.jbpm.integration.console.forms.FormDispatcherComposite.provideForm(FormDispatcherComposite.java:65)
     org.jboss.bpm.console.server.FormProcessingFacade.provideForm(FormProcessingFacade.java:203)
     org.jboss.bpm.console.server.FormProcessingFacade.renderTaskUI(FormProcessingFacade.java:125)
     sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     java.lang.reflect.Method.invoke(Method.java:597)
     org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:117)
     org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:260)
     org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:232)
     org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:166)
     org.jboss.resteasy.core.DispatcherUtilities.getJaxrsResponse(DispatcherUtilities.java:142)
     org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356)
     org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:173)
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:93)
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:68)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     org.jboss.bpm.console.server.util.GWTJsonFilter.doFilter(GWTJsonFilter.java:59)
     org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

note The full stack trace of the root cause is available in the JBoss Web/2.1.1.GA logs.


 

I hope you got an impression of my problem. What I've done wrong? I would very much appreciate if you could help me.

 

Greetings,

 

Gerardo

Reply to this message by going to Community

Start a new discussion in jBPM at Community