欢迎来到天天文库
浏览记录
ID:11239220
大小:33.50 KB
页数:10页
时间:2018-07-10
《omelement和java对象之间的转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、转自:http://warlaze.blog.sohu.com/58477971.htmlAXIOMAxis对象模型(AXIOM)是一个XML对象模型,设计用于提高XML处理期间的内存的使用率和性能,基于Pull解析。Pull解析方式,基于STAX(StreamingAPIforXML),Pull解析是最近处理XML的一种趋势,而SAX和DOM都是基于push的解析方式,也就是说解析控制在parser本身。Push解析方式很容易使用,但在处理XML文档时效率并不好,(因为要在内存中生成完成的对象模型)
2、。Pull解析方式颠倒了这种控制方式,增强了parser,只在用户需要的时候才进行处理。用户决定处理或者忽略parser生成的事件。AXIOM(也称为OM)可以控制解析过程,以提供延迟构建支持。延迟构建是指AXIOM不完全构建对象模型,模型的其余部分基于用户的需要构建。以下实例对此概念进行了说明:假定某个用户需要从XML输入流中获得一个人的元素值,AXIOM构建的对象模型将一直包含到元素结束的内容,而让其他内容保留在流中:清单1.对象模型的AXIOM部分构建3、ersons> DihInIHimahansi Femal Colomo,SriLanKa <--对象模型仅在此之上建立--> DihInIHimahansi Femal 4、tion>Colomo,SriLanKa 这里的优势在于,尽可能仅使用能满足用户需求的内存。如果用户希望访问较大的文档中前面的数个字节或数千个字节,则延迟构建功能将改善应用程序的内存需求情况。可以从任何元素获得Stax事件,而不管是否完整构建了对象模型。在有些情况下,Axis2的此功能非常有用。例如,当Axis2作为中介传递时,如果仅需要读取SOAP消息的Header,AXIOM将防止其读取整个SOAP消息,使其具有很高的内存效率。另
3、ersons> DihInIHimahansi Femal Colomo,SriLanKa <--对象模型仅在此之上建立--> DihInIHimahansi Femal 4、tion>Colomo,SriLanKa
4、tion>Colomo,SriLanKa
5、一个例子是,当Web服务实现能够直接使用Stax事件时,由于采用了AXIOM,Web服务所需的内存非常小。此外,AXIOM内置了消息传输优化机制(MessageTransferOptimizationMechanism,MTOM)支持。对于AXIOM体系结构,可以通过实现AXIOM接口并将其插入到Axis2中来执行自己的对象模型。由于AXIOM最初是作为Axis2的对象模型而开发的,因此AXIOM提供了构建于基础AXIOMAPI之上的SOAP接口。这允许您使用envelop.getHeaders和en
6、velope.getBody之类的便利方法查看SOAP。AXIS2会将WebService方法中的参数或返回值中的自定义对象、数组、List等类型统一映射为OMElement类型,这就是我们需要编写OMElement于自定义类型之间的转换方法,下面给出了几个常用的方法:CASE1:自定义对象生成OMElement方法:Personman=newPerson();man.setName("Warlaze");man.setAge(25);man.setAddress("Beijing");man.set
7、Phonenum("15900000000");javax.xml.stream.XMLStreamReaderreader=BeanUtil.getPullParser(man);StreamWrapperparser=newStreamWrapper(reader);StAXOMBuilderstAXOMBuilder=OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractory.getOMFactory(),parser);OMElementelem
8、ent=stAXOMBuilder.getDocumentElement();CASE2:list或Array类型生成OMElement方法:Listlist=newArrayList();list.add(man);OMElementomElement=BeanUtil.getOMElement(newQName("root"),list.toArray(),newQName("person"),false,null);
此文档下载收益归作者所有