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

从xml到Java对象的Java jaxb反编组返回null值

党源
2023-03-14

您好,我是Jaxb新手,已经花了3个多小时搜索这个NullPointerException和这个解编组的东西,但没有找到适合我的东西。我尝试了inputStream、StringReader和Buffered reader,但当我试图将XML文件解压缩到java对象时,所有这些都导致了空值,下面是一个例外:

@XmlRootElement(name = "supplier")
@XmlAccessorType(XmlAccessType.FIELD)
public class SupplierDto {
@XmlAttribute
private String name;
@XmlAttribute(name = "is-importer")
private Boolean isImporter;

public SupplierDto() {
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Boolean getImporter() {
    return isImporter;
}

public void setImporter(Boolean importer) {
    isImporter = importer;
}
@XmlRootElement(name = "suppliers")
@XmlAccessorType(XmlAccessType.FIELD)
public class SupplierRootDto {

@XmlElement
private List<SupplierDto> supplierDtos;

public SupplierRootDto() {
}

public List<SupplierDto> getSupplierDtos() {
    return supplierDtos;
}

public void setSupplierDtos(List<SupplierDto> supplierDtos) {
    this.supplierDtos = supplierDtos;
}
JAXBContext context = JAXBContext.newInstance(SupplierRootDto.class);
    Unmarshaller unmarshaller = context.createUnmarshaller();

    String path = "suppliers.xml";
    BufferedReader reader = new BufferedReader(new FileReader(new 
File(path)));

    SupplierRootDto list = (SupplierRootDto) 
unmarshaller.unmarshal(reader);

    for (SupplierDto supplierDto : list.getSupplierDtos()) {

this.supplierRepository.saveAndFlush(this.modelMapper.map(supplierDto, 
Supplier.class));
    }

这是XML文件:

<?xml version="1.0" encoding="utf-8"?>
 <suppliers>
 <supplier name="3M Company" is-importer="true"/>
 <supplier name="Agway Inc." is-importer="false"/>
 <supplier name="Anthem, Inc." is-importer="true"/>
 <supplier name="Airgas, Inc." is-importer="false"/>
 <supplier name="Big Lots, Inc." is-importer="true"/>
 <supplier name="Caterpillar Inc." is-importer="false"/>
 <supplier name="Casey's General Stores Inc." is-importer="true"/>
 <supplier name="Cintas Corp." is-importer="false"/>
 <supplier name="Chubb Corp" is-importer="true"/>
 <supplier name="Cintas Corp." is-importer="false"/>
 <supplier name="CNF Inc." is-importer="true"/>
 <supplier name="CMGI Inc." is-importer="true"/>
 <supplier name="The Clorox Co." is-importer="false"/>
 <supplier name="Danaher Corporation" is-importer="true"/>
 <supplier name="E.I. Du Pont de Nemours and Company" is- 
 importer="false"/>
 <supplier name="E*Trade Group, Inc." is-importer="true"/>
 <supplier name="Emcor Group Inc." is-importer="true"/>
 <supplier name="GenCorp Inc." is-importer="false"/>
 <supplier name="IDT Corporation" is-importer="true"/>
 <supplier name="Level 3 Communications Inc." is-importer="false"/>
 <supplier name="Merck &amp; Co., Inc." is-importer="true"/>
 <supplier name="Nicor Inc" is-importer="false"/>
 <supplier name="Olin Corp." is-importer="true"/>
 <supplier name="Paychex Inc" is-importer="true"/>
 <supplier name="Saks Inc" is-importer="false"/>
 <supplier name="Sunoco Inc." is-importer="true"/>
 <supplier name="Textron Inc" is-importer="true"/>
 <supplier name="VF Corporation" is-importer="false"/>
 <supplier name="Wyeth" is-importer="true"/>
 <supplier name="Zale" is-importer="false"/>
</suppliers>

共有1个答案

拓拔曦
2023-03-14

问题是POJOS+注释不能正确映射到提供的XML。具体地说,在“SupplierRootDto”字段中,“SupplierDtos”需要更改或使用注释来重写如下:

@XmlRootElement(name = "suppliers")
@XmlAccessorType(XmlAccessType.FIELD)
public class SupplierRootDto {

    // ADD NAME TO MATCH THE XML ELEMENT
    @XmlElement(name = "supplier")
    private List<SupplierDto> supplierDtos;

    public SupplierRootDto() {
    }

    public List<SupplierDto> getSupplierDtos() {
        return supplierDtos;
    }

    public void setSupplierDtos(List<SupplierDto> supplierDtos) {
        this.supplierDtos = supplierDtos;
    }
}

然后它将正确地解封。

 类似资料:
  • XML响应 我为电影和图像创建了pojo类。 Film.java 形象JAVA 请帮助我是新来的,我应该使用JAXB。 解决方案: 我已经加了 在Image的getter方法中,我添加了@xmlement(name=“Image”)。 在Image类中,我添加了一个注释@XmlRootElement(name=“Image”),它提供了我想要的东西。

  • 我有以下JPQL查询: 这应该返回所有对具有NULL的。 但是,我正在运行代码并进行调试,我看到返回的集合包含此字段为null的实体。 这是JPQL中的错误吗?

  • 实际上,我试图在我的代码中实现如此基本的东西。我有一个json文件。然后我想读取这个json文件并将其转换为Java对象。为了处理它,我使用了gson,但不知何故,它为嵌套对象返回null。 JSON: TestJSON: 最后,我尝试从json文件中读取它: 但是最后,当我试图到达时,它给出了null。有什么建议吗?

  • 问题内容: 我正在制作一个应用,该应用使用Volley Networking Library for Android从URL获取a 并从其中检索JSON数据。 AppController.java MainActivity.class中的方法 它给出以下错误: 我该如何纠正此代码? 问题答案: 您需要扩展Application类而不是AppCompatActivity类。 并记住也要更新清单。即。

  • 在将Apache Camel从2.20.4升级到2.21.2甚至2.22.1之后,我的单元测试失败了,我不知道为什么。 我有一个接收XML响应的路由,我希望将其解封到一个数据类中。这在Apache Camel 2.21.2之后失败。 JAXB上下文知道给定包中的所有数据类,并选择正确的类。创建了正确的对象本身,但属性保持为NULL。在调试SAX解析器时,SAX解析器似乎故意忽略了标记之间的文本。

  • 问题内容: 如果一个方法填充/修改了一个对象,是否最好返回该对象或将返回类型保持为空,并且该方法将通过其引用来修改该对象? 我知道这是一个琐碎的问题,但是哪个是最优选的? 问题答案: 我取决于您的样式,但是返回的优点之一是:您可以调用,即可以链接方法调用。 例如,看看这是怎么做的,它允许这样的事情