Connector CMIS – List documents error

1
0
-1

Hi,

I’m using Bonita Community 2021.1 with openjdk-11.0.2 and I’m trying to integrate it with Alfresco Community - 7.1.0. I’ve updated cmis connectors to the last version, 3.0.5.

I’m able to create a folder and upload files, but I cannot list files from an existing folder. I get the following error message:

Caused by: org.bonitasoft.engine.core.operation.exception.SOperationExecutionException: Document operation only accepts an expression returning a list of DocumentValue

at org.bonitasoft.engine.core.document.api.impl.DocumentHelper.toCheckedList(DocumentHelper.java:329)

at org.bonitasoft.engine.operation.DocumentListLeftOperandHandler.update(DocumentListLeftOperandHandler.java:53)

at org.bonitasoft.engine.core.operation.impl.OperationServiceImpl.updateLeftOperands(OperationServiceImpl.java:159)

at org.bonitasoft.engine.core.operation.impl.OperationServiceImpl.execute(OperationServiceImpl.java:101)

at org.bonitasoft.engine.core.connector.impl.ConnectorServiceImpl.executeOutputOperation(ConnectorServiceImpl.java:208)

In my pool, I've created a document variable and enabled the multiple type. I used the variable to save the output of the List Documents cmis connector, function “set document list”.

Finally, testing the connector I get this exception:

java.lang.reflect.InvocationTargetException
java.lang.reflect.UndeclaredThrowableException
java.io.IOException: Error while executing POST request (http code: 500)
org.apache.http.client.HttpResponseException: status code: 500

Thanks for your help,

JFC

2 answers

1
+1
-1
This one is the BEST answer!

Hi,

The List documents connector returns a List of org.apache.chemistry.opencmis.client.api.CmisObject Looking the javadoc for this object, it doesn't seem that it returns the document content. It is just to list them (with their properties).

You may want to use it in combination of Download document connector.

HTH
Romain

Comments

Submitted by jordifc on Mon, 08/09/2021 - 18:05

Hi Romain,

Thank you for you answer.
Following your directions, I've created a process variable (multiple) of type Java Object, selecting the class org.apache.chemistry.opencmis.api.CmisObject. And I stored the result of the connector with "Takes value of", but still it's not working.

I've also tried with the class org.bonitasoft.engine.bpm.document.DocumentValue as the firs error was, Document operation only accepts an expression returning a list of DocumentValue, but not working either.

I will fully appreciate if you could give me some more guidelines. I'm not sure if this is the way.

Many thanks,

JFC

(*) Edited to add logs:

