JAXB 解组中的 NULL 值
NULL values in JAXB unmarshalling
嗨,我想使用 maven 依赖项使用解编组获取嵌套 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>
POJOCLASS
Vehicle.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();
}
}
}
App.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;
嗨,我想使用 maven 依赖项使用解编组获取嵌套 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>
POJOCLASS
Vehicle.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();
}
}
}
App.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;