0

This is my program. Is it correct way to merge two objects?

public class ObjectToXml {  
public static void main(String[] args) throws Exception{  
JAXBContext contextObj = JAXBContext.newInstance(Employee.class);  

Marshaller marshallerObj = contextObj.createMarshaller();  
marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
try{
  Employee employees = new Employee();
  employees.setEmployee(new ArrayList<Employee>());

  Employee emp1=new Employee(1,"Vimal Jaiswal",50000);  
  Employee emp2=new Employee(2,"Kamal",40000);

  employees.getEmployee().add(emp1);
  employees.getEmployee().add(emp2);
  marshallerObj.marshal(employees, new FileOutputStream("E:\\employee.xml"));  

  }
    catch(JAXBException e){
  System.out.println(e);
 }}}

Its giving output Like doulbe times:

1,"Vimal Jaiswal",50000 
2,"Kamal",40000
1,"Vimal Jaiswal",50000 
2,"Kamal",40000
1
  • can you upload the xml output, you are giving the CSV file type data Commented Jul 14, 2015 at 9:41

4 Answers 4

2

Giving a precise answer without the implementation and annotation of your Employee class is hard to do.

Therefore I wrote a small example which is highly related to yours. I hope this is helpful :)

Hint: The important part is writing the XML-Annotations.

Main.class

import java.io.FileOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class Main {
    public static void main(String[] args) throws Exception {
        JAXBContext contextObj = JAXBContext.newInstance(Employees.class);

        Marshaller marshallerObj = contextObj.createMarshaller();
        marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        try {
            Employees employees = new Employees();
            Employee emp1 = new Employee(1, "Vimal Jaiswal", 50000);
            Employee emp2 = new Employee(2, "Kamal", 40000);

            employees.getEmployees().add(emp1);
            employees.getEmployees().add(emp2);
            marshallerObj.marshal(employees, new FileOutputStream(
                    "W:\\employee.xml"));

        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Employees.class

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Employees {
    private List<Employee> employees;

    public Employees() {
        employees = new ArrayList<Employee>();
    }

    @XmlElement
    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}

Employee.class

import javax.xml.bind.annotation.XmlElement;

public class Employee {
    private int id;
    private String name;
    private int salary;

    public Employee(int id, String name, int salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    @XmlElement
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @XmlElement
    public String getName() {
        return name;
    }

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

    @XmlElement
    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }
}

The resulting XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employees>
    <employees>
        <id>1</id>
        <name>Vimal Jaiswal</name>
        <salary>50000</salary>
    </employees>
    <employees>
        <id>2</id>
        <name>Kamal</name>
        <salary>40000</salary>
    </employees>
</employees>
Sign up to request clarification or add additional context in comments.

Comments

0

Please find the below code to solve your problem,

package com.mss.sample;

import javax.xml.bind.annotation.XmlElement;

/**
 * Employee Model class
 * 
 * @author Anilkumar Bathula
 */


public class Employee {

    // Fields
    int empId;
    String empName;
    int empSal;

    public Employee(int empId, String empName, int empSal) {
        super();
        this.empId = empId;
        this.empName = empName;
        this.empSal = empSal;
    }

    @XmlElement
    public int getEmpId() {
        return empId;
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    @XmlElement
    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    @XmlElement
    public int getEmpSal() {
        return empSal;
    }

    public void setEmpSal(int empSal) {
        this.empSal = empSal;
    }

}

Serialize class:

package com.mss.sample;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Employees class
 * 
 * @author Anilkumar Bathula
 */

@XmlRootElement
public class Employees {
    private List<Employee> employees;

    public Employees() {
        employees = new ArrayList<Employee>();
    }

    @XmlElement
    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}

Mainclass of generating XML:

package com.mss.sample;

import java.io.FileOutputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import com.mss.sample.Employees;

/**
 * Marshal class
 * 
 * @author Anilkumar Bathula
 */

public class Marshal {

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

        JAXBContext contextObj = JAXBContext.newInstance(Employees.class);

        Marshaller marshallerObj = contextObj.createMarshaller();
        marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        try {

            Employees employees = new Employees();
            Employee emp1 = new Employee(1, "Vimal Jaiswal", 50000);
            Employee emp2 = new Employee(2, "Kamal", 40000);

            employees.getEmployees().add(emp1);
            employees.getEmployees().add(emp2);
            marshallerObj.marshal(employees, new FileOutputStream(
                    "D:\\employee.xml"));

        } catch (JAXBException e) {
            System.out.println(e);
        }
    }
}

Comments

0

You should use try-with-resources to close the FileStream object:

try(FileOutputStream os = new FileOutputStream("c:\\temp\\employee.xml")){
 ...

 marshallerObj.marshal(employees, os);  

}

Comments

0

Create a class with list of Employee objects

public class EmployeeList {

private List<Employee> list;

public EmployeeList(){
    list = new ArrayList<Employee>();
}

public void add(Employee e){
    list.add(e);
}

}

Then serialize this

XStream xstream = new XStream();
xstream.alias("employee", Employee.class);
xstream.alias("employees", EmployeeList.class);
xstream.addImplicitCollection(EmployeeList.class, "list");

EmployeeList list = new EmployeeList();
list.add(new Employee(1,"Vimal Jaiswal",50000));
list.add(new Employee(2,"Kamal",40000));

String xml = xstream.toXML(list);

I hope this will help.

1 Comment

XStream getting error. i did't get xstream-1.4.7. jar.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.