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