2013-04-01 2 views
5

Я получаю следующее сообщение об ошибке:javax.xml.bind.UnmarshalException

javax.xml.bind.UnmarshalException: unexpected element(uri:"http://www.docsite.com/ClientConfig.xsd", local:"ClientConfig"). 
Expected elements are <{http://www.docsite.com/ClientConfig.xsd/}ClientConfig> 

мой корневой файл класса элемент является:

@XmlRootElement(name="ClientConfig",namespace="http://www.docsite.com/ClientConfig.xsd/") 
public class ClientConfig {} 

мой файл package.info является:

@XmlSchema(namespace="http://www.docsite.com/ClientConfig.xsd",elementFormDefault=XmlNsForm.QUALIFIED) 

package com.convertXml.docSite.XmlConverter; 
import javax.xml.bind.annotation.XmlSchema; 
import javax.xml.bind.annotation.XmlNsForm; 

Дайте мне знать, что исправить это

ответ

5

TL; DR

У вас есть дополнительный/в конце пространства имен, указанный в аннотации @XmlRootElement.


LONG ОТВЕТ

пакет-инфо

Пространство имен правильно указано в уровне пакета @XmlSchema аннотацию:

@XmlSchema(namespace="http://www.docsite.com/ClientConfig.xsd",elementFormDefault=XmlNsForm.QUALIFIED) 
package com.convertXml.docSite.XmlConverter; 

import javax.xml.bind.annotation.XmlSchema; 
import javax.xml.bind.annotation.XmlNsForm; 

ClientConfig

Но вы переопределили его с неправильным пространством имен в классе ClientConfig. У вас есть дополнительные / в конце пространства имен, указанного в аннотации @XmlRooElement.

package com.convertXml.docSite.XmlConverter; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="ClientConfig",namespace="http://www.docsite.com/ClientConfig.xsd/") 
public class ClientConfig {} 

Поскольку вы объявили пространство имен на @XmlSchema на package-info класса вам не нужно повторять его на @XmlRootElement.

package com.convertXml.docSite.XmlConverter; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="ClientConfig") 
public class ClientConfig {} 

Demo

Теперь unmarshal будет работать правильно:

package com.convertXml.docSite.XmlConverter; 

import java.io.StringReader; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(ClientConfig.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     StringReader xml = new StringReader("<ClientConfig xmlns='http://www.docsite.com/ClientConfig.xsd'/>"); 
     ClientConfig clientConfig = (ClientConfig) unmarshaller.unmarshal(xml); 
    } 

} 

Для получения более подробной информации

+2

Thanks Blasie..it работал – dreambigcoder

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