Hi Gary,
Yes, it is possible. I think this example can help you:
https://github.com/Salaboy/Drools_jBPM5-Training-Examples/blob/master/jbpm5/04-jBPM5-PersistentEmergencyServiceProcess/
You can check that the process
https://github.com/Salaboy/Drools_jBPM5-Training-Examples/blob/master/jbpm5/04-jBPM5-PersistentEmergencyServiceProcess/src/test/resources/EmergencyServiceTracking.bpmn
contains complex variables.
Basically, you have to:
1) Declare de variable type:
<itemDefinition id="_emergencyItem" structureRef="com.wordpress.salaboy.example.model.Emergency"/>
2) Declare the variable:
<property id="emergency" itemSubjectRef="_emergencyItem"/>
3)
Declare the variable as input (or output) in the task:
<userTask id="_2" name="Ask for Emergency Information">
<ioSpecification>
<dataInput id="_2_emergencyInput" name="emergency"/>
....
....
<inputSet>
<dataInputRefs>_2_emergencyInput</dataInputRefs>
....
</inputSet>
<outputSet>
...
</outputSet>
</ioSpecification>
<dataInputAssociation>
<sourceRef>emergency</sourceRef>
<targetRef>_2_emergencyInput</targetRef>
</dataInputAssociation>
</userTask>
4) Send it as parameter in the process, or as an output of another task.
Hope it helps.
Demian