VMware Cloud Community
dcoulter
Enthusiast
Enthusiast

Calling vCO 5.1 workflow via REST/XML - issue with Array/Array parameter

Hello, I'm running into an issue trying invoke a vCO workflow via REST when passing a parameter that is an Array of Arrays.  Below is the Array/Array variable definition as retrieved via GET request of a workflow execution of the target workflow (per Burke's article: How to use the REST API to Start a Workflow).

<parameter scope="local" name="ownerContactFields" type="Array/Array">

<array>

<array>

<string>val1</string>

<string>val2</string>

</array>

<array>

<string>val1</string>

<string>val2</string>

</array>

</array>

</parameter>

Below is the exception encountered in the vCO server log.  Are complex types (array of array/string) not supported through REST?

java.lang.RuntimeException: cannot convert value of ownerContactFields to decrypt it

        at ch.dunes.model.workflow.XmlWorkflowTokenAttributeWriter.appendAttribute(XmlWorkflowTokenAttributeWriter.java:98)

        at ch.dunes.model.workflow.XmlWorkflowTokenAttributeWriter.appendAttributeStack(XmlWorkflowTokenAttributeWriter.java:82)

        at ch.dunes.model.workflow.XmlWorkflowTokenAttributeWriter.getXmlContentFromAttributeStacks(XmlWorkflowTokenAttributeWriter.java:51)

        at ch.dunes.model.workflow.WorkflowTokenContent.getEncryptedXmlAttributeStacks(WorkflowTokenContent.java:76)

        at com.vmware.o11n.service.domain.VmoWorkflowtokencontent.fromModel(VmoWorkflowtokencontent.java:54)

        at com.vmware.o11n.service.impl.WorkflowRuntimeServiceImpl.insertWorkflowToken(WorkflowRuntimeServiceImpl.java:318)

        at sun.reflect.GeneratedMethodAccessor5998.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

        at sun.proxy.$Proxy185.insertWorkflowToken(Unknown Source)

        at com.vmware.o11n.service.factory.VcoFactoryFacade.insertWorkflowToken(VcoFactoryFacade.java:1012)

        at sun.reflect.GeneratedMethodAccessor29928.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

        at com.vmware.o11n.service.security.AccessRightsInterceptor.invoke(AccessRightsInterceptor.java:92)

        at com.vmware.o11n.service.security.AccessRightsInterceptor.invoke(AccessRightsInterceptor.java:81)

        at com.vmware.o11n.service.factory.LocalVSOFactoryInvocationHandler.invokeOperation(LocalVSOFactoryInvocationHandler.java:212)

        at com.vmware.o11n.service.factory.LocalVSOFactoryInvocationHandler.doInvoke(LocalVSOFactoryInvocationHandler.java:255)

        at com.vmware.o11n.service.factory.LocalVSOFactoryInvocationHandler.invoke(LocalVSOFactoryInvocationHandler.java:141)

        at sun.proxy.$Proxy241.insertWorkflowToken(Unknown Source)

        at ch.dunes.model.client.VSOFactoryClient.insertWorkflowToken(VSOFactoryClient.java:1621)

        at ch.dunes.workflow.engine.mbean.WorkflowEngine.executeNewWorkflow(WorkflowEngine.java:528)

        at ch.dunes.workflow.engine.mbean.WorkflowEngine.executeNewWorkflow(WorkflowEngine.java:158)

        at com.vmware.o11n.service.impl.WorkflowRuntimeServiceImpl$1.executeAs(WorkflowRuntimeServiceImpl.java:174)

        at com.vmware.o11n.service.impl.WorkflowRuntimeServiceImpl$1.executeAs(WorkflowRuntimeServiceImpl.java:167)

        at com.vmware.o11n.service.impl.WorkflowRuntimeServiceImpl.extecuteAs(WorkflowRuntimeServiceImpl.java:220)

        at com.vmware.o11n.service.impl.WorkflowRuntimeServiceImpl.doExecuteWorkflow(WorkflowRuntimeServiceImpl.java:167)

        at com.vmware.o11n.service.impl.WorkflowRuntimeServiceImpl.executeWorkflow(WorkflowRuntimeServiceImpl.java:140)

        at sun.reflect.GeneratedMethodAccessor9854.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)

        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)

        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

        at sun.proxy.$Proxy185.executeWorkflow(Unknown Source)

        at com.vmware.o11n.service.factory.VcoFactoryFacade.executeWorkflow(VcoFactoryFacade.java:976)

        at sun.reflect.GeneratedMethodAccessor30005.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

        at com.vmware.o11n.service.security.AccessRightsInterceptor.invoke(AccessRightsInterceptor.java:92)

        at com.vmware.o11n.service.security.AccessRightsInterceptor.invoke(AccessRightsInterceptor.java:81)

        at com.vmware.o11n.service.factory.LocalVSOFactoryInvocationHandler.invokeOperation(LocalVSOFactoryInvocationHandler.java:212)

        at com.vmware.o11n.service.factory.LocalVSOFactoryInvocationHandler.doInvoke(LocalVSOFactoryInvocationHandler.java:255)

        at com.vmware.o11n.service.factory.LocalVSOFactoryInvocationHandler.invoke(LocalVSOFactoryInvocationHandler.java:141)

        at sun.proxy.$Proxy317.executeWorkflow(Unknown Source)

        at ch.dunes.model.client.VSOFactoryClient.executeWorkflow(VSOFactoryClient.java:1557)

        at com.vmware.o11n.sdk.workflow.WorkflowServiceImpl.createWorkflowExecution(WorkflowServiceImpl.java:78)

        at com.vmware.o11n.web.workflow.ExecutionController.startWorkflowExecution(ExecutionController.java:268)

        at sun.reflect.GeneratedMethodAccessor12765.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

        at java.lang.reflect.Method.invoke(Unknown Source)

        at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)

        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)

        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)

        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)

        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)

        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)

        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)

        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)

        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)

        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

        at org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal(ShallowEtagHeaderFilter.java:58)

        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)

        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)

        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:144)

        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)

        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)

        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)

        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)

        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)

        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524)

        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)

        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)

        at java.lang.Thread.run(Unknown Source)

