【发布时间】:2012-05-06 03:59:19
【问题描述】:
前提条件:基于CXF的服务接收到带有数据的请求/响应,违反了XSD限制。
实际行为: 在这种情况下,CXF 会返回错误消息,例如:
cvc-maxLength-valid:长度 = '28' 的值 'string_length_violated_value' 对于类型 'XSDStringTypeWithLengthRestriction' 的 maxLength '13' 不是 facet-valid
目标: 使用包含无效数据的字段名称向消费者返回故障。 F.e.像这样:
来自提供者的响应包含无效数据。字段 'field_name' 的值 'string_length_violated_value' 相对于 maxLength '13' 不是 facet-valid。
我想知道是否可能,如果可能,那么如何确定(从哪里检索)这个字段名称?
【问题讨论】:
-
我刚刚遇到了一个类似的问题,我得到一个“无效值”解组错误,但除了“违规值”之外,没有任何关于相关元素的提示。由于我在 XML 消息中有数百个元素,这就像大海捞针一样。我在这个阶段的解决方法是为每个元素提供唯一的(虚假的)值,并且由于报告了值(但不是元素),它指向了正确的元素。不过,这很乏味而且不是很聪明。一旦我有更多时间,我将尝试
JAXB ValidationEventHandler技术。 -
嗨丹尼尔,时间过去了,所以我不记得详细了,抱歉。但我可以说——对我来说
ValidationEventHandler不起作用,因为我们使用的 cxf 版本忽略了这一点。这是个坏消息,但也有好消息——我已经设法通过挖掘封装对象从 cxf 故障中获取有关“坐标”(行号和列号)的数据——这就是我们的解决方案。
标签: cxf field unmarshalling fault