解析XML文件时如何国际化SAXParseException?

问题描述 投票:0回答:1

我遇到了类似这个问题的问题:SAXParseException localized

我正在尝试解析XML文件并以多种语言获取解析器错误列表(SAXParseException),例如:

XmlImporter.importFile(params, "en")应返回英文错误列表,XmlImporter.importFile(params, "fr")应返回法语错误列表,XmlImporter.importFile(params, "pl")应返回波兰语错误列表。

XmlImporter.importFile(params, "...")的每次通话都可能使用不同的语言环境。

这是我的验证方法:

private void validate(String xmlFilePath, String schemaFilePath) throws Exception {
    SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = schemaFactory.newSchema(new File(schemaFilePath));
    Validator validator = schema.newValidator();

    XmlErrorHandler errorHandler = new XmlErrorHandler();
    validator.setErrorHandler(errorHandler);

    try (InputStream stream = new FileInputStream(new File(xmlFilePath))) {
        validator.validate(new StreamSource(stream));
    }

XmlErrorHandler:

public class XmlErrorHandler implements ErrorHandler {

    private List<String> errorsList = new ArrayList<>();

    public List<String> getErrorsList() {
        return errorsList;
    }

    @Override
    public void warning(SAXParseException exception) throws SAXException {
        errorsList.add(prepareExceptionDescription(exception));
    }

    @Override
    public void error(SAXParseException exception) throws SAXException {
        errorsList.add(prepareExceptionDescription(exception));
    }

    @Override
    public void fatalError(SAXParseException exception) throws SAXException {
        errorsList.add(prepareExceptionDescription(exception));
    }

    private String prepareExceptionDescription(SAXParseException exception) {
        return "Error: " +
                "colNumber: " + exception.getColumnNumber() +
                " line number: " + exception.getLineNumber() +
                " message: " + exception.getLocalizedMessage();
    }
}

我假设,我需要以某种方式/某处java.util.Locale / String传递以获取exception.getLocalizedMessage()自定义消息(在en,fr或pl中)?

java xml exception jaxb jaxb2
1个回答
0
投票

默认情况下,Xerces(用于将XML文件转换为Java对象的Java Parser)可以为给定的语言提供国际化:

  • XML schema messages_的.properties XML schema messages_饿死.properties
  • XML schema messages_放入.properties XML schema messages_IT.properties
  • XML schema messages_急啊.properties XML schema messages_KO.properties
  • XML schema messages_普通_br.properties XML schema messages_SV.properties
  • XML schema messages_这_cn.properties XML schema messages_这_TW.properties

用其他语言提供国际化:

  1. 从Apache Xerces获取XMLSchemaMessages.properties文件并将文件重命名为新文件XMLSchemaMessages_LANG.properties,其中LANG需要更改为新语言。
  2. 将文件的消息更新为新语言并将此文件放在类路径中(您可以将此文件添加到src\main\resources\com\sun\org\apache\xerces\internal\impl\msg
  3. 将以新语言显示例外情况(将从XMLSchemaMessages_LANG.properties文件中获取消息)
© www.soinside.com 2019 - 2024. All rights reserved.