2012-12-09 20 views
8

समस्या यह है कि मैं 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

आप एपीआई में देखा है? –

उत्तर

5

आप पहले से ही nosferatu.xml को प्राथमिकता निर्धारण कर रहे हैं। बस हटाने या टिप्पणी पंक्ति:

marshaller.marshal(quickXML, System.out); 

आप उत्पादन को प्रदर्शित करने और बंद OutputStream करने की इच्छा नहीं करता है, तो:

os.close(); 
+0

बहुत उपयोगी !!! धन्यवाद!!! समस्या सुलझ गयी। – Ket

+0

@ रीमेमस मुझे भी इसी तरह की समस्या का सामना करना पड़ रहा है। क्या आप कृपया एक नजर डालें http://stackoverflow.com/questions/24731037/marshalling-java-objects-into-xml-using-jaxb?noredirect=1#comment38381440_24731037 – Lucy

1

Marshaller#marshall(...) विधि पैरामीटर के रूप में एक OutputStream या लेखक लेता है। निश्चित रूप से आप इसे एपीआई में पाएंगे यदि आपने देखा था।

1

यह सिर्फ है जावा ऑब्जेक्ट से xml फ़ाइल में एक रूपांतरण प्रक्रिया। यह क्रमिकरण के समान है, आपको सीरियलाइजेशन और मार्शलिंग के बारे में निश्चित होना चाहिए। यहां मैंने मार्शलिंग के लिए नमूने किए हैं। आप एक समान तरीके से unmarshalling कर सकते हैं।

jaxp एनोटेशन के साथ

सेम वर्ग:

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

मार्शलिंग:

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