Java >> Java tutorial >  >> Tag >> XML

XML til java objekt ved hjælp af jaxb Unmarshalling navneområde

Jeg har nedenfor employee.xml som jeg forsøger at konvertere til Java Object ved hjælp af JAXB. Jeg får null-værdi her, vær venlig at vejlede mig, hvad jeg mangler her eller gør forkert.

Jeg er ikke bekendt med JAXB og navneområdet <employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schema.cs.csg.com/cs/ib/cpm"> Jeg ved, at jeg mangler en annotering eller ikke bruger den korrekt.

Output:

Employee [id=null, firstName=null, lastName=null, department=null]

medarbejder.xml

<?xml version="1.0"?>
<employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlnx="http://schema.cs.csg.com/cs/ib/cpm">
    <department>
        <id>101</id>
        <name>IT</name>
    </department>
    <firstName>Rakesh</firstName>
    <id>1</id>
    <lastName>Yadav</lastName>
</employee>

Employee.java

package com.cs.xmltojava

import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name = "employee", namespace="http://schema.cs.csg.com/cs/ib/cpm")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Employee implements Serializable {
 
    private static final long serialVersionUID = 1L;
     
    private Integer id;
    private String firstName;
    private String lastName;
    private Department department;
     
    public Employee() {
        super();
    }
 
    public Employee(int id, String fName, String lName, Department department) {
        super();
        this.id = id;
        this.firstName = fName;
        this.lastName = lName;
        this.department = department;
    }
 
    //Setters and Getters
    public Integer getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
    
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Department getDepartment() {
        return department;
    }
 
    public void setDepartment(Department department) {
        this.department = department;
    }
    
    @Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", department="+ department + "]";
    }
}

Department.java

package com.cs.xmltojava

import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "department", namespace="http://schema.cs.csg.com/cs/ib/cpm")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Department implements Serializable {
     
    private static final long serialVersionUID = 1L;
     
    Integer id;
    String name;
     
    public Department() {
        super();
    }
 
    public Department(Integer id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
     
    //Setters and Getters
    public Integer getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String toString() {
        return "Department [id=" + id + ", name=" + name + "]";
    }
} 

EmployeeMain.java

package com.cs.xmltojava

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class EmployeeMain {

    public static void main(String[] args) throws Exception {

        File xmlFile = new File("employee.xml");
 
        JAXBContext jaxbContext;
        try
        {
            jaxbContext = JAXBContext.newInstance(Employee.class);              
 
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
 
            Employee employee = (Employee) jaxbUnmarshaller.unmarshal(xmlFile);
     
            System.out.println(employee);
        }
        catch (JAXBException e) 
        {
            e.printStackTrace();
        }
 
    }
 
}

Svar

opret package-info.java i din pakke og fjern

namespace="http://schema.cs.csg.com/cs/ib/cpm" fra @XmlRootElement.

package-info.java

@XmlSchema(
    namespace="http://schema.cs.csg.com/cs/ib/cpm",
    elementFormDefault=XmlNsForm.QUALIFIED
)
package com.cs.xmlparser;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

Java tag