2017-07-18 5 views
0

für XML-Datei Parsing I JAXB verwenden aber nach der Kompilierung folgende FehlerJAXBException: kein Paketname wird

gemeldet
javax.xml.bind.JAXBException: No package name is given 
at javax.xml.bind.ContextFinder.find(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at javax.xml.bind.JAXBContext.newInstance(Unknown Source) 
at searchAlgo.Question.<init>(Question.java:16) 

Code wird unter

import java.io.File; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 

public class Question { 
//String question = new String() ; 
String s = new String(); 
Question() 
{ 
    try{ 
     File file = new File("C:\\Users\\Username\\Documents\\levels.xml"); 
     JAXBContext jaxbContext = JAXBContext.newInstance(s); 

     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
     String string = (String) jaxbUnmarshaller.unmarshal(file); 

     System.out.println(string); 


    } 
    catch(JAXBException e){ 
     e.printStackTrace(); 
    } 
}} 

gegeben brauche ich JAXB Stecker installieren -im? Ich benutze jdk 1.8.0_91 und Eclipse Mars

+0

Diese Frage wurde zuvor gestellt. https://stackoverflow.com/questions/20273355/why-does-jaxbcontext-need-to-be-told-spezifically-about-a-class-that-ist-ready – user8271644

Antwort

1

Ihr Problem ist, dass Sie JAXB nicht korrekt verwenden.

Zuerst

JAXBContext jaxbContext = JAXBContext.newInstance(s); 

ist falsch, weil JAXBContext.newInstance(...) ist entweder eine Klasse oder „getrennt Java-Paketnamen, die schema-abgeleiteten Klassen und/oder vollständig qualifizierte JAXB-kommentierten Klassen enthalten“ erwartete nach documentation

Der Punkt ist zu bestimmen, welche Art von Objekten JAXB hat. Mit anderen Worten, es wird sein, was für Objekte Sie in der XML-Datei C:\\Users\\Username\\Documents\\levels.xml haben.

Zweitens

wenn Sie Objekte aus XML-Datei oder marshall-Objekte in String entordnen wollen, empfehle ich Ihnen die folgende Dokumentation mit vielen Beispielen zu lesen:

1

JAXBContext.newInstance() erwartet entweder eine Klasse oder einen Paketnamen. Da s ein String ist, wird er als Paketname interpretiert. Aber Ihre Zeichenfolge ist leer, so dass Sie erhalten "Kein Paketname ist gegeben"