当前位置: 首页 > 知识库问答 >
问题:

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

庞旺
2023-03-14

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

我使用的是JAXB2.2。在德国系统上使用Java8。

是什么决定了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) {}

这是事件处理程序:

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个答案

朱毅
2023-03-14

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

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。太阳组织。阿帕奇。薛西斯。内部的impl来自java的包。xml模块通过编译器选项。有关更多详细信息,请参阅此答案。

彭允晨
2023-03-14

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

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

 类似资料:
  • 我有一个典型的具有多种语言(法语、英语和荷兰语)的web应用程序,我正在使用页面卸载触发器来警告用户在离开页面/关闭选项卡/等等时未保存的更改。这个很管用。 我的问题是,在不改变浏览器语言的情况下,我如何改变对话框标题和“离开此页”和“留在此页”两个框的onbeforeunload消息的语言?

  • 我正在创建一个android应用程序,我试图在sqlite数据库中插入值,但当我尝试插入错误的值时,它会显示在终端android.database.sqlite中。SQLiteConstraintException:CHECK constraint失败:但我想toast一条消息。我使用了try-catch块,但它不起作用。 此异常正在进入终端,但我想在try catch块中捕捉该异常:-

  • 问题内容: 我正在按照以下内容进行编写,其中在比较两个Unicode文本的多行块时,我试图产生一个不错的错误消息。进行比较的内部方法会引发一个断言,但是默认的解释对我没有用 我需要在代码中添加如下内容: 我无法弄清楚如何在我捕获的assertionerror中更改打印的错误消息。我总是得到,它仅显示输出的第一行。 如何更改断言消息以打印出我想要的任何内容? 如果相关的话,我正在运行测试。 问题答案

  • 在使用gradle执行特定测试套件的代码时,我得到以下错误。不明白原因。感谢任何帮助。 org.gradle.internal.remote.internal.MessageIOException:无法写入“/127.0.0.1:53644”.在org.gradle.internal.remote.internal.inet.socketconnection.flush(socketconnect

  • 前言 在封装创建request的时候会调用handleProduceResponse(),这个里面会调用 有异常并且可以重试,执行第一个分支,会调用 有异常但是不可以重试,执行第二个分支,会调用

  • 问题内容: 我有一个SOAPMessage对象。我想解析并将其转换为一组Jaxb类。我如何将消息转换为Jaxb可以解组的格式? javax.xml.bind.Unmarshaller.unmarshal(??) 问题答案: SOAP消息的主体包含实际数据及其要解组的位。您可以执行以下操作: