<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Custom serialization of complex process variable in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170035#M123365</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I wished to extend Activiti's default object serialization scheme to json based serialization. This was intended to handle changes in process variable. When any change is made in any process variable structure, I had to always clean up the Activiti's database other wise it gives me deserialization issues. I wish to handle this by serializing all changes as JSON and an offline tool to adapt any changes made to the proc var class.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-java line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;package test.custom.type;&lt;BR /&gt;&lt;BR /&gt;import org.activiti.engine.ActivitiException;&lt;BR /&gt;import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity;&lt;BR /&gt;import org.activiti.engine.impl.variable.ByteArrayType;&lt;BR /&gt;import org.activiti.engine.impl.variable.ValueFields;&lt;BR /&gt;import org.activiti.engine.impl.context.Context;&lt;BR /&gt;import org.codehaus.jackson.map.ObjectMapper;&lt;BR /&gt;import org.slf4j.Logger;&lt;BR /&gt;import org.slf4j.LoggerFactory;&lt;BR /&gt;&lt;BR /&gt;import test.custom.CustomProcVar;&lt;BR /&gt;&lt;BR /&gt;/**&lt;BR /&gt; * @author ajjain&lt;BR /&gt; * &lt;BR /&gt; * Represents Custom variable type in Activiti. This supports serializing process variables as JSON strings&lt;BR /&gt; * as byte arrays. &lt;BR /&gt; */&lt;BR /&gt;public class CustomVariableType extends ByteArrayType {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /** The type name. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; protected String typeName;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /** The class. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; protected Class&amp;lt;? extends CustomProcVar&amp;gt; theClass;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * represents the JSON mapper object&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; private static final ObjectMapper jsonMapper = new ObjectMapper();&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Instantiates a new view object variable type.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param typeName the type name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param theClass the the class&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public CustomVariableType(String typeName, Class&amp;lt;? extends CustomProcVar&amp;gt; theClass) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.trace("constructing view object variable type name {}, class {}", typeName, theClass);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.typeName = typeName;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.theClass = theClass;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return the typeName&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public String getTypeName() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return typeName;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public Object getValue(ValueFields valueFields) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.trace("CustomVariableType.getValue valueFields {}", valueFields);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object cachedObject = valueFields.getCachedValue();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cachedObject != null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return cachedObject;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] bytes = (byte[]) super.getValue(valueFields);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Object deserializedObject;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; deserializedObject = jsonMapper.readValue(bytes, this.getTheClass());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.trace("getValue returning object {}", deserializedObject);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; valueFields.setCachedValue(deserializedObject);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (valueFields instanceof VariableInstanceEntity) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context.getCommandContext()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getDbSqlSession()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .addDeserializedObject(bytes, bytes, (VariableInstanceEntity) valueFields);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return deserializedObject;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Throwable e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.warn("error in deserializing the output", e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ActivitiException("Couldn't deserialize object in variable '"+valueFields.getName()+"'", e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public boolean isCachable() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public boolean isAbleToStore(Object value) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.trace("isAbleToStore value {}", value, value instanceof CustomProcVar);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (value instanceof CustomProcVar) &amp;amp;&amp;amp; (theClass.isAssignableFrom(value.getClass()));&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; @Override&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public void setValue(Object value, ValueFields valueFields) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] byteArray = serialize(value, valueFields);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; valueFields.setCachedValue(value);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (valueFields.getBytes() == null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (valueFields instanceof VariableInstanceEntity) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context.getCommandContext()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .getDbSqlSession()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .addDeserializedObject(byteArray, byteArray, (VariableInstanceEntity)valueFields);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super.setValue(byteArray, valueFields);&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Serialize.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param value the value&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param valueFields the value fields&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return the byte[]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public static byte[] serialize(Object value, ValueFields valueFields) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (value == null) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] valueBytes = jsonMapper.writeValueAsBytes(value);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return valueBytes;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (Exception e) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ActivitiException("Couldn't serialize value '"+value+"' in variable '"+valueFields.getName()+"'", e);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return the theClass&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public Class&amp;lt;?&amp;gt; getTheClass() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return theClass;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param theClass the theClass to set&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public void setTheClass(Class&amp;lt;? extends CustomProcVar&amp;gt; theClass) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.theClass = theClass;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @param typeName the typeName to set&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public void setTypeName(String typeName) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.typeName = typeName;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /** The logger. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; private Logger logger = LoggerFactory.getLogger(CustomVariableType.class);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; /**&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * @return the json mapper&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; public static ObjectMapper getJsonmapper() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return jsonMapper;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;After integrating the above code with the application, I found issues with getValue method. On further analysis of issue, I realized it is DeserializedObject class which defaults to serializing objects using default mechanism. Also, this doesn't open any extension points so that the same can be used for any custom serialization mechanism.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I wanted to bring this issue on the community so that this feature can be contributed. I am finding this to be very useful feature which every Activiti user will wish for applications deployed in production.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 28 Nov 2013 09:42:19 GMT</pubDate>
    <dc:creator>ajjain</dc:creator>
    <dc:date>2013-11-28T09:42:19Z</dc:date>
    <item>
      <title>Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170035#M123365</link>
      <description>I wished to extend Activiti's default object serialization scheme to json based serialization. This was intended to handle changes in process variable. When any change is made in any process variable structure, I had to always clean up the Activiti's database other wise it gives me deserialization i</description>
      <pubDate>Thu, 28 Nov 2013 09:42:19 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170035#M123365</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-11-28T09:42:19Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170036#M123366</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;The DeserializedObject is intended to make sure that Serializable variables are updated, when they are updated (eg. a member is set) without an explicit call to a setVariable(). So if you use the variable value in an execution-listener and call a setter on it, it will be flushed with the new values. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;However, if you're using your own mechanism for serializing, you shouldn't use the DeserializedObject. Rather, do a setVariable() call with the updated object when needed instead. Another solution may be to extend the DeserializedObject class, and override the flush() method to use YOUR logic to check if a byte-array has been changed… Pass that custom DeserializedObject to the Context.getCommandContext().getDbSqlSession().addDeserializedObject(…) instead.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Nov 2013 10:48:37 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170036#M123366</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-11-28T10:48:37Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170037#M123367</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks Frederik for comment. I will give it a try.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Do you see this new VariableType useful? I will be pleased to share this back to the community. With updating requirements in agile world, there are chances that proc variable definition may change. And this feature shall provide developer the next level of control in managing those changes. &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Nov 2013 17:34:09 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170037#M123367</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-11-28T17:34:09Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170038#M123368</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have given a thought on your opinions Frederik, below are my thoughts:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Option 1. Default serialization, this will n't work for this case, since I want to get rid of default serialization mechanism.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Option 2. Explicitly calling setVariable, this sounds out of track to me. If I understood it right you mean in event listener I have to explicitly call setVariable() right. If I do so, end user has to be careful of my new VariableType and do a special handling inside the BPMN flow. I wish to get this implemented exhactly as how default scheme is implemented.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Option 3. Extending DeserializedObject, this is exactly what I have thought of, but after analyzing code my observation was lacks extension points in DbSqlSession class. DbSqlSession.addDeserializedObject() creates an object of its own and doesn't provide user a mean to add object from outside. Also, deserializedObjects type declared marked protected and with no getters and setters, thereby another restriction. That's why I initially commented that this is not open for extension. I would suggest if we can have another overloaded method like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;java&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public void addDeserializedObject(DeserializedObject deserializedObject) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; deserializedObjects.add(deserializedObject);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/java&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This will help us in solving this issue and a very useful feature can be contributed to activiti community.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 28 Nov 2013 23:49:15 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170038#M123368</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-11-28T23:49:15Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170039#M123369</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Okay, I think I was too quick when proposing the solution about overriding the DeserializedObject. It makes sense indeed to open up the method you mentioned, to add custom deserialization-difference handling. I'll add this to the current Master, so it's included in 5.15.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Nov 2013 13:32:01 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170039#M123369</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-11-29T13:32:01Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170040#M123370</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;See &lt;/SPAN&gt;&lt;A href="https://github.com/Activiti/Activiti/commit/e127424d26307881b09fa63f0d2d7bafe0629dec" rel="nofollow noopener noreferrer"&gt;https://github.com/Activiti/Activiti/commit/e127424d26307881b09fa63f0d2d7bafe0629dec&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Nov 2013 13:34:45 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170040#M123370</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-11-29T13:34:45Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170041#M123371</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Frederik, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;How about getting JSON based serialization feature made available? &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have the code ready, I am keen to share it to the community. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://connect.hyland.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt; Every one wants to be a contributor, so is me. When the project is like Activiti, who'll want to miss a chance. &lt;img id="smileyvery-happy" class="emoticon emoticon-smileyvery-happy" src="https://connect.hyland.com/i/smilies/16x16_smiley-very-happy.png" alt="Smiley Very Happy" title="Smiley Very Happy" /&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Abhishek&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Dec 2013 09:30:16 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170041#M123371</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-12-04T09:30:16Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170042#M123372</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;If you're implementation is based on a "widely adopted standard" to create JSON, we can consider it. However, we want to keep the engine as free from external dependencies as we want, so if we could make it like an additional "plugin" or something, that whould be great.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Without saying yes or no, can you perhaps share the code you have right now?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Dec 2013 15:10:13 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170042#M123372</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-12-04T15:10:13Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170043#M123373</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;For serialization to and from JSON, I have used Jackson APIs. I fee Activiti uses the same in other modules, so including this feature does not need any other third party integration.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have uploaded the implemented code in my GISTs:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;JsonVariableType.java : &lt;/SPAN&gt;&lt;A href="https://gist.github.com/ajjain/7803027" rel="nofollow noopener noreferrer"&gt;https://gist.github.com/ajjain/7803027&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;JsonizedObject.java : &lt;/SPAN&gt;&lt;A href="https://gist.github.com/ajjain/7802924" rel="nofollow noopener noreferrer"&gt;https://gist.github.com/ajjain/7802924&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;JsonType.java : &lt;/SPAN&gt;&lt;A href="https://gist.github.com/ajjain/7803074" rel="nofollow noopener noreferrer"&gt;https://gist.github.com/ajjain/7803074&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Dec 2013 10:29:37 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170043#M123373</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-12-05T10:29:37Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170044#M123374</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Well, it actually does create additional depencencies, as the engine itself does not depend on Jackson, other modules do… I'll take a look at this asap.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Dec 2013 10:01:47 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170044#M123374</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-12-06T10:01:47Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170045#M123375</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Any updates Frederik??&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;BTW when is Activiti next release coming? &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 11 Dec 2013 05:57:18 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170045#M123375</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-12-11T05:57:18Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170046#M123376</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Frederik, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I wish to use this enhancement in my present application. When can I expect next Activiti release? In case it has more than a months time to come. Can you please suggest me how can I include this in my application without violating license.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Abhishek&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 Dec 2013 15:58:31 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170046#M123376</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-12-18T15:58:31Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170047#M123377</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Activiti is Apache 2.0 licensed. You can fork it, modify it and basically do whatever you want with it. Checkout the sources, alter what you need and build the engine-jar again (we use maven as a build-system). Ideally, your changes can be turned into a pull-request in githun, so it's easier to review than a bunch of individual files…&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Dec 2013 09:04:32 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170047#M123377</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2013-12-19T09:04:32Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170048#M123378</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;So including changes in Activiti code and building it again doesn't violate license, is that what you mean?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Dec 2013 11:37:18 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170048#M123378</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2013-12-19T11:37:18Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170049#M123379</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;That's right. Activiti is Apache licence. You can do with it what you want.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Dec 2013 11:44:49 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170049#M123379</guid>
      <dc:creator>jbarrez</dc:creator>
      <dc:date>2013-12-19T11:44:49Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170050#M123380</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Is this change &lt;/SPAN&gt;&lt;A href="https://github.com/Activiti/Activiti/commit/e127424d26307881b09fa63f0d2d7bafe0629dec" rel="nofollow noopener noreferrer"&gt;https://github.com/Activiti/Activiti/commit/e127424d26307881b09fa63f0d2d7bafe0629dec&lt;/A&gt;&lt;SPAN&gt; targeted to be released with 5.15 branch on this 15th Jan?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Currently we are on 5.13 branch and are blocked on this change. Shall we wait or pull our changes on 5.13 and move ahead? BTW I have added my changes on top of 5.13 @ &lt;/SPAN&gt;&lt;A href="https://github.com/ajjain/Activiti/commit/d482372d17865a5c341332372154375eea99de1a" rel="nofollow noopener noreferrer"&gt;https://github.com/ajjain/Activiti/commit/d482372d17865a5c341332372154375eea99de1a&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 02 Jan 2014 07:43:51 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170050#M123380</guid>
      <dc:creator>ajjain</dc:creator>
      <dc:date>2014-01-02T07:43:51Z</dc:date>
    </item>
    <item>
      <title>Re: Custom serialization of complex process variable</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170051#M123381</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;This will be released as part of the 5.15 release. The master on git represent the current release snapshot and will be used to base the final 5.* release on, when the time for release arrives…&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Jan 2014 12:10:38 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/custom-serialization-of-complex-process-variable/m-p/170051#M123381</guid>
      <dc:creator>frederikherema1</dc:creator>
      <dc:date>2014-01-06T12:10:38Z</dc:date>
    </item>
  </channel>
</rss>

