JAXB marshalling Java to output XML file

不打扰是莪最后的温柔 提交于 2019-12-23 07:29:19

问题


problem is how do i generate XML file output instead of system.out?

package jaxbintroduction;

import java.io.FileOutputStream;
import java.io.OutputStream;

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        itemorder.Book quickXML = new itemorder.Book();

        quickXML.setAuthor("Sillyme");
        quickXML.setDescription("Dummie book");
        quickXML.setISBN(123456789);
        quickXML.setPrice((float)12.6);
        quickXML.setPublisher("Progress");
        quickXML.setTitle("Hello World JAVA");

        try {            
            javax.xml.bind.JAXBContext jaxbCtx = javax.xml.bind.JAXBContext.newInstance(quickXML.getClass().getPackage().getName());
            javax.xml.bind.Marshaller marshaller = jaxbCtx.createMarshaller();
            marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8"); //NOI18N
            marshaller.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.marshal(quickXML, System.out);
            OutputStream os = new FileOutputStream( "nosferatu.xml" );
            marshaller.marshal( quickXML, os );

        } catch (javax.xml.bind.JAXBException ex) {
            // XXXTODO Handle exception
            java.util.logging.Logger.getLogger("global").log(java.util.logging.Level.SEVERE, null, ex); //NOI18N
        }
    }

}

回答1:


You are already marshalling to nosferatu.xml. Just remove or comment the line:

marshaller.marshal(quickXML, System.out);

if you don't wish to display the output and close the OutputStream:

os.close();



回答2:


If you are using a JAXB 2.1 or greater then you can marshal directly to a java.io.File object:

 File file = new File( "nosferatu.xml" );
 marshaller.marshal( quickXML, file );

Corrsponding Javadoc

  • http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html#marshal%28java.lang.Object,%20java.io.File%29



回答3:


Marshaller#marshall(...) method takes an OutputStream or Writer as parameter. Surely you would have found this in the API if you had looked.




回答4:


It is just an conversion process from java object to xml file. It is quite similar to serialization, you must be sure about serialization and marshalling. Here I have done the samples for marshalling. You can do unmarshalling in a similar way.

bean class with jaxp annotations:

package com.ofs.swinapps;

import javax.xml.bind.annotation.XmlRootElement;

    @XmlRootElement
    public class Employee {
    private String name;
    private String id;
    private String department;
    private int age;
    private int salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public int getAge() {
        return age;
}

    public void setAge(int age) {
        this.age = age;
    }

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

marshalling:

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

public class Java2XMLExample {
    public static void main(String[] args) throws JAXBException {
 Employee employee = new Employee();
 employee.setName("Kowthal ganesh");
 employee.setAge(23);
 employee.setDepartment("Chola-ccms");
 employee.setId("947");
 employee.setSalary(8333);
 File file = new File("D:/build.xml");
 JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class);
 Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
 jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
 jaxbMarshaller.marshal(employee, file);
    }
}


来源:https://stackoverflow.com/questions/13788617/jaxb-marshalling-java-to-output-xml-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!