java JAXB:尝试使用JAXB解组XML时发生类强制转换异常
我是JAXB的新手,我正在尝试使用JAXB进行采样
试图显示菜单列表中的值。xml
----美努利斯特。xml-----------
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<menulist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Category1 name="Development">
<MenuItem1>Projects</MenuItem1>
<MenuItem2>Library</MenuItem2>
<MenuItem3>Library1</MenuItem3>
</Category1>
</menulist>
------------------------------美努利斯特。xsd-------------------
<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio Developer Edition (Trial) 8.0.11.2171 (http://www.liquid-technologies.com)-->
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="menulist">
<xs:complexType>
<xs:sequence>
<xs:element name="Category1">
<xs:complexType>
<xs:attribute name="MenuItem1" type="xs:string" use="required" />
<xs:attribute name="MenuItem2" type="xs:string" use="required" />
<xs:attribute name="MenuItem3" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
UI使用命令运行xsd文件并生成类。 菜单列表和对象工厂
AppTest。java
package com.xx.menu;
import java.io.File;
import java.io.IOException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.UnmarshalException;
import javax.xml.bind.Unmarshaller;
public class TestNew {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
JAXBContext jc = JAXBContext.newInstance("com.xx.menu"); //Create unmarshaller
Unmarshaller um = jc.createUnmarshaller();
File file = new File ("C:\\sample\\menulist.xml");
JAXBElement element = (JAXBElement)um.unmarshal(file);
Menulist menulist= (Menulist) element.getValue ();
System.out.println("name : "+menulist.getMenu());
}
catch( UnmarshalException ue ) {
ue.printStackTrace();
System.out.println( "Caught UnmarshalException" );
} catch( JAXBException je ) {
je.printStackTrace();
} catch( Exception ioe ) {
ioe.printStackTrace();
}
}
}
错误:
java.lang.ClassCastException: com.xx.menu.Menulist
at com.xx.menu.TestNew.main(TestNew.java:26)
你能帮我找出哪里出了问题吗。。。我将非常感谢你
谢谢
# 1 楼答案
当类或属性本身不包含足够的信息来指示应该将哪个元素写入XML时,JAXB使用
JAXBElement
@XmlRootElement
在您的示例中,
Menulist
类对应于menulist
元素。因为在模式中,元素具有匿名复杂类型,所以一个元素与从相应复杂类型生成的类相关联@xmlementdecl
如果在您的示例中
menulist
元素对应于一个命名的复杂类型,那么可能有多个元素对应于从该复杂类型生成的同一个类。不是用@XmlRootElement
注释类,而是在ObjectFactory
类上生成一个或多个@XmlElementDecl
注释。这将导致JAXBElement
被取消签名处理所有结果
如果您不知道是否会返回
JAXBElement
,可以利用JAXBIntrospector
进行任何必要的展开了解更多信息