Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模式验证,如何显示用户友好的验证消息?_Java_Xml_Schema_Sax - Fatal编程技术网

Java 模式验证,如何显示用户友好的验证消息?

Java 模式验证,如何显示用户友好的验证消息?,java,xml,schema,sax,Java,Xml,Schema,Sax,有没有办法避免或设置模式以显示更好的用户友好消息 我正在解析字符串并使用reg ex来解释它们,但可能有更好的方法 前 相反,我想要: 同样,我通过创建一个额外的层来验证它,从而解决了这个问题。但是当我必须使用带有模式验证的XML工具时,显示的就是crypt消息 谢谢我刚才问过你 我的结论是没有提供映射错误的方法,这是您需要自己做的事情 希望有人能做得更好 据我所知,没有。您可能需要创建一些自定义代码来调整错误消息。一种方法可能是定义一组正则表达式,这些正则表达式可以提取验证器错误消息的相关部分

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

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

相反,我想要:

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

谢谢

我刚才问过你

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


希望有人能做得更好

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

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

如果用户发送的XML错误,我们将使用它来显示用户友好的错误消息。我们当前的实现有点过于简单,主要表现在以下几点:

  • 错误消息文本已编码到schematron规则中
  • 对于每种新的XML类型(即新的XSD模式),都需要手动添加schematron规则
但是,这可以通过以下返工轻松解决:

  • Schematron规则应该包含唯一的错误消息代码,而实际的消息文本选择(包括I18n问题)应该在验证框架范围之外完成
  • 可以使用XSD到Schematron转换器从XSD模式生成基本规则(可在上获得)
"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."
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.