使用自定义流程变量启动JBPM流程中的问题

时间:2019-08-01 07:17:13

标签: jbpm

我已经在JBPM中创建了具有规则和人工任务的业务流程的工作流。工作流接受过程变量,该变量是客户对象(类名Quote)。如果我使用Kie Workbech启动工作流程,则可以正常工作,但是当我尝试从Client API的REST API启动流程时,会向我发送错误消息

“”“请求URI时出现意外的HTTP响应代码

'http://localhost:8080/kie-server/services/rest/server/containers/QuoteManagedRules_1.0.0-SNAPSHOT/processes/QuoteManagedRules.quoteManagedRules/instances'!

  

错误代码:500,消息:\“无法创建响应:   [QuoteManagedRules.quoteManagedRules:181-收到的报价:7]-   无法将java.util.LinkedHashMap强制转换为   com.myspace.quotemanagedrules.QuoteDto \“”,“

我尝试调试并发现它不是自定义对象,如果我使用String或任何其他文字,则可以正常工作,但将过程变量用作Object,则显示错误

public static final String SERVER_URL="http://localhost:8080/kie-server/services/rest/server";
public static final String LOGIN="wbadmin";
public static final String PASSWORD="wbadmin";
public static final String CONTAINER="QuoteManagedRules_1.0.0-SNAPSHOT";
public static final String processId="QuoteManagedRules.quoteManagedRules";


public static void startProcess() {

    //Client configuration setup
    KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(SERVER_URL, LOGIN, PASSWORD);

    //Add custom classes, such as Obj.class, to the configuration
    Set<Class<?>> extraClassList = new HashSet<Class<?>>();
    extraClassList.add(QuoteDto.class);
    config.addExtraClasses(extraClassList);
    config.setMarshallingFormat(MarshallingFormat.JSON);

    // ProcessServicesClient setup
    KieServicesClient client = KieServicesFactory.newKieServicesClient(config);
    ProcessServicesClient processServicesClient = client.getServicesClient(ProcessServicesClient.class);

    // Create an instance of the custom class
    QuoteDto obj = new QuoteDto();
    obj.setAccountId("1");
    obj.setCorrelationId("1");
    obj.setId("12");
    obj.setOppurtunityId("123");
    obj.setOppurtunityName("sattu");
    obj.setPrice(123);
    obj.setRevision(12);
    obj.setVersion("12");

    Map<String, Object> variables   = new HashMap<String, Object>();
    variables.put("quote", obj);


    // Start the process with custom class
    processServicesClient.startProcess(CONTAINER, processId, variables);
}

上面的代码应启动该过程。请让我知道如何解决此问题。我是否还需要在其他任何地方都引用Quote类,以便像在kmodule.xml中那样正确地映射它?

2 个答案:

答案 0 :(得分:0)

您必须在Kie-deployment-descriptor.xml中的

之类的远程类下添加Custom类。
<remoteable-classes>
     <remoteable-class>com.myspace.quotemanagedrules.QuoteDto</remoteable-class>
</remoteable-classes>

如果JBPM在Kjars,依赖关系或可远程访问下均未找到要映射的类,则它将尝试将反序列化的对象视为哈希映射,从而导致错误

答案 1 :(得分:0)

您必须将输入对象定义为数据结构并将其添加为Process模型中的变量