XML架构验证会针对同一错误抛出两条不同的错误消息

时间:2018-09-20 07:25:02

标签: xml logback

对于我当前的项目,我从API获取一些XML数据,并根据XSD架构对其进行验证。

我使用Logback记录错误,并向选定的地址发送电子邮件。现在,我的问题是每个错误我总是得到两条错误消息,像这样:

[ERROR] 2018-09-20 09:00:06.619 c.j.d.H.v.CustomValidationEventHandler - ERROR VALIDATING OBJECT:  Result [ /* some data here */ ]
MESSAGE: cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_VoraussichtlicherEintrittsterminResult'.
[ERROR] 2018-09-20 09:00:06.619 c.j.d.H.v.CustomValidationEventHandler - ERROR VALIDATING OBJECT:  Result [ /* some data here */ ]
MESSAGE: cvc-type.3.1.3: The value '' of element 'VoraussichtlicherEintrittstermin' is not valid.

这是XSD架构中的元素:

<xs:element name="VoraussichtlicherEintrittstermin">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:minLength value="1" />
            <xs:maxLength value="10" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

这是另一个例子:

[ERROR] 2018-09-19 13:30:01.981 c.j.d.H.v.CustomValidationEventHandler - ERROR VALIDATING OBJECT:  Result [ ... ]
MESSAGE:  cvc-pattern-valid: Value '0' is not facet-valid with respect to pattern '[0-9]{3,7}' for type '#AnonType_BerufsbezeichnungIDResult'.
[ERROR] 2018-09-19 13:30:01.982 c.j.d.H.v.CustomValidationEventHandler - ERROR VALIDATING OBJECT:  Result [ ... ]
MESSAGE:  cvc-type.3.1.3: The value '0' of element 'BerufsbezeichnungID' is not valid.

以及架构中的元素:

<xs:element name="BerufsbezeichnungID">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="[0-9]{3,7}" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>

是否可以通过某种方式将Logback配置为仅发送这些消息之一?还是因为我的XSD模式,将那些错误计为两个?

1 个答案:

答案 0 :(得分:1)

我不了解LogBack,但是我猜想编写模式处理器的依据是,给您太多的信息而不是太少的信息是更好的,而且没人想过要弄清楚两条消息是否与如果确实存在定义为“一个错误”的概念,则为“相同错误”。在这些示例中,两个消息中的信息是互补的:一个告诉您某个值不符合预期的类型,第二个告诉您该值出现在哪个元素中。在模式处理器内部,有时它可能是很难汇总这些信息而又不会失去重要的东西。