Validasi Camunda BPMN berhasil meskipun model belum lengkap

Saya merancang proses bpmn yang tidak lengkap di bpmn.io (lihat xml di bawah, Anda dapat memuatnya ke pemodel di bpmn.io ).

Pada langkah selanjutnya saya menulis fungsi validasi sederhana menurut panduan ini. Fungsinya juga ada di bawah.

Masalahnya

Masalah saya adalah, tidak ada kesalahan yang terjadi meskipun model tampaknya tidak valid (tidak ada endEvent dan hanya satu sequenceFlow yang keluar dari gateway xor). Metode validasiModel dari kelas BPMN hanya memanggil metode yang sama dari parser internalnya. Apakah saya melewatkan sesuatu seperti mendefinisikan skema sebelumnya atau apakah saya benar-benar salah memahami seperti apa bpmn yang valid dan bagaimana cara memvalidasinya?

Metode Validasi

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;
}

Konten XML BPMN

<?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>

person Jankapunkt    schedule 29.04.2016    source sumber


Jawaban (1)


Model Anda adalah model BPMN yang valid. Validasi memeriksa file XML terhadap skema XSD. Itu tidak dan tidak dapat memeriksa apakah model Anda bagus dalam arti dirancang dengan baik atau konsisten.

person Sebastian Menski    schedule 29.04.2016