簡體   English   中英

Jbpm-Java:使用進程訪問對象並在這些對象上調用方法

[英]Jbpm - Java : Accessing objects withing process and calling methods on these objects

我是Jbpm的新手,當前正在構建貸款申請,我的個人類具有貸款金額。

我正在使用Map in Process將Person對象作為參數傳遞,如下所示:

KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kBuilder.add(ResourceFactory.newClassPathResource("bpmn/sampleProcess.bpmn"),ResourceType.BPMN2 );

        KieBase kBase = kBuilder.newKnowledgeBase();

        KieSession kSession = kBase.newKieSession();

        // PROCESS PARAMETERS ::: Process Level Variables with Process Scope
        Map<String,Object> params = new HashMap<>();

        //Creating a Person who applies to loan.
        Person p = new Person();
        p.setName("Ayushya K Devmurari");
        p.setUniqueId("A007");
        p.setLoanAmmount(5_00_000.00);
        p.setIncome(2_40_000.00);

        // setting parameter in Map
        params.put("Applicant1", p);

        //Starting the process.
        kSession.startProcess("com.discusit.loanapplication", params);       

        kSession.dispose();

這是我的流程圖的鏈接:

http://tinypic.com/view.php?pic=2pza22o&s=5

我可以在啟動腳本中訪問人員對象,代碼如下:

System.out.println("Person is :::"+kcontext.getVariable("Applicant1"));

問題是,每當我嘗試在此對象上調用任何方法/嘗試將其強制轉換為Person時,都會引發如下錯誤:

Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge.
    at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newKnowledgeBase(KnowledgeBuilderImpl.java:79)
    at com.discusit.loanapplication.main.MainClass.main(MainClass.java:23)

這是我的.bpmn文件:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions id="Definition"
             targetNamespace="http://www.jboss.org/drools"
             typeLanguage="http://www.java.com/javaTypes"
             expressionLanguage="http://www.mvel.org/2.0"
             xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
             xmlns:g="http://www.jboss.org/drools/flow/gpd"
             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
             xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
             xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
             xmlns:tns="http://www.jboss.org/drools">

  <itemDefinition id="_personItem" structureRef="Person" />
  <itemDefinition id="_amountItem" structureRef="Float" />

  <process processType="Private" isExecutable="true" id="com.discusit.loanapplication" name="Sample Process" tns:packageName="defaultPackage" >

    <!-- process variables -->
    <property id="person" itemSubjectRef="_personItem"/>
    <property id="amount" itemSubjectRef="_amountItem"/>

    <!-- nodes -->
    <startEvent id="_1"  isInterrupting="true"/>
    <endEvent id="_16" name="End" >
        <terminateEventDefinition />
    </endEvent>
    <exclusiveGateway id="_3" name="Gateway" gatewayDirection="Diverging" />
    <scriptTask id="_18" name="Starting" scriptFormat="http://www.java.com/java" >
      <script>System.out.println("Process initialization...");
System.out.println("Person Object "+kcontext.getVariable("Applicant1"));
</script>
    </scriptTask>
    <scriptTask id="_4" name="Low Amount" scriptFormat="http://www.java.com/java" >
      <script>

System.out.println("Amount is Low :::::::");
</script>
    </scriptTask>
    <scriptTask id="_5" name="Medium Amount" scriptFormat="http://www.java.com/java" >
      <script>System.out.println("Amount is medium :::::");
</script>
    </scriptTask>
    <scriptTask id="_6" name="High Amount" scriptFormat="http://www.java.com/java" >
      <script>System.out.println("Amount is HIGH :::::::::");</script>
    </scriptTask>
    <parallelGateway id="_22" name="Gateway" gatewayDirection="Converging" />

    <!-- connections -->
    <sequenceFlow id="_22-_16" sourceRef="_22" targetRef="_16" />
    <sequenceFlow id="_18-_3" sourceRef="_18" targetRef="_3" />
    <sequenceFlow id="_1-_18" sourceRef="_1" targetRef="_18" />
    <sequenceFlow id="_3-_4" sourceRef="_3" targetRef="_4" name="low" tns:priority="1" >
      <conditionExpression xsi:type="tFormalExpression" language="http://www.java.com/java" >return false;</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_3-_5" sourceRef="_3" targetRef="_5" name="medium" tns:priority="1" >
      <conditionExpression xsi:type="tFormalExpression" language="http://www.java.com/java" >return false;</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_3-_6" sourceRef="_3" targetRef="_6" name="high" tns:priority="1" >
      <conditionExpression xsi:type="tFormalExpression" language="http://www.java.com/java" >return true;</conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_5-_22" sourceRef="_5" targetRef="_22" />
    <sequenceFlow id="_6-_22" sourceRef="_6" targetRef="_22" />
    <sequenceFlow id="_4-_22" sourceRef="_4" targetRef="_22" />

  </process>

  <bpmndi:BPMNDiagram>
    <bpmndi:BPMNPlane bpmnElement="com.discusit.loanapplication" >
      <bpmndi:BPMNShape bpmnElement="_1" >
        <dc:Bounds x="265" y="57" width="48" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_16" >
        <dc:Bounds x="265" y="558" width="48" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_3" >
        <dc:Bounds x="263" y="223" width="48" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_18" >
        <dc:Bounds x="248" y="134" width="80" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_4" >
        <dc:Bounds x="21" y="356" width="132" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_5" >
        <dc:Bounds x="217" y="355" width="142" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_6" >
        <dc:Bounds x="475" y="346" width="132" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_22" >
        <dc:Bounds x="264" y="462" width="48" height="48" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="_22-_16" >
        <di:waypoint x="288" y="486" />
        <di:waypoint x="289" y="582" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_18-_3" >
        <di:waypoint x="288" y="158" />
        <di:waypoint x="287" y="247" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_1-_18" >
        <di:waypoint x="289" y="81" />
        <di:waypoint x="288" y="158" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_3-_4" >
        <di:waypoint x="287" y="247" />
        <di:waypoint x="87" y="380" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_3-_5" >
        <di:waypoint x="287" y="247" />
        <di:waypoint x="288" y="379" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_3-_6" >
        <di:waypoint x="287" y="247" />
        <di:waypoint x="541" y="370" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_5-_22" >
        <di:waypoint x="288" y="379" />
        <di:waypoint x="288" y="486" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_6-_22" >
        <di:waypoint x="541" y="370" />
        <di:waypoint x="288" y="486" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_4-_22" >
        <di:waypoint x="87" y="380" />
        <di:waypoint x="288" y="486" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>

</definitions>

我想要做的是訪問“分歧網關”上“人”對象內的loanAmount,以對貸款類型進行分類。 誰能幫我? 我哪里出錯了,我找不到它,謝謝。

從理論上講,您應該能夠查看有關編譯期間出了什么問題的更多信息(在控制台中或更早的堆棧跟蹤中)。 如果沒有,請使用kbuilder.getErrors()獲得更多詳細信息。

快速瀏覽一下過程使我想知道您是否不應該為Person類等使用完全限定的名稱(包括軟件包)?

克里斯

這:線程“主”中的異常java.lang.IllegalArgumentException:無法解析知識。 在org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newKnowledgeBase(KnowledgeBuilderImpl.java:79)

意味着您的過程中有問題,但是您沒有共享完整的堆棧跟蹤,因此對於我們來說,幫助您變得更加復雜。.如果您仔細查看堆棧跟蹤,您將了解發生了什么。

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM