当前位置: 首页 > 知识库问答 >
问题:

使用自定义流程变量启动JBPM流程时出现问题

乐正瑞
2023-03-14

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

""请求URI时意外的HTTP响应代码

'http://localhost:8080/kie-服务器/服务/rest/服务器/容器/QuotemageDrules\u 1.0.0-SNAPSHOT/processes/QuotemageDrules。quoteManagedRules/实例'!

错误代码:500,消息:\“无法创建响应:[QuotemageDrules.QuotemageDrules:181-收到的报价:7]--无法将java.util.LinkedHashMap转换为com.myspace.QuotemageDrules.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个答案

竺鸿骞
2023-03-14

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

颜镜
2023-03-14

您必须在Kie部署描述符中添加自定义类。可远程类下的xml,如

<remoteable-classes>
     <remoteable-class>com.myspace.quotemanagedrules.QuoteDto</remoteable-class>
</remoteable-classes>

如果JBPM在Kjars、dependencies或remoteable下都找不到要映射的类,它会尝试将反序列化对象视为hashmap,从而导致错误

 类似资料:
  • 我想知道如何在JBPM 6.1.0中启动流程。CR1到REST传递自定义对象。 当我通过jbpm控制台启动一个进程时,将显示表单以输入数据。有没有办法通过REST调用传递相同的数据? 我的最终目标是让JMeter脚本启动多个进程,以测试系统的性能。 > 即使传递自定义对象不可行,我想知道是否可以传递基元类型(字符串、整数等)-即使这样,我也可以在启动进程后构造自定义对象。 我尝试了JBPM文档,但

  • 系统启动时,引导管理器首先加载内核,内核被载入后执行以下操作: 内核自解压 初始化阶段 检测,初始化硬件 设置各种入口地址 初始化 IRQ 中断处理机制 启动 init 进程 初始化控制台、显示器 初始化 kernel_module init 阶段。init 进程启动后,执行当前运行级别的脚本: PCI总线初始化 网络初始化 文件系统初始化 加载文件系统 ……

  • 我们知道 init 是 linux 的根进程,是所有进程的父进程。同样, xinit 是所有 Xwindow 进程的根进程 Startx startx 可以在命令行下启动图形界面。执行startx 命令时,实际执行这一命令: xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc 根据脚本 /etc/X11/xinit/xserver

  • 读取 MBR 的信息,启动 Boot Manager第 22 章 Grub中向您介绍它的使用方式。 init进程 是 Linux 的根进程,所有的系统进程都是它的子进程。 通常情况下, /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是 /etc/rcN.d/ 目录。例如您设定的运行级别为 3,那么它对应的启动目录为 /etc/rc3.d/ 。 Xwindow 为 Linux 下的图形用户

  • 我正在阅读jBPM用户指南,并尝试创建一个自定义流程来开始播放。例如,我试图设置一个以另一个应用程序的消息引起的信号事件开始的进程。虽然我的直觉认为这应该是微不足道的,但我找不到这样的例子。关于事件的jBPM文档不是很详细,也没有附带任何示例。此外,jBPM eclipse插件文档没有提供任何流程构建的示例,eclipse BPMN2.0 Modeler文档只提供断开的链接。 您能否从开发人员的角

  • 我们正在评估Activiti作为一个流程引擎,以取代我们现有的本土工作流引擎。Activiti的功能给我们留下了深刻的印象,特别是与多租户和REST WS相关的功能。 我想这种情况会很常见,其他人也会面临同样的情况。 我知道我在这个问题上很含糊,但在这个阶段,我没有具体的问题可以讨论。