2014-09-10 1 views
2

Я запускаю jaxb в следующем XML-файле.JaxB unmarshall ошибка неожиданного элемента

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<planet> 
    <animal>bear</animal> 
</planet> 

Использование следующего кода java.

import java.io.File; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.bind.annotation.XmlRootElement; 
@XmlRootElement(name="planet") 
public class Read_Test{ 
    public static void main(String[] args) throws JAXBException { 
     File file = new File("/home/devel/Desktop/a.xml"); 
     JAXBContext jaxbContext = JAXBContext.newInstance(String.class); 
     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
     String planet = (String) jaxbUnmarshaller.unmarshal(file); 
     System.out.println(planet); 
    } 
} 

и следующая ошибка продолжает появляться.

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"planet"). Expected elements are (none) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:605) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3138) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203) 
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171) 
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189) 
    at adsss.test.xml.Read_Test.main(Read_Test.java:14) 

Однако у меня есть @XmlRootElement(name="planet") элемент, определенный таким образом это не должно быть неожиданным элементом. Что может вызвать непредвиденную ошибку элемента?

ответ

2

На основе вашего кода вы хотите размонтировать экземпляр String из XML. Очевидно, String не определяет элемент planet в любом месте.

Вы хотите распаковать в Read_test экземпляр:

JAXBContext jaxbContext = JAXBContext.newInstance(Read_test.class); 

Кроме того, вы можете захотеть добавить атрибут animal к вашему Read_test класса еще вы не увидите, что данные из XML в любом сохраненную.

Например:

@XmlRootElement(name="planet") 
public class Read_Test{ 
    @XmlElement 
    private String animal; 

    // Rest of your class 
} 

И если вы хотите увидеть, что чтение животных, печать, что:

System.out.println(planet.animal); 
+0

Спасибо, что работали. Принятый ответ. – jgr208

 Смежные вопросы

  • Нет связанных вопросов^_^