java.lang.ClassCastException:com.kk.COUNTRY不能强制转换为javax.xml.bind.JAXBElement
我的主课是java.lang.ClassCastException:com.kk.COUNTRY不能强制转换为javax.xml.bind.JAXBElement,java,jaxb,classcastexception,unmarshalling,Java,Jaxb,Classcastexception,Unmarshalling,我的主课是 public static void main(String[] args) throws JAXBException, FileNotFoundException { Class[] classes = new Class[5]; classes[0] = com.kk.AddressDetails.class; classes[1] = com.kk.COUNTRY.class; classes[2] = com.kk.O
public static void main(String[] args) throws JAXBException,
FileNotFoundException {
Class[] classes = new Class[5];
classes[0] = com.kk.AddressDetails.class;
classes[1] = com.kk.COUNTRY.class;
classes[2] = com.kk.ObjectFactory.class;
classes[3] = com.kk.Details.class;
classes[4] = com.kk.Districts.class;
JAXBContext context = JAXBContext.newInstance(classes);
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement<COUNTRY> unmarshal = (JAXBElement<COUNTRY>) unmarshaller
.unmarshal(new File("src\\countrydetails.xml"));
COUNTRY value = unmarshal.getValue();
System.out.println(value);
publicstaticvoidmain(字符串[]args)抛出jaxbeexception,
FileNotFoundException{
类别[]类别=新类别[5];
classes[0]=com.kk.AddressDetails.class;
类别[1]=com.kk.COUNTRY.class;
类[2]=com.kk.ObjectFactory.class;
类别[3]=com.kk.Details.class;
类别[4]=com.kk.Districts.class;
JAXBContext context=JAXBContext.newInstance(类);
Unmarshaller Unmarshaller=context.createUnmarshaller();
JAXBElement解组器=(JAXBElement)解组器
.unmarshal(新文件(“src\\countrydetails.xml”);
国家值=unmarshal.getValue();
系统输出打印项次(值);
因此,在编译此文件时,我在线程“main”java.lang.ClassCastException中遇到了一个异常:com.kk.COUNTRY不能转换为javax.xml.bind.JAXBElement
在main.kk.ClientApp.main(ClientApp.java:31)上,这是因为
Unmarshaller.unmarshal(文件f)
返回一个对象,而不是JAXBElement
签名如下:
public Object unmarshal( java.io.File f ) throws JAXBException;
您的解决方案应该是:
COUNTRY value = unmarshaller.unmarshal(new StreamSource(new File("src\\countrydetails.xml")), COUNTRY.class);
您不需要将解组结果强制转换为JAXBElement,您要解组的应该是您的国家/地区类。假设您已正确注释了COUTNRY类,那么您只需执行以下操作:
COUNTRY unmarshal = (COUNTRY) unmarshaller
.unmarshal(new File("src\\countrydetails.xml"));
遵循本教程,通过简单示例了解JAXB编组和解编:
由于您的COUNTRY
类用@XmlRootElement
注释,这意味着它与根元素唯一关联,解组操作的结果将是COUNTRY
COUNTRY c = (COUNTRY) unmarshaller.unmarshal(xml);
相反,如果COUNTRY
有一个或多个对应的@xmlementdecl
注释,或者您使用了unmarshal
方法,该方法采用了Class
参数,您将获得JAXBElement
JAXBElement<COUNTRY> c = unmarshaller.unmarshal(xml, COUNTRY.class);
JAXBElement c=unmarshaller.unmarshal(xml,COUNTRY.class);
了解更多信息
java区分大小写。我怀疑COUNTRY应该是com.kk.COUNTRY.classIsCOUNTRY
xml文件的根目录?@Bhavik-Shah:不是COUNTRY@TheNewIdiot是的,国家是xml的根