2013-04-01 5 views
5

otrzymuję następujący błąd: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> 

mój główny plik klasy elementów wynosi:

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

mój plik package.info jest:

@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; 

daj mi znać, co mogę zrobić, aby to naprawić

Odpowiedz

5

TL; DR

Masz dodatkowy/na końcu przestrzeni nazw określony w adnotacji @XmlRootElement.


długa odpowiedź

pakiet-info

Przestrzeń nazw jest określona prawidłowo w poziomie pakietu @XmlSchema adnotacji:

@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

Ale zastąpiłeś go niepoprawną przestrzenią nazw w klasie ClientConfig. Na końcu przestrzeni nazw określonej w adnotacji @XmlRooElement masz dodatkową wartość /.

package com.convertXml.docSite.XmlConverter; 

import javax.xml.bind.annotation.XmlRootElement; 

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

Ponieważ ogłoszony nazw na @XmlSchema od klasy package-info nie trzeba powtarzać go na @XmlRootElement.

package com.convertXml.docSite.XmlConverter; 

import javax.xml.bind.annotation.XmlRootElement; 

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

Demo

Teraz unmarshal będzie działać poprawnie:

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); 
    } 

} 

Aby uzyskać więcej informacji

+2

Dzięki Blasie..działa – dreambigcoder