I try to create process instance initialized with a process variable that is a custom type (a Java bean containing collections to transmit to a service task for example ). The variable is declared into the BPMN as a DataObject to reference my custom type. It seems that it is not possible to create such a process instance ?
Can you confirm that only primitive types (string, date, boolean, double, int, long) are supported for DataObject, as mentioned in Flowable documentation §8.9 and in source code ?
If needed can you drive me to write a contribution to add a new supported type for DataObject. As the type defined for the DataObject is based on XSD, perhaps wan we use JaxB on the fly to support custom types ?
Looking at that code, it seems indeed that only primitives are supported currently.
Adding jaxb as a core engine dependency is not something that we’d want to do (it brings in all kind of issue on various platforms). Is there another way of supporting it without jaxb?
Instead of having a java bean, wouldn’t a JSON variable make more sense here and be more flexible?
Using JaxB was a proposal. In fact, a simple JavaBean object should be sufficient. The JaxB unmarshalling (XML --> JavaBean) part will be into my application embedding the Flowable engine.
What do you mean by JSON variable mainly in a Java point of view for implemention ?
Can you tell me how is stored a dataobject into the Flowable database, perhaps this has impacts on java beans that can be used ?
Hi @cdeneux, I saw i never responded to your follow-up question, apologies.
I was referring to the fact you were using beans to work with collections. As such, putting these collections in a json variable would maybe be a more suitable way (but of course, not sure about your use case).
I’m working to a contribution to the webservice task to support structured variables. With this, we can easily assigned object list from Flowable variables to SOAP request elements.
As you mentionned below, I used the type “json” for structured variables. Json variables are converted into XML for the outgoing SOAP Request. This way works fine now.
In the other way, incoming SOAP reply, I wish to be able to map an object list of the SOAP reply to a Flowable variable. I thought to convert the XML part in JSON. But it seems it’s not so easily because the Flowable variable that holds JSON value must be declared as a DataObject, and Json is not a type supported by DataObject. Moreover, which value to set in itemSubjectRef to define the type ‘json’ for a DataObject. Perhaps can we use the JavaBean types generated on-the-fly by flowable-cxf according to the service WSDL.
Can you give me your opinion to drive me on the best way ?
After several tries, it seems to me to have resulted in a simple solution.
I introduced a hack at data object type definition: the type xsd:json will force the Json type for data objects. And at the level of the data output association transformation, if the value returned by the service is a Java bean, we try to position the variable as json.
Is it acceptable for you ?
If existing, can you give me some inputs to add unit tests about the processing of data output association transformations ? I’m not be able to find such existing unit tests in module flowable-engine.