java - JAXB 解组中的 NULL 值
问题描述
嗨,我想使用 maven 依赖项的 un-marshaling 获取嵌套 xml 的值,但最终输出返回空值。我在 maven 项目中使用了 3 个包,vehicle.xml 在获取我的值后包含 car 的值必须将它们插入访问数据库
我的 XML 文件---> Vehicle.xml
<?xml version="1.0" encoding="UTF-8"?>
<Vehicle>
<Car>
<manufacturer>Maruti</manufacturer>
<cost>675000</cost>
<name>Ciaz</name>
<fueType>Petrol</fueType>
<driverTye>Manual</driverTye>
</Car>
<Car>
<manufacturer>Maruti</manufacturer>
<cost>575000</cost>
<name>Dezire</name>
<fueType>Petrol</fueType>
<driverTye>Manual</driverTye>
</Car>
</Vehicle>
POJO类
车辆.java
package jaxb;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Vehicle")
public class Vehicle {
@XmlElement
private List<Car> car;
public List<Car> getCar() {
return car;
}
/*
* public Vehicle(List<Car> car) { super(); this.car = car; }
*/
@Override
public String toString() {
return "Vehicle[ Car="+car+"]";
}
}
Car.java(这是子 POJO)
package jaxb;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Car")
public class Car {
private String manufacturer;
private String name;
private String driverType;
private String fuelType;
private int cost;
@XmlElement
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public String getDriverType() {
return driverType;
}
public void setDriverType(String driverType) {
this.driverType = driverType;
}
@XmlElement
public String getFuelType() {
return fuelType;
}
public void setFuelType(String fuelType) {
this.fuelType = fuelType;
}
@XmlElement
public int getCost() {
return cost;
}
public void setCost(int cost) {
this.cost = cost;
}
@Override
public String toString() {
return "Car [name=" + name + ", fuelType=" + fuelType + ", cost=" + cost+",driverType="+driverType +"]";
}
VehicleJxb.java
该文件包含我们的解组方法的实现
package jaxb;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class VehicleJxb {
public void unmarhalling() {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Vehicle.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Vehicle vehicle = (Vehicle) jaxbUnmarshaller.unmarshal(new File("src\\main\\java\\Data\\Vehicle.xml"));
System.out.println(vehicle);
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
应用程序.java
package com.project.XMLDB;
import jaxb.*;
public class App
{
public static void main( String[] args )
{
VehicleJxb obj= new VehicleJxb();
obj.unmarhalling();
}
}
我的输出来了
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/C:/Users/Shivam%20Sharma/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.11/jaxb-impl-2.2.11.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Vehicle[ Car=null]
我想获取值,因为最终输出返回 null
解决方案
Unmarshaller
区分大小写。在您的 pojo 中,您有变量名car
,但在 XML 中,您有Car
. 将其更改为以下内容,它将起作用。
<?xml version="1.0" encoding="UTF-8"?>
<Vehicle>
<car>
<manufacturer>Maruti</manufacturer>
<cost>675000</cost>
<name>Ciaz</name>
<fueType>Petrol</fueType>
<driverTye>Manual</driverTye>
</car>
<car>
<manufacturer>Maruti</manufacturer>
<cost>575000</cost>
<name>Dezire</name>
<fueType>Petrol</fueType>
<driverTye>Manual</driverTye>
</car>
</Vehicle>
或者您需要明确提及。
@XmlElement(name = "Car")
private List<Car> car;
推荐阅读
- pythonanywhere - 结束后台 nohup 进程?
- scala - 如何在 Spark 中处理大参考数据
- android - 如何制作可以在全屏区域移动的浮动小部件
- powershell - IIS 回收 Powershell 部署;代码未更改设置
- python - 有没有办法在 for 中使用 os.system?
- javascript - 如何修复javascript中的“ids is not a function”错误
- python - 从键值对中的浮点值中剥离空间
- csv - 如何将 csv 文件导入 cplex
- python - 4.10 实验室:从 RGB 中去除灰色
- lua - lua 5.1 如何使用 loadstring 调用不在全局命名空间中且需要参数的函数