【发布时间】:2015-04-29 15:46:17
【问题描述】:
解析和验证之间的实际区别是什么? 解析本身可以识别消息结构,为什么要进行验证呢?
如果消息不符合为 MRM 解析器定义的结构,解析本身会引发错误,那么为什么验证属性必须设置为“内容和值”?
【问题讨论】:
标签: messagebroker
解析和验证之间的实际区别是什么? 解析本身可以识别消息结构,为什么要进行验证呢?
如果消息不符合为 MRM 解析器定义的结构,解析本身会引发错误,那么为什么验证属性必须设置为“内容和值”?
【问题讨论】:
标签: messagebroker
首先只有带有消息模型的解析器才能验证,即 XMLNSC/SOAP(带有模式)、MRM、DFDL 和 DataObject。
对于未经验证的基于 XMLNSC 的解析器,消息将被视为自定义,仅当消息格式不正确时才会引发异常。
启用验证后,基于 XMLNSC 的解析器将验证消息是否符合消息模型,并将检查架构中定义的所有限制/架构方面的有效性。
DFDL 和 MRM 是基于模型的解析器,没有消息模型就无法使用这些解析器,因此它们总是根据模型检查消息内容。使用这些解析器的非验证解析比基于 XMLNSC 的解析器具有更强的约束。禁用验证后,这些解析器会检查数据是否可以解释为模型的实例。
在验证 MRM 和 DFDL 解析器时,将额外检查值约束、正确数据的类型是否正确并检查排序约束。
【讨论】: