簡體   English   中英

盡管模型不完整,但Camunda BPMN驗證成功

[英]Camunda BPMN validation successful although model is incomplete

我在bpmn.io中設計了一個不完整的bpmn流程(請參見下面的xml,您可以將其加載到bpmn.io上的建模器中)。

在下一步中,我根據該指南編寫了一個簡單的驗證函數。 該功能也在下面。

問題

我的問題是,盡管模型似乎是無效的,但沒有拋出任何錯誤(沒有endEvent,只有一個sequenceFlow從xor網關中流出)。 BPMN類中的validateModel方法只是從其內部解析器中調用相同的方法。 我是否錯過了想在之前定義方案的內容,還是完全誤解了有效bpmn的外觀以及如何對其進行驗證?

驗證方法

public String validateModel(String modelString) {
    String message = "";
    try {
        InputStream stream = new ByteArrayInputStream(modelString.getBytes(Charset.forName("UTF-8")));
        BpmnParser parser = new BpmnParser();
        BpmnModelInstance modelinstance = parser.parseModelFromStream(stream);
        parser.validateModel(modelinstance.getDocument());
        Bpmn.validateModel(modelinstance); //does the same as above, just added for completeness
        message = "Model is conform!";
    } catch (Exception e) {
        message = e.getMessage();
    }
    return message;
}

BPMN XML內容

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" 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" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
  <bpmn2:process id="Process_1" isExecutable="false">
    <bpmn2:startEvent id="StartEvent_1">
      <bpmn2:outgoing>SequenceFlow_061afhx</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:task id="Task_06azz4c">
      <bpmn2:incoming>SequenceFlow_061afhx</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_0lw11e7</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:sequenceFlow id="SequenceFlow_061afhx" sourceRef="StartEvent_1" targetRef="Task_06azz4c" />
    <bpmn2:exclusiveGateway id="ExclusiveGateway_0eezp6n">
      <bpmn2:incoming>SequenceFlow_0lw11e7</bpmn2:incoming>
      <bpmn2:outgoing>SequenceFlow_06uvwwf</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:sequenceFlow id="SequenceFlow_0lw11e7" sourceRef="Task_06azz4c" targetRef="ExclusiveGateway_0eezp6n" />
    <bpmn2:task id="Task_1j0gerp">
      <bpmn2:incoming>SequenceFlow_06uvwwf</bpmn2:incoming>
    </bpmn2:task>
    <bpmn2:sequenceFlow id="SequenceFlow_06uvwwf" sourceRef="ExclusiveGateway_0eezp6n" targetRef="Task_1j0gerp" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="412" y="240" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Task_06azz4c_di" bpmnElement="Task_06azz4c">
        <dc:Bounds x="647" y="218" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_061afhx_di" bpmnElement="SequenceFlow_061afhx">
        <di:waypoint xsi:type="dc:Point" x="448" y="258" />
        <di:waypoint xsi:type="dc:Point" x="503" y="258" />
        <di:waypoint xsi:type="dc:Point" x="503" y="258" />
        <di:waypoint xsi:type="dc:Point" x="647" y="258" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="457" y="253" width="90" height="20" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="ExclusiveGateway_0eezp6n_di" bpmnElement="ExclusiveGateway_0eezp6n" isMarkerVisible="true">
        <dc:Bounds x="672" y="60" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="652" y="110" width="90" height="20" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_0lw11e7_di" bpmnElement="SequenceFlow_0lw11e7">
        <di:waypoint xsi:type="dc:Point" x="697" y="218" />
        <di:waypoint xsi:type="dc:Point" x="697" y="110" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="631" y="97" width="90" height="20" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="Task_1j0gerp_di" bpmnElement="Task_1j0gerp">
        <dc:Bounds x="899" y="45" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="SequenceFlow_06uvwwf_di" bpmnElement="SequenceFlow_06uvwwf">
        <di:waypoint xsi:type="dc:Point" x="722" y="85" />
        <di:waypoint xsi:type="dc:Point" x="899" y="85" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="765.5" y="75" width="90" height="20" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

您的模型是有效的BPMN模型。 驗證對照XSD方案檢查XML文件。 這樣做並不能從設計良好或一致的角度檢查您的模型是否良好。

暫無
暫無

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

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