Caused by: ch.dunes.model.type.ConvertorException: Array value has invalid format

        at ch.dunes.model.workflow.WorkflowTokenHelper.processArraySensitiveValue(WorkflowTokenHelper.java:165)

        at ch.dunes.model.workflow.WorkflowTokenHelper.processSensitiveValue(WorkflowTokenHelper.java:107)

        at ch.dunes.model.workflow.WorkflowTokenHelper.processArraySensitiveValue(WorkflowTokenHelper.java:170)

        at ch.dunes.model.workflow.WorkflowTokenHelper.processSensitiveValue(WorkflowTokenHelper.java:107)

        at ch.dunes.model.workflow.WorkflowTokenHelper.processArraySensitiveValue(WorkflowTokenHelper.java:170)

        at ch.dunes.model.workflow.WorkflowTokenHelper.processSensitiveValue(WorkflowTokenHelper.java:107)

        at ch.dunes.model.workflow.WorkflowTokenHelper.encryptSensitiveValues(WorkflowTokenHelper.java:83)

        at ch.dunes.model.workflow.XmlWorkflowTokenAttributeWriter.appendAttribute(XmlWorkflowTokenAttributeWriter.java:96)

        ... 120 more

Tags (4)
Reply
0 Kudos
4 Replies
iiliev
VMware Employee
VMware Employee

I think 'array of array of something' parameters are not supported not only in REST, but also in all other places, like Workflow designer for example.

How did you create this workflow? Are you sure that the parameter is 'array of array of string'? Could it be 'array of Any'? If possible, could you attach the workflow, to take a look?

Reply
0 Kudos
dcoulter
Enthusiast
Enthusiast

It's easy to reproduce from the workflow perspective - I just created an empty workflow and added an input parameter of array/array.

The tricky part is to run the workflow in order to generate the workflow execution (for reference of API syntax on how to pass array/array). For this I created another workflow to start the original workflow and pass an array of array string (since vCO workflow presentation doesn't allow for inputting array/array values other than null). I can upload this code if you need it.

Thanks,

David

Reply
0 Kudos
iiliev
VMware Employee
VMware Employee

I tried invoking the workflow via REST API, using the following request body:

<?xml version="1.0"?>

<execution-context xmlns="http://www.vmware.com/vco">

  <parameters>

    <parameter type="Array/Array" name="arg_in_0" scope="local">

      <array>

        <array>

          <string>one1</string>

          <string>two2</string>

        </array>

        <array>

          <string>three3</string>

          <string>four4</string>

        </array>

      </array>

    </parameter>

  </parameters>

</execution-context>

and also tried asynchronously invoking the workflow as element in another workflow (getting the value for the input array/array parameter from a workflow attribute).

Both invocations succeeded. Note I tried this on 5.5 as my 5.1 environment is not working at the moment.

If you have access to 5.5 setup, could you try your workflow on it?

dcoulter
Enthusiast
Enthusiast

Just confirmed - works under 5.5, fails under 5.1.

Reply
0 Kudos