我目前正在处理的Web应用程序,根据存储在服务器上的xsd验证用户提供的xml文件。问题是如果xml验证失败,错误消息应该是俄语。我的解析器工作 - 它提供错误消息,但只有英文
String parserClass = "org.apache.xerces.parsers.SAXParser";
String validationFeature = "http://xml.org/sax/features/validation";
String schemaFeature = "http://apache.org/xml/features/validation/schema";
XMLReader reader = null;
reader = XMLReaderFactory.createXMLReader(parserClass);
reader.setFeature(validationFeature,true);
reader.setFeature(schemaFeature,true);
BatchContentHandler contentHandler = new BatchContentHandler(reader);
reader.setContentHandler(contentHandler);
BatchErrorHandler errorHandler = new BatchErrorHandler(reader);
reader.setErrorHandler(errorHandler);
reader.setFeature("http://apache.org/xml/features/continue-after-fatal-error", true);
reader.parse(new InputSource(new ByteArrayInputStream(streamedXML)));
它工作正常 - 错误消息是英文的。 阅读这篇文章Locale specific messages in Xerces 2.11.0 (Java)以及此帖https://www.java.net//node/699069我添加了这些内容
Locale l = new Locale("ru", "RU");
reader.setProperty("http://apache.org/xml/properties/locale", l);
我还在jar中添加了XMLSchemaMessages_RU.properties文件。现在我得到NULL指针异常。任何想法或提示?提前谢谢!
答案 0 :(得分:1)
我发现here关于http://apache.org/xml/properties/locale
:
- 说明:用于报告错误和警告的区域设置。当此属性的值为null时,返回平台默认值 将使用java.util.Locale.getDefault()。
- 类型:java.util.Locale
- 访问:读写
- 自:Xerces-J 2.10.0
- 注意:如果没有可用于指定区域设置的消息,则将使用平台默认值。如果平台默认不是英语 并且没有消息可用于此区域设置,然后消息将是 用英文报道。
我还发现here一个例子,为了为俄语创建一个Locale
对象,提供了这段代码:
Locale dLocale = new Locale.Builder()。setLanguage(" ru")。setScript(" Cyrl")。build();
我不知道这是否有用。试试吧,给我反馈意见吧!