




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAXB解析xml文件转换为POJOMarshal 和 UnMarshal的过程并不复杂,只需要从JAXBContext中获得Marshaller或Unmarshaller对象,就可以让JAXB帮我们 来进行转换。1.将 xml 文件中的各个节点和属性信息创建对应的Java模型2.在Java模型中的创建与 xml 文件对应的节点和属性需要用注解来表示XmlRootElement 将一个Java类映射为一段XML的根节点参数:name 定义这个根节点的名称namespace 定义这个根节点命名空间XmlAccessorType 定义映射这个类中的何种类型需要映射到XML。可接收四个参数,分别是:XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XMLXmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)XmlAccessType.NONE:不映射XmlElement 指定一个字段或get/set方法映射到XML的节点。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。参数:defaultValue 指定节点默认值name 指定节点名称namespace 指定节点命名空间 required 是否必须(默认为false) nillable 该字段是否包含 nillable=true 属性(默认为false) type 定义该字段或属性的关联类型XmlAttribute 指定一个字段或get/set方法映射到XML的属性。参数:name 指定属性名称namespace 指定属性命名空间required 是否必须(默认为false)XmlTransient 定义某一字段或属性不需要被映射为XML。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一get/set方法的字段上标注此注解,那么该属性则不会被映射。XmlType 定义映射的一些相关规则参数:propOrder 指定映射XML时的节点顺序factoryClass 指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身factoryMethod 指定工厂类的工厂方法name 定义XML Schema中type的名称namespace 指定Schema中的命名空间XmlElementWrapper 为数组元素或集合元素定义一个父节点。如,类中有一元素为List items,若不加此注解,该元素将被映射为 . .这种形式,此注解可将这个元素进行包装,如: XmlElementWrapper(name=items) XmlElement(name=item) public List items;将会生成这样的XML样式: . . XmlJavaTypeAdapter 自定义某一字段或属性映射到XML的适配器。如,类中包含一个接口,我们可以定义一个适配器(继承自 javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口如何映射到XML。XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中 .这种形式,此注解可将这个元素进行包装,如: XmlElementWrapper(name=items) XmlElement(name=item) public List items;将会生成这样的XML样式: . . XmlJavaTypeAdapter 自定义某一字段或属性映射到XML的适配器。如,类中包含一个接口,我们可以定义一个适配器(继承自 javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口如何映射到XML。XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中 . XmlJavaTypeAdapter 自定义某一字段或属性映射到XML的适配器。如,类中包含一个接口,我们可以定义一个适配器(继承自 javax.xml.bind.annotation.adapters.XmlAdapter类),指定这个接口如何映射到XML。XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中3.示例代码/Java EntityXmlAccessorType(XmlAccessType.FIELD)XmlRootElement(name = automation)public class JavaBean XmlAttribute(name = service) private String serviceName; XmlElementWrapper(name = rules) XmlElement(name = rule) private List rules; XmlElementWrapper(name = actions) XmlElement(name = action) private List actions; public List getRules() return rules; public String getServiceName() return serviceName; public void setServiceName(String serviceName) this.serviceName = serviceName; public void setRules(List rules) this.rules = rules; public List getActions() return actions; public void setActions(List actions) this.actions = actions; /ObjectFactoryXmlRegistrypublic class ObjectFactory private final static QName _Configurations_SCALERULE_QNAME = new QName( /cloudCube/cloudview, entities); public ObjectFactory() public Action createAction() return new Action(); public ActionProperty createActionProperty() return new ActionProperty(); public JavaBean createJavaBean() return new JavaBean(); public Dimension createDimension() return new Dimension(); public Rule createRule() return new Rule(); /解析public static Object unmarshal(InputStream input, String classPath, String schemaResPath, ClassLoader classLoader) throws JAXBException, SAXException JAXBContext jaxbContext = JAXBContext.newInstance(classPath, classLoader); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); if (schemaResPath != null & !schemaResPath.isEmpty() URL schemaURL = classLoader.getResource(schemaResPath); Schema schema = schemaFactory.newSchema(schemaURL); unmarshaller.setSchema(schema); Object obj = unmarshaller.unmarshal(input); return obj; /转换public static Object convertor(String fi) throws Exception ClassLoader classLoader = ObjectFactory.class.getClassLoader(); String contextPath = ObjectFactory.class.getPackage().getName(); File file = new File(fi); if (!file.isDirectory() InputStream input = new FileInputStream(file); JavaBean bean = (JavaBean) XMLMarshallUtil.unmarshal(input, contextPath, null, classLoader); return bean; else File fs = file.listFiles(); List list = new ArrayList(); for (int i = 0; i fs.length; i+) InputStream input = new FileInputStream(fsi); JavaBean bean = (JavaBean) XMLMarshallUtil.unmarshal(input, contextPath, null, classLoader); list.add(bean); return list; /main函数public static void main(String args) throws Exception Object obj = Test.convertor(bin/conf/); if (obj instanceof JavaBean) JavaBean bean = (JavaBean) obj; System.out.println(bean.getServiceName(); if (obj instanceof List) List list = (List) obj; for (JavaBean bean : list) System.out.println(bean.getActions().get(1).getActionName(); 4.解析过程中出现异常1)解析文件中JAXBContext.newInstance(Service.class)创建新的实例错误,正确的是 (ServiceMetric.class)javax.xml.bind.UnmarshalException- with linked exception:java.io.IOException: Stream closed2)使用 StreamSource 类出现的异常StreamSource streamSource = new StreamSource(read); root = (Service) um.unmarshal(streamSource);javax.xml.bind.UnmarshalEx
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政职业能力测试题及答案
- 人保财险考试题库及答案
- 农发行郴州市桂东县2025秋招半结构化面试题库及参考答案
- 农发行承德市承德县2025秋招群面案例总结模板
- 2025年会计初级冲刺题库及答案
- 驾照考试题库及答案
- 2025年高二会考往年试卷及答案
- 2025年科普知识题库题库及答案(各地真题)
- 贵州保安员考试题库及答案解析
- 2025年医疗三基三严考试题库含答案
- 浙江大学新宇集团部门负责人岗位说明书
- TSCS 000013-2021 碳化硼-碳化硅芯块 无机阴离子(F-、Cl-、Br-、I-)的测定 离子色谱法
- GB/T 6426-1999铁电陶瓷材料电滞回线的准静态测试方法
- GB/T 14846-2014铝及铝合金挤压型材尺寸偏差
- 广西版建筑装饰装修工程消耗量定额说明及计算规则
- GA/T 594-2006保安服务操作规程与质量控制
- 髋关节解剖资料课件
- 坚持男女平等基本国策(妇联培训)课件
- 颅脑外伤(共61张PPT)
- 人教版《生命.生态.安全》六年级上册全册教案
- 矿种代码与规模分类表
评论
0/150
提交评论