$ type属性导致XML无效

时间:2018-02-16 21:34:58

标签: bpmn camunda bpmn.io camunda-modeler

我最近将我的bpmn-js库更新为0.26.6版。但是,既然我已经这样做了,我的图表遇到了问题。

出于某种原因,在将图解析为XML时,SequenceFlow对象似乎有一个添加的属性,如下所示:

<bpmn:sequenceFlow id="SequenceFlow_0itptjk" name="x===1" sourceRef="ExclusiveGateway_16fh3h3" targetRef="Task_10pxcz5" $type="bpmn:SequenceFlow">
    <bpmn:conditionExpression language="JavaScript" xsi:type="bpmn:tFormalExpression">x===1</bpmn:conditionExpression>
</bpmn:sequenceFlow>

问题是$ type =“bpmn:SequenceFlow”不是有效的XML,并且没有传递验证。

{
  "name": "FlowElement",
  "isAbstract": true,
  "superClass": [
    "BaseElement"
  ],
  "properties": [
    {
      "name": "name",
      "isAttr": true,
      "type": "String"
    },
    {
      "name": "auditing",
      "type": "Auditing"
    },
    {
      "name": "monitoring",
      "type": "Monitoring"
    },
    {
      "name": "categoryValueRef",
      "type": "CategoryValue",
      "isMany": true,
      "isReference": true
    }
  ]
},{
  "name": "SequenceFlow",
  "superClass": [
    "FlowElement"
  ],
  "properties": [
    {
      "name": "isImmediate",
      "isAttr": true,
      "type": "Boolean"
    },
    {
      "name": "conditionExpression",
      "type": "Expression",
      "xml": {
        "serialize": "xsi:type"
      }
    },
    {
      "name": "sourceRef",
      "type": "FlowNode",
      "isAttr": true,
      "isReference": true
    },
    {
      "name": "targetRef",
      "type": "FlowNode",
      "isAttr": true,
      "isReference": true
    }
  ]
},{
  "name": "BaseElement",
  "isAbstract": true,
  "properties": [
    {
      "name": "id",
      "isAttr": true,
      "type": "String",
      "isId": true
    },
    {
      "name": "documentation",
      "type": "Documentation",
      "isMany": true
    },
    {
      "name": "extensionDefinitions",
      "type": "ExtensionDefinition",
      "isMany": true,
      "isReference": true
    },
    {
      "name": "extensionElements",
      "type": "ExtensionElements"
    }
  ]
}

正如您所看到的,这些都没有任何表明为什么要添加$类型的东西。

过去有没有人遇到过这个问题?

- 编辑 -

在进行一些测试之后,似乎在将条件表达式添加到SequenceFlow时添加了$ type参数。否则,不会添加该属性,并且XML有效。

- EDIT2 -

这些是我正在使用的XML定义:

<bpmn:definitions id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

- EDIT3 -

更多故障排除后的更多细节。似乎这个错误不只影响条件流 - 它影响所有类型。错误发生在更新之后,在

中执行
UpdatePropertiesHandler.prototype.execute = function(context) ...

在该功能中,有一个对

的调用
setProperties(businessObject, properties);

在那个集合中,有这个

function setProperties(businessObject, properties) {
  forEach(properties, function(value, key) {
    businessObject.set(key, value);
  });
}

在forEach之后,businessObject突然在其$ attrs中有一个$ type。就好像代替businessObject.set一样,它正在做businessObject。$ attr.set。

1 个答案:

答案 0 :(得分:1)

我找到了这个问题的原因。似乎我使用的bpmn-js版本与该项目依赖的camunda-moddle版本完全兼容,无法将bpmn解析为xml。解决方案是一次将bpmn-js恢复为一个版本,直到找到一个兼容且没有任何意外属性被camunda-moddle错误处理的版本。