SAX XML解析器 - 本地化的错误消息

时间:2013-10-16 08:36:27

标签: java xml-parsing localization saxparser xerces2-j

我目前正在处理的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指针异常。任何想法或提示?提前谢谢!

1 个答案:

答案 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();

我不知道这是否有用。试试吧,给我反馈意见吧!