JAXB异常消息:如何更改语言?

时间:2015-07-09 16:38:53

标签: java xml jaxb internationalization jaxb2

在使用JAXB对XSD文件进行XML验证期间,如果XML文件无效,我会得到JAXBExceptions。我通过调用event.getMessage()得到了异常的消息。结果字符串是德语。

我正在使用JAXB 2.2。在德国系统上使用java 8。

是什么决定了JAXB异常消息的语言,如何将其更改为英语?

以下是代码:

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
    Schema schema = schemaFactory.newSchema();
    JAXBContext jaxbContext = JAXBContext.newInstance("myPackage");
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    unmarshaller.setEventHandler(new XMLValidationEventHandler());
    unmarshaller.setSchema(schema);
    myClass = (myClass) unmarshaller.unmarshal(new File("myFile.xml"));

} catch (SAXException saxE) {
    System.out.println("SAX-Exception during creation of Schema object!");
    saxE.printStackTrace();
} catch (JAXBException e) {}

这是Event-Handler:

public class XMLValidationEventHandler implements ValidationEventHandler {

@Override
public boolean handleEvent(ValidationEvent event) {
    System.out.println("XML validation failure in line " 
                       + event.getLocator().getLineNumber() 
                       + ", column " + event.getLocator().getColumnNumber() 
                       + ": " + event.getMessage());
    return true;
}

以下是事件处理程序输出的示例:

XML validation failure in line 8, column 48: cvc-maxInclusive-valid: Wert "10000" ist nicht Facet-gültig in Bezug auf maxInclusive "8.0E3" für Typ "Type".
XML validation failure in line 17, column 64: Ungültiger Wert 250 für Feld Day.
XML validation failure in line 17, column 64: cvc-datatype-valid.1.2.1: "2014-02-2501:00:00Z" ist kein gültiger Wert für "dateTime".

2 个答案:

答案 0 :(得分:3)

好的,我发现用于JAXB事件消息的语言由java系统属性user.language决定。因此,默认语言取决于它运行的系统。

我通过添加-Duser.language=en更改了我的java程序的运行配置。这将JAXB事件消息的语言更改为英语。

答案 1 :(得分:0)

您应该使用验证器来验证,而不是解组。您可以这样更改其区域设置:

import javax.xml.validation.Validator;
import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;
import org.xml.sax.ErrorHandler;

Validator validator = schema.newValidator();
ErrorHandler errorHandler = new YourErrorHandler();
validator.setErrorHandler(errorHandler);

XMLErrorReporter xmlErrorReporter = (XMLErrorReporter) validator
        .getProperty("http://apache.org/xml/properties/internal/error-reporter");
xmlErrorReporter.setLocale(new Locale("ru", "RU"));

尽管使用Java9 +,您需要通过编译器选项从com.sun.org.apache.xerces.internal.impl模块中导出java.xml软件包。有关更多详细信息,请参见this answer