- 浏览: 107475 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
坚持唯一:
1、看一下eclipse中的window---Preferen ...
Emulator] Failed to allocate memory: 8 -
pop1030123:
都过期了。
MyEclipse 6.0.1 注册码 -
seasheart:
北京多好啊,为什么不留在那家公司呢?
突然发现我该把实习的经历写出来,等到以后7老8十了.... -
abin7230:
你都还有实习,我都不知学校在那实习的呢
突然发现我该把实习的经历写出来,等到以后7老8十了.... -
huangpengxiao:
关注楼主头像。。。
安装飞信fetion IE主页被yidong139篡改
AXIOM
Axis对象模型(AXIOM)是一个XML对象模型,设计用于提高XML处理期间的内存的使用率和性能,基于Pull解析。
Pull解析方式,基于STAX(Streaming API for XML),Pull解析是最近处理XML的一种趋势,而SAX和DOM都是基于push的解析方式,也就是说解析控制在parser本身。Push解析方式很容易使用,但在处理XML文档时效率并不好,(因为要在内存中生成完成的对象模型)。Pull解析方式颠倒了这种控制方式,增强了parser,只在用户需要的时候才进行处理。用户决定处理或者忽略parser生成的事件。
AXIOM(也称为OM)可以控制解析过程,以提供延迟构建支持。延迟构建是指AXIOM不完全构建对象模型,模型的其余部分基于用户的需要构建。以下实例对此概念进行了说明:假定某个用户需要从XML输入流中获得一个人的<Location>元素值,AXIOM构建的对象模型将一直包含到<Location>元素结束的内容,而让其他内容保留在流中:
清单 1.对象模型的AXIOM部分构建
<Persons>
<Person>
<Name>DihInI Himahansi</Name>
<Sex>Femal</Sex>
<Location>Colomo,Sri LanKa</Location>
<--对象模型仅在此之上建立-->
</Person>
<Person>
<Name>DihInI Himahansi</Name>
<Sex>Femal</Sex>
<Location>Colomo,Sri LanKa</Location>
</Person>
</Persons>
这里的优势在于,尽可能仅使用能满足用户需求的内存。如果用户希望访问较大的文档中前面的数个字节或数千个字节,则延迟构建功能将改善应用程序的内存需求情况。
可以从任何元素获得Stax事件,而不管是否完整构建了对象模型。在有些情况下,Axis2的此功能非常有用。例如,当Axis2作为中介传递时,如果仅需要读取SOAP消息的Header,AXIOM将防止其读取整个SOAP消息,使其具有很高的内存效率。另一个例子是,当Web服务实现能够直接使用Stax事件时,由于采用了AXIOM,Web服务所需的内存非常小。
此外,AXIOM内置了消息传输优化机制(Message Transfer Optimization Mechanism,MTOM)支持。对于AXIOM体系结构,可以通过实现AXIOM接口并将其插入到Axis2中来执行自己的对象模型。
由于AXIOM最初是作为Axis2的对象模型而开发的,因此AXIOM提供了构建于基础AXIOM API之上的SOAP接口。这允许您使用envelop.getHeaders和envelope.getBody之类的便利方法查看SOAP。
AXIS2会将Web Service方法中的参数或返回值中的自定义对象、数组、List等类型统一映射为OMElement类型,这就是我们需要编写OMElement于自定义类型之间的转换方法,下面给出了几个常用的方法:
CASE1:自定义对象生成OMElement方法:
Person man=new Person();
man.setName("Warlaze");
man.setAge(25);
man.setAddress("Bei jing");
man.setPhonenum("15900000000");
javax.xml.stream.XMLStreamReader reader=BeanUtil.getPullParser(man);
StreamWrapper parser=new StreamWrapper(reader);
StAXOMBuilder stAXOMBuilder=OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractory.getOMFactory(), parser);
OMElement element=stAXOMBuilder.getDocumentElement();
CASE2:list或Array类型生成OMElement方法:
List<Person> list=new ArrayList<Person>();
list.add(man);
OMElement omElement=BeanUtil.getOMElement(new QName("root"),list.toArray(),new QName("person"),false,null);
CASE3:解析包含基本类型的List或Array生成的OMElement的方法:
private static List<String> getResults(OMElement element){
if(element==null){
return null;
}
Iterrator iterator=element.getChildElements();
List<String> list=new ArrayList<String>();
while(iterator.hasNext()){
OMNode omNode=(OMNode)iterator.next();
if(omNode.getType()==OMNode.ELEMENT_NODE){
OMElement omElement=(OMElement)omNode;
if(omElement.getLocalName().equals("string")){
String temp=omElement.getText().trim();
System.out.println(temp);
list.add(temp);
}
}
}
return list;
}
CASE4:解析包含自定义Java类型的List或Array的方法:
private static List<Person> getResults(OMElement element) throws AxisFault{
if(element==null){
return null;
}
Iterator iterator=element.getChildElements();
List<Person> list=new ArrayList<Person>();
while(iterator.hasNext()){
OMNode omNode=(OMNode)iterator.next();
if(omElement.getType()==OMNode.ELEMENT_NODE){
OMElement omElement=(OMElement)omNode;
if(omElement.getLocalName().toLowerCase().equals("person")){
Person person=(Person)BeanUtil.processObject(omElement,Person.class,null,true,new DefaultObjectSupplier());
list.add(person);
}
}
}
}
http://www.blogjava.net/juleven/archive/2006/12/08/86458.html
Axiom读XML:
// 首先构建parser,
XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(
new FileInputStream("5.xml"));
// 还需要builder对象,
StAXOMBuilder builder = new StAXOMBuilder(parser);
// get the root element
// OMElement documentElement = builder.getDocumentElement();
OMDocument doc = builder.getDocument();
OMElement cre = doc.getOMDocumentElement().getFirstChildWithName(new QName("fool"));
// OMElement有一系列的get方法来获得内容。
cre.serialize(System.out); // cache on
cre.serializeAndConsume(System.out); // cache off
// will NOT build the OMTree in the memory.
// So you are at your own risk of losing information.
String creStr = cre.toStringWithConsume();
// call toString, will build the OMTree in the memory.
System.out.println(cre);
Axiom写XML:
// 可以构建writer做输出器,
XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(
new FileOutputStream("2.xml"));
// 通常通过OMFactory来构造XML文档中的element,下面是一些示例代码。
OMFactory factory = OMAbstractFactory.getOMFactory();
OMDocument doc = factory.createOMDocument();
OMNamespace ns = factory.createOMNamespace("http://demo.axiom","x");
OMNamespace ns1 = factory.createOMNamespace("http://ot.demo.axiom","y");
OMElement root = factory.createOMElement("root",ns);
OMElement elt11 = factory.createOMElement("fool",ns1);
elt11.addChild(factory.createOMText("YY"));
OMElement ele = factory.createOMElement("ele", "http://namespace", "ns");
ele.addChild(factory.createOMText("ELE"));
root.addAttribute(factory.createOMAttribute("attr", ns, "test attr"));
root.addChild(elt11);
root.addChild(ele);
doc.addChild(root);
root.serialize(writer); // cache on
writer.flush();
doc.serializeAndConsume(new FileOutputStream("3.xml"));
OMOutputFormat oof = new OMOutputFormat();
doc.serializeAndConsume(new FileOutputStream("5.xml"), oof); //cache off //ele.detach();
ele.serialize(System.out); // 即使detach(),依然会输出ele
doc.serialize(System.out); // 如果detach(),就不会有ele到document里。
关于serialize和serializeAndConsume,前者会强制构建OMTree,或者则不会。
关于detach,它只影响OMElement本身和OMTree的关系,并不影响OMElement本身。
与之对应的还有一个build方法,build会强制build整个OMTree出来。
这两个方法通常用在处理OMElement与OMTree的关系上。从输入流构建出OMElement(build)以及把OMElement从输入流断开(detach),以便放到输出流。输入流和输出流是不同的OMTree。
测试用的XML文档(5.xml),
<?xml version='1.0' encoding='utf-8'?>
<x:root xmlns:x="http://demo.axiom" x:attr="test attr">
<y:fool xmlns:y="http://ot.demo.axiom">YY</y:fool>
<ns:ele xmlns:ns="http://namespace">ELE</ns:ele>
</x:root>
参考:
AXIOM Tutorial : http://ws.apache.org/commons/axiom/OMTutorial.html
发表评论
-
我的android开发经历1
2013-06-14 19:40 677从开始接触android已经2年多了,因为与平常工 ... -
Oracle RAC DB Failover, JNDI remote lookup
2012-10-22 11:34 1579前一段时间production的某一个RAC DB node挂 ... -
我的第一个Android app, android app推广与广告
2012-10-15 23:01 1022学习Android APP开发一个月了,写了自己第一个APP, ... -
TIBCO BW SQL data type
2012-03-15 16:28 833TIBCO BW 里面JDBC query的时候用绑定变量,但 ... -
JSF无法提交(summit只是刷新原页面)
2011-03-24 18:40 894最近使用JSF开发的时候,如果页面有某个element的I ... -
JAVA反射机制作用是什么
2011-03-24 18:34 902一、什么是反射: 反 ... -
JAVA设计模式学习笔记–装饰者模式
2010-03-26 22:59 1286装饰者模式: 1. 装饰者模式动态的将责任附加到对象上,若要 ... -
java.lang.IllegalStateExceptThis loader has been closed and should not be in use
2010-03-26 22:33 2632今天用OC4J重新deploy一个project以后出现了 ... -
理解Java ClassLoader机制
2009-11-10 11:24 978当JVM(Java虚拟机)启动 ... -
专家建议:五种最值得学习的JAVA开发技术
2008-10-15 16:46 757【赛迪网-技术社区整理】Carlos Perez(著名的J ... -
一个Java程序员应该掌握的10项技能
2008-10-15 16:49 844阅读提示: 一个合格 ... -
利用java做一个简单的计算器
2008-10-15 16:53 977两个类。还只是完成+、-、×、÷运算而已。GUI只是用了AWT ... -
SSL简单示例
2008-10-17 10:54 739import java.io.BufferedReader; ... -
Axis2 基础
2008-10-17 15:01 882Introduction Let's start with ... -
about uddi root registry and affiliate registry
2009-01-08 14:10 689V3规范则提出了一个全新的 UDDI体系框架 . V3规 ... -
Effective java 主题:Effective Java Second Edition中文版已出版
2009-03-13 16:11 919本书分为11章共78个条目 ... -
Java连接数据库代码
2009-03-16 10:58 12791、Oracle8/8i/9i数据库(thin模式) Cl ... -
Java的ClassLoader与Package机制(Prohibited package name:XXX)
2009-04-03 16:22 770如遇到这个问题:Prohibi ... -
JAVA排序汇总-java排序算法-JAVA算法汇总
2009-04-30 10:23 676package com.softeem.jbs.lesson4 ... -
EXCEL批量转化为TXT-EXCEL转化为TXT-java实现 Excel转txt
2009-05-11 12:49 1173在网上找了个EXCEL转化为TXT的JAVA代码,改了下使得可 ...
相关推荐
AXIS2 中 OMElement 和 Java 对象之间的转换 AXIS2 是一个流行的开源 Web 服务框架,它提供了一个强大的对象模型,称为 AXIOM(AXIs 对象模型),用于提高 XML 处理期间的内存使用率和性能。AXIOM 通过使用 ...
Axis2中的OMElement是用于表示XML元素的类,它是Apache Axis2对象模型(Object Model)的一部分。OMElement提供了丰富的API,用于操作和构建XML文档。要实现节点首字母小写转大写的转换,我们需要遍历整个SOAP XML...
“OMElement”是Apache Axis2中的一个核心概念,它是对象模型(Object Model)层次结构的基础元素。OMElement可以表示XML文档的任何部分,如元素、属性或者文本节点。在处理SOAP消息时,我们经常使用OMElement来构建...
7. **OMElement和java对象之间的转换.doc** - Axis2使用OM(Object Model)元素来处理XML,这份文档可能解释了如何在Java对象和OMElement之间进行转换,这对于处理XML数据至关重要。 8. **Java.Web服务开发(必学)...
在Axis2中,RPC风格的服务使得Java方法可以直接暴露为Web服务操作。在这个示例中,我们看到RPC方式被用来处理数据类型,这使得服务端的方法调用更加直观和简单。 接下来,我们讨论OM(对象模型)元素。AXI2中的...
Axis2 是一个基于 JAVA 语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group)的开放源代码实现。Axis2 框架来自 Apache 开放源代码组织,具有灵活的消息传递框架、传输框架、数据...
在Axis2中,可以通过抛出特定类型的异常,让Axis2自动转换成SOAPFault。 3. **使用SWA(Soap With Attachment)** SWA允许在SOAP消息中附加非XML数据,如图像或文件。在Axis2中,可以利用MTOM(Message ...
OMElement是Apache Axis2中的一个关键类,用于构建和操作XML文档,它是构建SOAP消息的基础。至于上传下载实现,这可能涉及到文件传输的场景,客户端可能需要将文件数据转换为SOAP消息的一部分,服务端则负责接收和...
当收到SOAP请求时,Axis2会使用Axiom解析XML消息,然后将其转换为Java对象进行业务逻辑处理。反之,当需要发送响应时,Axiom会将Java对象转化为SOAP消息。 在标签"axis2 axis"中,我们可以看到Axiom API是Axis2的...
本文将详细探讨Axiom DOM 1.2.8版本的核心特性、应用场景以及如何在项目中正确地引入和使用。 一、Axiom DOM简介 Axiom DOM是一个基于StAX(Streaming API for XML)的高性能XML处理库,它为开发者提供了构建和...
在"axiom-api-1.2.1.jar"中,包含了一系列类和接口,它们提供了XML对象的创建、操作和序列化的方法。这些API允许开发者在Java应用程序中轻松处理XML文档,进行解析、修改、查询和生成。例如,Axiom提供了OMElement...