架构验证,如何显示用户友好的验证消息?

时间:2009-09-28 19:37:31

标签: java xml schema sax

有没有办法避免或设置架构以显示更好的用户友好消息?

我正在解析字符串并使用reg ex来解释它们,但可能有更好的方法。

实施例。

"cvc-complex-type.2.4.b: The content of element 'node' is not complete. One of '{\"\":offer,\"\":links}' is expected."
  

相反,我想:

"The element 'node' is not complete. The child elements 'offer' and 'links' are expected."

同样,我通过创建一个验证它的额外层来解决问题。但是当我必须使用带有模式验证的XML工具时,加密消息就是显示的那些。

谢谢

3 个答案:

答案 0 :(得分:3)

不是我知道的。您可能需要创建一些自定义代码来调整您的错误消息。一种方法可能是定义一组正则表达式,它们可以提取验证器错误消息的相关部分,然后将它们插回到您自己的错误消息中。想到这样的东西(没有优化,不处理一般情况等等,但我认为你会得到这个想法):

String uglyMessage = "cvc-complex-type.2.4.b: The content of element 'node' is not complete. One of '{\"\":offer,\"\":links}' is expected.";

String findRegex = "cvc-complex-type\\.2\\.4\\.b: The content of element '(\\w+)' is not complete\\. One of '\\{\"\":(\\w+),\"\":(\\w+)}' is expected\\.";

String replaceRegex = "The element '$1' is not complete. The child elements '$2' and '$3' are expected.";

String userFriendlyMessage = Pattern.compile(findRegex).matcher(uglyMessage).replaceAll(replaceRegex);

System.out.println(userFriendlyMessage);
// OUTPUT:
//   The element 'node' is not complete. The child elements 'offer' and 'links' are expected.

我怀疑这些验证程序错误消息是特定于供应商的,因此如果您无法控制部署的应用程序中的XML验证程序,这可能对您不起作用。

答案 1 :(得分:1)

如果他发送给我们的XML错误,我们正在使用Schematron向用户显示友好的错误消息。我们当前的实现有点简单,特别是在以下几点:

  • 错误消息文本已编码为schematron规则
  • 对于每种新的XML类型(即新的XSD架构),需要手动添加schematron规则

然而,通过以下返工可以很容易地解决这个问题:

  • Schematron规则应包含唯一的错误消息代码,而实际消息文本选择(包括I18n问题)应在验证框架范围之外完成
  • 可以使用XSD到Schematron转换器从XSD架构生成基本规则(可在http://www.schematron.com/resources.html获得)

答案 2 :(得分:0)

我前一段时间问similar question

我的结论是没有提供映射错误的方法,而且这是你自己需要做的事情。

希望有人可以做得更好!