2015-06-05 4 views
0

Я пытаюсь удалить файл xml, но я получаю исключение связывания, я новичок в использовании xml и схем с java, но из того, что я могу сказать, это похоже на проблему с пространствами имен, когда он пытается привязать xml к схеме xsd, которую я использую.исключение unmarshalling xml-файл с помощью jaxb

Я пытался это обработать, и я не могу найти проблему. Заранее спасибо.

Это исключение им получить:

javax.xml.bind.UnmarshalException: unexpected element (URI:"", local:"programacioAula"). Expected elements are <{http://www.xtec.cat/ProgramacioAula}programacioAula> 

Это объявление пространства имен на XML:

<programacioAula 
    xmlns:tns="http://www.xtec.cat/ProgramacioAula" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.xtec.cat/ProgramacioAula ProgramacioAula.xsd "> 

Это объявление пространства имен на XSD:

<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.xtec.cat/ProgramacioAula" 
    xmlns:tns="http://www.xtec.cat/ProgramacioAula" 
    elementFormDefault="unqualified" 

    attributeFormDefault="unqualified"> 

    <element name="programacioAula" type="tns:ProgramacioAula"></element> 

Это pojo с аннотациями XML:

// 
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.0-b52-fcs 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2015.06.04 at 10:32:59 PM CEST 
// 


package dani.java.model; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 


/** 
* <p>Java class for ProgramacioAula complex type. 
* 
* <p>The following schema fragment specifies the expected content contained within this class. 
* 
* <pre> 
* &lt;complexType name="ProgramacioAula"> 
* &lt;complexContent> 
*  &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
*  &lt;sequence> 
*   &lt;element name="resum" type="{http://www.xtec.cat/ProgramacioAula}Resum"/> 
*   &lt;element name="unitatsFormatives" type="{http://www.xtec.cat/ProgramacioAula}UnitatsFormatives"/> 
*  &lt;/sequence> 
*  &lt;/restriction> 
* &lt;/complexContent> 
* &lt;/complexType> 
* </pre> 
* 
* 
*/ 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "programacioAula",namespace="http://www.xtec.cat/ProgramacioAula", propOrder = { 
    "resum", 
    "unitatsFormatives" 
}) 
@XmlRootElement(name = "programacioAula") 
public class ProgramacioAula { 

    @XmlElement(required = true) 
    protected Resum resum; 
    @XmlElement(required = true) 
    protected UnitatsFormatives unitatsFormatives; 

    /** 
    * Gets the value of the resum property. 
    * 
    * @return 
    *  possible object is 
    *  {@link Resum } 
    *  
    */ 
    public Resum getResum() { 
     return resum; 
    } 

    /** 
    * Sets the value of the resum property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link Resum } 
    *  
    */ 
    public void setResum(Resum value) { 
     this.resum = value; 
    } 

    /** 
    * Gets the value of the unitatsFormatives property. 
    * 
    * @return 
    *  possible object is 
    *  {@link UnitatsFormatives } 
    *  
    */ 
    public UnitatsFormatives getUnitatsFormatives() { 
     return unitatsFormatives; 
    } 

    /** 
    * Sets the value of the unitatsFormatives property. 
    * 
    * @param value 
    *  allowed object is 
    *  {@link UnitatsFormatives } 
    *  
    */ 
    public void setUnitatsFormatives(UnitatsFormatives value) { 
     this.unitatsFormatives = value; 
    } 

} 

Это метод, где я пытаюсь маршализацией файла:

public static ProgramacioAula readXML(File file) { 
     ProgramacioAula programacioAula = null; 
     try { 
      JAXBContext jaxbContext = JAXBContext.newInstance(dani.java.model.ObjectFactory.class); 
      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      programacioAula = (ProgramacioAula) jaxbUnmarshaller.unmarshal(file); 

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

ответ

0

Ваш XML находится в пространстве имен по умолчанию:

<programacioAula 
    xmlns:tns="http://www.xtec.cat/ProgramacioAula" 

Я подозреваю, что вам может понадобиться либо

<tns:programacioAula 
    xmlns:tns="http://www.xtec.cat/ProgramacioAula" 

или

<programacioAula 
    xmlns="http://www.xtec.cat/ProgramacioAula" 
+0

Во втором решении исправлена ​​проблема, спасибо человеку. Теперь элементы children являются нулевыми, поэтому вам нужно сразиться. ; д – Nagarz

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