Full documentation of API Rest in BPM Suite 6.0.3

Latest response

Hi,

We are evaluating the product, and in particular the API Rest calls.

We have done many test in mortgages example, and we have many questions about the API:
1) We need to know the operations and the xml model to make all requests (input and output XML or JSON).
2) It´s possible to work directly with JSON in all requests to REST API?
3) In mortgages example we have the below code (KIES API) to create process instance/assign appraisal task, and complete task:

        RemoteRestRuntimeEngineFactory remoteRestRuntimeEngineFactory =
                RemoteRestRuntimeEngineFactory.newBuilder()
                .addDeploymentId("com.redhat.bpms.examples:mortgage:1")
                .addUrl(new URL("http://localhost:8080/business-central"))
                .addUserName("hank")
                .addPassword("12345678")
                .addTimeout(10000)
                .build();
        RemoteRuntimeEngine engine = remoteRestRuntimeEngineFactory.newRuntimeEngine();
                KieSession ksession = engine.getKieSession();

        ProcessInstance processInstance = ksession.startProcess("com.redhat.bpms.examples.mortgage.MortgageApplication", getProcessArgs( "Carlos", "Direccion", 333224449, 100000, 500000, 100000, 30 ));
        int task = 1;
        taskService.claim(task, "hank");
        taskService.start(task, "hank");
        Map<String,Object> app = taskService.getTaskContent(task);
        Application application = null;
        for (String key: app.keySet()){
            if (app.get(key) instanceof Application){
                application = (Application)app.get(key);
                System.out.println("Entrada: " + ToStringBuilder.reflectionToString(application));
                application.setAppraisal(new Appraisal(application.getProperty(), new Date(), 20));     
            }
        }
        Map<String,Object> appra = new HashMap<String, Object>();
        appra.put( "application", application );
        System.out.println("Antes de envio: " + appra);
        taskService.complete(task, "hank", app);
....
    private static Map<String, Object> getProcessArgs(String name, String address, int ssn, int income, int price, int downPayment, int amortization)
    {
        Map<String, Object> processVariables = new HashMap<String, Object>();
        Applicant applicant = new Applicant( name, ssn, income, null );
        Property property = new Property( address, price );
        Application application = new Application( applicant, property, null, downPayment, amortization, null, null, null );
        processVariables.put( "application", application );
        return processVariables;
    }

And the proccess returns with the following error:

