2016-10-01 4 views
-1

У меня возникли проблемы с пониманием того, как использовать JAXB для сохранения информации о файле XML. Я создаю GUI, в котором сохраняется информация от пользователя в XML-файл. Я хочу, чтобы класс ListManagement обрабатывал это, если другой класс вызвал метод marshal(), в который он должен добавить объект в файл XML. но это не так.Могу ли я выполнить Marshalling вне моего основного метода, JAVAXB, JAVAFX

я получаю 1 отсчеты IllegalAnnotation Исключения

учащемуся 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()); 
     } 

    } 
} 

Song Class

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 заявление:

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

Тогда вы получите реальную ошибку:

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) 

Это должно быть достаточно специфичны для вас, чтобы выяснить.

При получении ошибок всегда посмотреть на полный стек tt.