【问题标题】:Java: Populating .xsd-generated class from .xml fileJava:从 .xml 文件填充 .xsd 生成的类
【发布时间】:2015-11-05 10:53:58
【问题描述】:

我有一个从 .xsd 文件生成的类,并且我有一个 .xml 文件,其中包含符合 .xsd 中架构的数据。比如:

  • XML 模式文件:MyObject.xsd
  • 从架构生成的 Java 类:MyObject.java
  • 与架构匹配的 XML:MyObject.xml

有没有一种简单的方法可以将MyObject.xml 反序列化为MyObject.java 的实例?我希望有比手动遍历 DOM 元素和设置对象的所有属性更简单的方法。

基本上,我正在寻找java.beans.XMLDecoder 中的功能,但由于我的.xml 文件不是从XMLEncoder 创建的,我不相信我可以使用解码器。

【问题讨论】:

  • 您的问题不包含有关如何生成 Java 类的任何信息。因此无法回答。
  • 我使用 CXF 库生成了它们。原谅我,我假设给定一个 .xsd 会有一个被接受的生成类,因此生成的细节将是无关信息。
  • 嗯,有多个库/API 可以将 XML 映射到 Java(JAXB2、XMLBeans、Castor 等),它们的工作方式非常不同,因此了解您使用哪一个显然很重要。你说你用的是CXF,但是CXF本身是一个支持多个数据绑定库的Web服务框架,所以目前还不清楚你实际用的是哪一个。
  • 啊,我明白了。它正在使用 JAXB2。

标签: java xml xsd jaxb2


【解决方案1】:

首先您需要使用静态newInstance 方法创建一个JAXBContext 实例。然后使用createMarshaller 方法创建一个Unmarshaller 实例并在该实例上调用适当的unmarshal 方法:

InputStream is = new FileInputStream("MyObject.xml");
JAXBContext jc = JAXBContext.newInstance(MyObject.class);
Unmarshaller u = jc.createUnmarshaller();
MyObject o = (MyObject)u.unmarshal(is);

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多