2016-10-01 6 views
-1

JAXBを使用してXMLファイルの情報を保存する方法を理解できません。私はXMLファイルにユーザーからの情報を保存するGUIを構築しています。私は、ListManagementクラスでこれを処理するために、オブジェクトをXMLファイルに追加するmarshal()メソッドを別のクラスで呼び出させたいと考えています。しかしそれはしません。メインメソッドJAXXB、JAVAFXの外部でマーシャリングを実行することができます

私はIllegalAnnotation例外の1つのカウント

ListManagementクラス

import java.io.File; 

import javax.xml.bind.JAXBContext; 

import javax.xml.bind.Marshaller; 

public class ListManagement 

{ 

    File file = new File("src\\view\\DataFile.xml");  

    public ListManagement() 
    { 

    } 

    public void marshal(Song track) 
    { 
     try 
     { 
      JAXBContext context = JAXBContext.newInstance(Song.class); 
      Marshaller m = context.createMarshaller(); 
      m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
      m.marshal(track, file); 
     } 
     catch(Exception e) 
     { 
      System.out.println("ERROR" + e.getMessage()); 
     } 

    } 
} 

ソングクラス

import javax.xml.bind.annotation.*; 


@XmlRootElement 

public class Song 
{ 
    private String name; 

    public Song(String name) 
    { 
     this.name = name; 

    } 

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

    public String getName() 
    { 
     return name; 
    } 


    public String toString() 
    { 
     return this.name; 
    } 

} 

答えて

1

エラーメッセージを非表示に停止する場合は、あなたが表示されますを取得しますなにが問題ですか。

にご catchステートメントを変更し

:あなたが把握するための十分な特異的であるべきである

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 
Song does not have a no-arg default constructor. 
    this problem is related to the following location: 
     at Song 

    at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:445) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123) 
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247) 
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234) 
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:462) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641) 
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584) 
    at ListManagement.marshal(Test.java:18) 
    at Test.main(Test.java:8) 

:次に、あなたが本当のエラーが発生します

catch(Exception e) 
{ 
    e.printStackTrace(System.out); 
} 

エラーが発生した場合、は常にとなります。full stacktraceをご覧ください。

関連する問題