Значения NULL в JAXB для демаршаллинга - PullRequest
1 голос
/ 24 сентября 2019

HI Я хочу получить значение вложенного xml, используя немаршалинг с использованием зависимости maven, но окончательный вывод возвращает мне нулевые значения . Я использовал 3 пакета в проекте maven, а vehicle.xml содержитзначения автомобиля после получения значений, которые я должен вставить в базу данных доступа

МОЙ 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 CLASS

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]

Я хочу получить значения, так как окончательный результат возвращается ноль

1 Ответ

3 голосов
/ 24 сентября 2019

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;
...