2012-12-09 11 views
8

問題はどうやってsystem.outではなくXMLファイルの出力を生成するのですか?JAXB XMLを整形してXMLファイルを出力する

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

あなたはAPIで見たことがありますか? –

答えて

5

あなたはすでにnosferatu.xmlにマーシャリングしています。ただ、行を削除するかコメント:

marshaller.marshal(quickXML, System.out); 

あなたは出力を表示してOutputStreamクローズしたくない場合:

os.close(); 
+0

非常に役立ちます!ありがとう!問題が解決しました。 – Ket

+0

@Reimeus私も同様の問題に直面しています。どうぞご覧くださいhttp://stackoverflow.com/questions/24731037/marshalling-java-objects-into-xml-using-jaxb?noredirect=1#comment38381440_24731037 – Lucy

1

Marshaller#marshall(...)メソッドは、パラメータとしてのOutputStreamまたはWriterをとります。もしあなたが見ていれば、APIでこれを見つけたでしょう。あなたはjava.io.Fileオブジェクトに直接マーシャリングすることができ、その後

1

それはちょうどですJavaオブジェクトからXMLファイルへの変換処理。 シリアライゼーションと非常によく似ています。シリアライゼーションとマーシャリングについては、必ず理解しておく必要があります。 ここではマーシャリング用のサンプルを作成しました。同様の方法で非整列化を行うことができます。 JAXP注釈付き

Beanクラス:

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); 
    } 
} 
関連する問題