由于 $type 属性,无效 XML
Invalid XML due to $type property
我最近将我的 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"
}
]
}
如您所见,其中 none 有任何内容表明添加 $type 的原因。
有没有人运行过去遇到过这个问题?
--编辑--
经过一些测试,似乎是在向SequenceFlow添加条件表达式时添加了$type参数。否则,不添加属性,XML有效。
--编辑2--
这些是我正在使用的 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。
我找到了这个问题的原因。似乎我使用的 bpmn-js 版本与项目依赖于将 bpmn 解析为 xml 的 camunda-moddle 版本不完全兼容。解决方案是一次恢复 bpmn-js 一个版本,直到我找到一个兼容的版本并且没有任何意外属性被 camunda-moddle 错误处理。
我最近将我的 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"
}
]
}
如您所见,其中 none 有任何内容表明添加 $type 的原因。
有没有人运行过去遇到过这个问题?
--编辑--
经过一些测试,似乎是在向SequenceFlow添加条件表达式时添加了$type参数。否则,不添加属性,XML有效。
--编辑2--
这些是我正在使用的 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。
我找到了这个问题的原因。似乎我使用的 bpmn-js 版本与项目依赖于将 bpmn 解析为 xml 的 camunda-moddle 版本不完全兼容。解决方案是一次恢复 bpmn-js 一个版本,直到我找到一个兼容的版本并且没有任何意外属性被 camunda-moddle 错误处理。