2012-12-09 4 views
8

Problem ist, wie erzeuge ich XML-Datei-Ausgabe statt System.out?JAXB Marshalling Java zur Ausgabe von XML-Datei

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

Haben Sie in der API sehen? –

Antwort

5

Sie ordnen sich bereits auf nosferatu.xml an. entfernen oder kommentieren Sie einfach die Zeile:

marshaller.marshal(quickXML, System.out); 

, wenn Sie nicht wollen, die Ausgabe anzuzeigen und die OutputStream schließen:

os.close(); 
+0

sehr hilfreich !!! Vielen Dank!!! Problem gelöst. – Ket

+0

@Reimeus Ich bin auch mit einem ähnlichen Problem konfrontiert. Könnten Sie bitte einen Blick http://StackOverflow.com/Questions/24731037/Marshalling-JavaObjects-into-xml-using-Jaxb?noredirect=1#Comment38381440_24731037 – Lucy

1

Marshaller#marshall(...) Methode nimmt ein Outputstream oder Writer als Parameter. Sicher hättest du das in der API gefunden, wenn du geschaut hättest.

1

Es ist nur ein Konvertierungsprozess von Java-Objekt zu XML-Datei. Es ist ziemlich ähnlich zur Serialisierung, Sie müssen sich über Serialisierung und Marshalling sicher sein. Hier habe ich die Beispiele für das Marshalling gemacht. Sie können das Entmapseln auf ähnliche Weise durchführen.

Bean-Klasse mit jaxp Anmerkungen:

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

Rangierung:

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); 
    } 
}