Exception in thread "main" org.kie.services.client.api.command.exception.RemoteApiException: NullPointerException thrown with message 'null':
org.jbpm.workflow.instance.WorkflowRuntimeException: [com.redhat.bpms.examples.mortgage.MortgageApplication:2 - Appraisal:19] -- null
    at org.jbpm.workflow.instance.impl.NodeInstanceImpl.executeAction(NodeInstanceImpl.java:188)
    at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerEvent(ExtendedNodeInstanceImpl.java:56)
    at org.jbpm.workflow.instance.impl.ExtendedNodeInstanceImpl.triggerCompleted(ExtendedNodeInstanceImpl.java:43)
    at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:290)
    at org.jbpm.workflow.instance.node.StateBasedNodeInstance.triggerCompleted(StateBasedNodeInstance.java:269)
    at org.jbpm.workflow.instance.node.WorkItemNodeInstance.triggerCompleted(WorkItemNodeInstance.java:279)
    at org.jbpm.workflow.instance.node.HumanTaskNodeInstance.triggerCompleted(HumanTaskNodeInstance.java:93)
    at org.jbpm.workflow.instance.node.WorkItemNodeInstance.workItemCompleted(WorkItemNodeInstance.java:341)
    at org.jbpm.workflow.instance.node.WorkItemNodeInstance.signalEvent(WorkItemNodeInstance.java:317)
    at org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.signalEvent(WorkflowProcessInstanceImpl.java:404)
    at org.drools.persistence.jpa.processinstance.JPAWorkItemManager.completeWorkItem(JPAWorkItemManager.java:134)
    at org.drools.core.command.runtime.process.CompleteWorkItemCommand.execute(CompleteWorkItemCommand.java:74)
    at org.drools.core.command.runtime.process.CompleteWorkItemCommand.execute(CompleteWorkItemCommand.java:35)
    at org.drools.core.command.impl.DefaultCommandService.execute(DefaultCommandService.java:36)
    at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41)
    at org.drools.persistence.SingleSessionCommandService$TransactionInterceptor.execute(SingleSessionCommandService.java:533)
    at org.drools.persistence.SingleSessionCommandService.execute(SingleSessionCommandService.java:377)
    at org.drools.core.command.impl.CommandBasedStatefulKnowledgeSession$1.completeWorkItem(CommandBasedStatefulKnowledgeSession.java:147)
    at org.jbpm.services.task.wih.ExternalTaskEventListener.processTaskState(ExternalTaskEventListener.java:75)
    at org.jbpm.services.task.wih.ExternalTaskEventListener.afterTaskCompletedEvent(ExternalTaskEventListener.java:119)
    at org.jbpm.services.task.events.TaskEventSupport.fireAfterTaskCompleted(TaskEventSupport.java:189)
    at org.jbpm.services.task.internals.lifecycle.MVELLifeCycleManager.taskOperation(MVELLifeCycleManager.java:340)
    at org.jbpm.services.task.identity.UserGroupLifeCycleManagerDecorator.taskOperation(UserGroupLifeCycleManagerDecorator.java:46)
    at org.jbpm.services.task.impl.TaskInstanceServiceImpl.complete(TaskInstanceServiceImpl.java:142)
    at org.jbpm.services.task.commands.CompleteTaskCommand.execute(CompleteTaskCommand.java:70)
    at org.jbpm.services.task.commands.CompleteTaskCommand.execute(CompleteTaskCommand.java:37)
    at org.jbpm.services.task.commands.CompositeCommand.execute(CompositeCommand.java:38)
    at org.jbpm.services.task.commands.TaskCommandExecutorImpl$SelfExecutionCommandService.execute(TaskCommandExecutorImpl.java:65)
    at org.drools.core.command.impl.AbstractInterceptor.executeNext(AbstractInterceptor.java:41)
    at org.jbpm.services.task.persistence.TaskTransactionInterceptor.execute(TaskTransactionInterceptor.java:54)
    at org.jbpm.services.task.commands.TaskCommandExecutorImpl.execute(TaskCommandExecutorImpl.java:40)
    at org.jbpm.services.task.impl.command.CommandBasedTaskService.execute(CommandBasedTaskService.java:128)
    at org.kie.remote.services.cdi.ProcessRequestBean.doTaskOperation(ProcessRequestBean.java:249)
    at org.kie.remote.services.cdi.ProcessRequestBean.processCommand(ProcessRequestBean.java:121)
    at org.kie.remote.services.cdi.ProcessRequestBean$Proxy$_$$_WeldClientProxy.processCommand(ProcessRequestBean$Proxy$_$$_WeldClientProxy.java)
    at org.kie.remote.services.rest.ResourceBase.restProcessJaxbCommandsRequest(ResourceBase.java:69)
    at org.kie.remote.services.rest.RuntimeResource.execute(RuntimeResource.java:95)
    at org.kie.remote.services.rest.RuntimeResource$Proxy$_$$_WeldClientProxy.execute(RuntimeResource$Proxy$_$$_WeldClientProxy.java)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:167)
    at org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)
    at org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:216)
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:542)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:524)
    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.kie.remote.services.rest.jaxb.DynamicJaxbContextFilter.doFilter(DynamicJaxbContextFilter.java:29)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.jbpm.designer.web.filter.impl.PluggableFilter.doFilter(PluggableFilter.java:70)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.uberfire.security.server.UberFireSecurityFilter.doFilter(UberFireSecurityFilter.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:407)
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
    at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
    at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:408)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at com.redhat.bpms.examples.mortgage.Process_com$u46$redhat$u46$bpms$u46$examples$u46$mortgage$u46$MortgageApplication1671723260.action24(Process_com$u46$redhat$u46$bpms$u46$examples$u46$mortgage$u46$MortgageApplication1671723260.java:161)
    at com.redhat.bpms.examples.mortgage.Process_com$u46$redhat$u46$bpms$u46$examples$u46$mortgage$u46$MortgageApplication1671723260Action24Invoker.execute(Process_com$u46$redhat$u46$bpms$u46$examples$u46$mortgage$u46$MortgageApplication1671723260Action24Invoker.java:15)
    at org.jbpm.workflow.instance.impl.NodeInstanceImpl.executeAction(NodeInstanceImpl.java:182)
    ... 84 more

    at org.kie.services.client.api.command.AbstractRemoteCommandObject.executeRestCommand(AbstractRemoteCommandObject.java:442)
    at org.kie.services.client.api.command.AbstractRemoteCommandObject.execute(AbstractRemoteCommandObject.java:124)
    at org.jbpm.services.task.impl.command.CommandBasedTaskService.complete(CommandBasedTaskService.java:144)
    at com.redhat.demo.RestClient.BPMRestClient.main(BPMRestClient.java:117)

We don´t know if the code is correct, because the error statcktrace is not clearly. We also made the same request via http requests with the same error. In BPM Appraisal form, wen don´t
have any problems to asign/complete the task.

Please, May you respond this questions? We need to evaluate the complete process from Rest API calls.

Thanks,

Carlos León
BBVA

Responses