2013-04-01 11 views
5

Tôi nhận được lỗi sau: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> 

gốc tập tin lớp yếu tố của tôi là:

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

tập tin package.info của tôi là:

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

cho tôi biết tôi có thể làm gì để sửa lỗi này

Trả lời

5

TL; DR

Bạn có thêm/ở cuối không gian tên được chỉ định trong chú thích @XmlRootElement.


DÀI ĐÁP

gói-info

Không gian tên được quy định một cách chính xác ở mức gói @XmlSchema chú thích:

@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

Nhưng bạn đã ghi đè nó với một không gian tên không chính xác trên lớp ClientConfig. Bạn có thêm / ở cuối không gian tên được chỉ định trong chú thích @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 {} 

Vì bạn tuyên bố không gian tên trên @XmlSchema trên lớp package-info bạn không cần phải lặp lại nó trên @XmlRootElement.

package com.convertXml.docSite.XmlConverter; 

import javax.xml.bind.annotation.XmlRootElement; 

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

Demo

Bây giờ unmarshal sẽ làm việc một cách chính xác:

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

} 

Để biết thêm thông tin

+2

Cảm ơn Blasie..it đã làm việc – dreambigcoder