【问题标题】:Issue in Starting JBPM process with custom process variable使用自定义流程变量启动 JBPM 流程中的问题
【发布时间】:2019-08-01 07:17:13
【问题描述】:

我在 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 中那样正确映射它?

【问题讨论】:

    标签: jbpm


    【解决方案1】:

    您必须在 Kie-deployment-descriptor.xml 中的可远程类(如

    )下添加自定义类
    <remoteable-classes>
         <remoteable-class>com.myspace.quotemanagedrules.QuoteDto</remoteable-class>
    </remoteable-classes>
    

    如果 JBPM 在 Kjars、依赖项或可远程访问下找不到要映射的类,它会尝试将反序列化的对象视为哈希映射,因此会出错

    【讨论】:

      【解决方案2】:

      您必须将输入对象定义为数据结构,并将其作为变量添加到流程模型中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多