09-Aug-2021 17:48:30.238 GRAVE [ConnectorExecutor-1] org.bonitasoft.engine.log.technical.TechnicalLoggerSLF4JImpl.log THREAD_ID=151 | HOSTNAME=LAPTOP-5U | TENANT_ID=1 | The work [ExecuteConnectorOfActivity: flowNodeInstanceId = 20003, connectorDefinitionName = listFolder] failed. The failure will be handled.
09-Aug-2021 17:48:30.266 GRAVE [ConnectorExecutor-1] org.bonitasoft.engine.log.technical.TechnicalLoggerSLF4JImpl.log THREAD_ID=151 | HOSTNAME=LAPTOP-5U | TENANT_ID=1 | org.bonitasoft.engine.core.connector.exception.SConnectorException : "PROCESS_DEFINITION_ID=6073184191200664436 | PROCESS_NAME=ECM-FileList | PROCESS_VERSION=1.0 | PROCESS_INSTANCE_ID=1001 | ROOT_PROCESS_INSTANCE_ID=1001 | FLOW_NODE_DEFINITION_ID=7996447255185126912 | FLOW_NODE_INSTANCE_ID=20003 | FLOW_NODE_NAME=get files from folder | CONNECTOR_IMPLEMENTATION_CLASS_NAME=listFolder | CONNECTOR_INSTANCE_ID=20001 | org.bonitasoft.engine.core.operation.exception.SOperationExecutionException: org.bonitasoft.engine.data.instance.exception.SUpdateDataInstanceException: Impossible to update data instance 'folderFiles': org.bonitasoft.engine.services.SPersistenceException: Problem while updating entity: SXMLObjectDataInstance(value=[]) with id: 5003"
org.bonitasoft.engine.core.connector.exception.SConnectorException: PROCESS_DEFINITION_ID=6073184191200664436 | PROCESS_NAME=ECM-FileList | PROCESS_VERSION=1.0 | PROCESS_INSTANCE_ID=1001 | ROOT_PROCESS_INSTANCE_ID=1001 | FLOW_NODE_DEFINITION_ID=7996447255185126912 | FLOW_NODE_INSTANCE_ID=20003 | FLOW_NODE_NAME=get files from folder | CONNECTOR_IMPLEMENTATION_CLASS_NAME=listFolder | CONNECTOR_INSTANCE_ID=20001 | org.bonitasoft.engine.core.operation.exception.SOperationExecutionException: org.bonitasoft.engine.data.instance.exception.SUpdateDataInstanceException: Impossible to update data instance 'folderFiles': org.bonitasoft.engine.services.SPersistenceException: Problem while updating entity: SXMLObjectDataInstance(value=[]) with id: 5003
at org.bonitasoft.engine.core.connector.impl.ConnectorServiceImpl.executeOutputOperation(ConnectorServiceImpl.java:211)
at org.bonitasoft.engine.connector.ConnectorServiceDecorator.executeOutputOperation(ConnectorServiceDecorator.java:119)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork.evaluateOutput(ExecuteConnectorWork.java:127)
at org.bonitasoft.engine.execution.work.ExecuteConnectorOfActivity.evaluateOutput(ExecuteConnectorOfActivity.java:75)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork.lambda$executeOutputOperationsAndContinue$1(ExecuteConnectorWork.java:190)
at org.bonitasoft.engine.transaction.JTATransactionServiceImpl.executeInTransaction(JTATransactionServiceImpl.java:261)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork.executeOutputOperationsAndContinue(ExecuteConnectorWork.java:189)
at org.bonitasoft.engine.execution.work.ExecuteConnectorWork.lambda$work$0(ExecuteConnectorWork.java:157)
at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.postComplete(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.bonitasoft.engine.core.operation.exception.SOperationExecutionException: org.bonitasoft.engine.data.instance.exception.SUpdateDataInstanceException: Impossible to update data instance 'folderFiles': org.bonitasoft.engine.services.SPersistenceException: Problem while updating entity: SXMLObjectDataInstance(value=[]) with id: 5003
at org.bonitasoft.engine.operation.DataLeftOperandHandler.updateDataInstance(DataLeftOperandHandler.java:106)
at org.bonitasoft.engine.operation.DataLeftOperandHandler.update(DataLeftOperandHandler.java:59)
at org.bonitasoft.engine.core.operation.impl.OperationServiceImpl.updateLeftOperands(OperationServiceImpl.java:159)
at org.bonitasoft.engine.core.operation.impl.OperationServiceImpl.execute(OperationServiceImpl.java:101)
at org.bonitasoft.engine.core.connector.impl.ConnectorServiceImpl.executeOutputOperation(ConnectorServiceImpl.java:208)
... 13 more
Caused by: org.bonitasoft.engine.data.instance.exception.SUpdateDataInstanceException: Impossible to update data instance 'folderFiles': org.bonitasoft.engine.services.SPersistenceException: Problem while updating entity: SXMLObjectDataInstance(value=[]) with id: 5003
at org.bonitasoft.engine.data.instance.api.impl.DataInstanceServiceImpl.updateDataInstance(DataInstanceServiceImpl.java:535)
at org.bonitasoft.engine.operation.DataLeftOperandHandler.update(DataLeftOperandHandler.java:67)
at org.bonitasoft.engine.operation.DataLeftOperandHandler.updateDataInstance(DataLeftOperandHandler.java:104)
... 17 more
Caused by: org.bonitasoft.engine.recorder.SRecorderException: org.bonitasoft.engine.services.SPersistenceException: Problem while updating entity: SXMLObjectDataInstance(value=[]) with id: 5003
at org.bonitasoft.engine.recorder.impl.RecorderImpl.recordUpdate(RecorderImpl.java:116)
at org.bonitasoft.engine.data.instance.api.impl.DataInstanceServiceImpl.updateDataInstance(DataInstanceServiceImpl.java:532)
... 19 more
Caused by: org.bonitasoft.engine.services.SPersistenceException: Problem while updating entity: SXMLObjectDataInstance(value=[]) with id: 5003
at org.bonitasoft.engine.persistence.AbstractHibernatePersistenceService.setField(AbstractHibernatePersistenceService.java:253)
at org.bonitasoft.engine.persistence.AbstractHibernatePersistenceService.update(AbstractHibernatePersistenceService.java:242)
at org.bonitasoft.engine.recorder.impl.RecorderImpl.recordUpdate(RecorderImpl.java:112)
... 20 more
Caused by: org.bonitasoft.engine.commons.exceptions.SReflectException: java.lang.reflect.InvocationTargetException
at org.bonitasoft.engine.commons.ClassReflector.invokeMethodByName(ClassReflector.java:202)
at org.bonitasoft.engine.commons.ClassReflector.setField(ClassReflector.java:353)
at org.bonitasoft.engine.persistence.AbstractHibernatePersistenceService.setField(AbstractHibernatePersistenceService.java:251)
... 22 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.bonitasoft.engine.commons.ClassReflector.invokeMethodByName(ClassReflector.java:200)
... 24 more
Caused by: java.lang.NoClassDefFoundError: javax/xml/ws/handler/HandlerResolver
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.base/java.lang.Class.getDeclaredMethod(Unknown Source)
at com.thoughtworks.xstream.core.util.SerializationMembers.getMethod(SerializationMembers.java:183)
at com.thoughtworks.xstream.core.util.SerializationMembers.getMethod(SerializationMembers.java:188)
at com.thoughtworks.xstream.core.util.SerializationMembers.getMethod(SerializationMembers.java:168)
at com.thoughtworks.xstream.core.util.SerializationMembers.getRRMethod(SerializationMembers.java:199)
at com.thoughtworks.xstream.core.util.SerializationMembers.callWriteReplace(SerializationMembers.java:97)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:78)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:87)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeBareItem(AbstractCollectionConverter.java:94)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:66)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeCompleteItem(AbstractCollectionConverter.java:81)
at com.thoughtworks.xstream.converters.collections.MapConverter.marshal(MapConverter.java:79)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:83)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:270)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:174)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:262)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:90)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:83)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:270)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:174)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:262)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:90)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:83)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:270)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:174)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:262)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:90)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:83)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:270)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:174)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:262)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:90)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:87)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeBareItem(AbstractCollectionConverter.java:94)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:66)
at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeCompleteItem(AbstractCollectionConverter.java:81)
at com.thoughtworks.xstream.converters.collections.CollectionConverter.marshal(CollectionConverter.java:74)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:82)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:37)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:1250)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:1239)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:1212)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:1199)
at org.bonitasoft.engine.data.instance.model.SXMLObjectDataInstance.convert(SXMLObjectDataInstance.java:61)
at org.bonitasoft.engine.data.instance.model.SXMLObjectDataInstance.setValue(SXMLObjectDataInstance.java:57)
... 29 more
Caused by: java.lang.ClassNotFoundException: javax.xml.ws.handler.HandlerResolver
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1358)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1180)
at org.bonitasoft.engine.classloader.VirtualClassLoader.loadClass(VirtualClassLoader.java:105)
at org.bonitasoft.engine.classloader.BonitaClassLoader.loadClass(BonitaClassLoader.java:175)
at org.bonitasoft.engine.classloader.VirtualClassLoader.loadClass(VirtualClassLoader.java:102)
at org.bonitasoft.engine.classloader.BonitaClassLoader.loadClass(BonitaClassLoader.java:175)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 93 more
Submitted by romain.bioteau on Tue, 08/10/2021 - 09:29

What do you want to achieve ?

The document connector takes a file path on the document server as input. So if you "just" want to download files, you don't to use the List documents connector.

If you want to display a folder content in a UI, then you must transform the returned CmisObject into a lighter and serializable data structure.

This transformation occurs in the connector output operation. Something like this (not tested !)

Given a process data folderFiles of type java.util.List and the List documents connector output folder_documents:

folder_documents.collect {
  [
    id:it.id,
    fileName:it.name,
    description:it.description,
    createdBy:it.createdBy
   // You may add other fields that fit your needs and are available on a CmisObject
  ]
} // This returns a List<Map<String,String>>

HTH
Romain

Submitted by jordifc on Tue, 08/10/2021 - 23:15

Hi Romain,

Thank you for your time and patience helping a newbie at Bonita. Many things to learn…

The scenario is a process to upload files related to an entity, and a second process with and step where I need to visually check which files are currently associated with a specific entity.

I finally got it. It works like a charm!

Thanks again,

JFC

1
0
-1

hello this is what i try to do but don't know how to access content

and transform the result to List

def listDocs = folder_documents.collect {
[
new DocumentValue("example".getBytes(), "application/pdf", it.name)//Internal
]
}

return listDocs;

Notifications