Axis 1.4 都支持哪些规范呢,怎么查不到,知道的给回个贴,谢谢了!

解决方案 »

  1.   


    Axis
    全称:Apache EXtensible Interaction System 阿帕奇可扩展交互系统
      Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。但Axis并不完全是一个SOAP引擎,它还包括:
      是一个独立的SOAP服务器。
      是一个嵌入Servlet引擎(例如Tomcat)的服务器。
      支持WSDL。
      提供转化WSDL为Java类的工具。
      提供例子程序。
      提供TCP/IP数据包监视工具。
      apache wsAxis是第三代Apache SOAP,从2000年起,SOAP v2开发小组开始讨论如何让Axis更加灵活、可配置,以及能够处理SOAP和来自W3C的各种XML标准。通过不断地讨论和代码编写,Axis目前取得了如下成果:
      速度提高。 Axis通过基于事件的SAX对XML文档进行处理,从而在速度和效率上比Apache SOAP有所提高。
      灵活性提高。
      稳定性提高。
      提供面向组件的部署。
      提供一个简洁的传输抽象框架。其核心引擎完全于传输方式独立。从而使基于何种协议传输的选择更加灵活。
      支持WSDL。包括到处WSDL和客户代理生成等。
      在目前发行1.1版本中有什么东西?
      SOAP1.1/1.2引擎。
      灵活的配置和部署系统。
      支持及时自动生成SOAP服务(JWS)。
      支持所有的基本数据类型,为自定义串行操作提供类型映射系统。
      JavaBean的自动串行操作,包括将自定义属性类型映射到XML的属性和元素。
      RPC和基于消息的SOAP服务提供者。
      从部署好的服务自动生成WSDL。
      WSDL2Java工具可以从WSDL描述文件中产生相应的客户和服务器端SOAP操作框架。
      初步提供安全扩展,能够与Servlet2.2安全集成。
      通过HTTP Cookie和与传输无关的SOAP头信息提供会话跟踪。
      初步支持带附件的SOAP消息。
      在EJB方面提供把EJB作为Web服务的访问途经。
      基于Servlet的HTTP传输。
      基于JMS的传输。
      独立的服务器(但需要HTTP 服务器和Servlet容器支持)。
      提供客户端、服务器端相关应用程序的样例。
      Axis的运行需要如下组件包
      axis.jar
      jaxrpc.jar
      saaj.jar
      commons-logging.jar
      commons-discovery.jar
      wsdl4j.jar
      符合JAXP-1.1的XML处理器。
      

  2.   


    Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目。Axis为开发者提供了大量的序列化/反序列化器,能够基本满足大部分应用。但在某些情况下,对特定的对象,现有的序列化/反序列化器不能胜任,于是只有开发人员自己实现专用于此对象的序列化/反序列化器插入到Axis中来完成序列化工作。考虑到Web Service是一门新兴技术,中文资料大多是泛泛的讲解,关于序列化/反序列化器的开发鲜有较为深入的介绍,本文提供一份较为完整的开发指南,并提供了一个十分有用的实现,即序列化JDOM模型的Element,使其可以通过Web 服务在网络上传输,我想这一扩展是许多采用JDOM作为XML解析工具的开发人员都梦寐以求的功能。通过本文的介绍和实例,希望能起到抛砖引玉的作用,读者在阅读完本文之后可以轻松的实现针对于任何非符合BEAN规范的对象的序列化/反序列化器。 
    本文所面对的读者需要有一定的使用Axis做Web服务开发的开发经验,因此关于如何Axis的基础知识并不在本文的介绍范围,如果读者对此感兴趣,可以参考本文最后的参考资料部分,去相应的网站进行学习。 
    序列化/反序列化器简介 
    序列化/反序列化器在英文中的对应翻译是Serializer/Deserializer,一个序列化器的功能是遵循一定的映射规则和编码风格,将一种类型的JAVA对象通过某种特定的机制,转换成为XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,两者相辅相成,成对出现。Axis中的序列化/反序列化器采用设计范式中的工厂模式,每一个Serializer唯一对应一个SerializerFactory;每一个Deserializer唯一对应一个DeserializerFactory。一种类型的JAVA对象具体要采用哪个序列化/反序列化器需要在提供Web服务的服务器和调用Web服务的客户端分别配置,关于这一部分如何配置,我将在本文后面的内容中进行详细介绍。Axis已经为开发者提供了丰富的序列化/反序列化器,对于java的基本数据类型,绝大部分常用的容器类(比如数组类型,Vector类型等)都提供了实现,特别是提供了对W3C的DOM对象(比如Document, Element等)和符合Bean规范的JAVA对象提供了功能完善的序列化/反序列化器,因此我们在需要的时候只要在配置文件中配置一下就可以直接使用。如果对象中包含其它类型的对象,比如Vector中包含一组Bean对象,Axis会自动叠代的调用序列化器,最终拼装成唯一的XML表述。在还原成JAVA对象时,也遵循这样的叠代操作逆向进行。关于Axis到底内置了哪些序列化/反序列化器,您可以参照Axis的API文档中包org.apache.axis.encoding.ser下的类的名称"望文生义"的了解一下,在以后的开发中做到心中有数。但对于一些特殊类型的对象(其实我们自己开发的很大一部分类都是这种特殊类型的对象,很少有绝对符合Bean规范的),需要通过Web服务进行传递,我们不得不开发自己的序列化/反序列化器。 
    开发篇 
    开发自己的序列化/反序列化器是一个激动人心的工作,但是却并不复杂,需要做的事情包括实现名成为org.apache.axis.encoding的包中的SerializerFactory,Serializer,DeserializerFactory和Deserializer这四个接口。下面我将结合一个实例来讲解序列化/反序列化器的开发方法,希望读者能够一边参看本文提供的源代码一边学习。 
    JDOM作为一款比较"另类"的XML解析工具(因为它不符合W3C的DOM模型,自己另立一套)默默地占领着java世界里的xml解析器的半壁江山,由于其简洁的设计和方便灵活的API调用,已经渐渐成为了许多开发人员在进行XML开发的首选。但是Axis是建立在W3C的DOM模型的基础之上,师出名们正派,自然不屑与JDOM为伍。因此当开发人员想将自己已经写好的基于JDOM的应用模块采用Web服务的方式发布的时候,不可避免的会遇到如何将JDOM模型下的对象如Document, Element等序列化的问题。在软件工程师不会自己扩展Axis的序列化/反序列化器的时候,我们只能有两个办法达到这个目的,第一个就是更改以前应用模块内的API设计,使暴露的入口参数和返回值参数都是W3C的对象类型,但这种做法并不现实,因为这一应用模块往往不是独立存在,牵一发将动全身,导致旧有系统架构的崩塌;另一种做法就是为这个模块做一个代理类,它做的工作就对外接收或返回DOM模型的对象,对内转换成JDOM模型的对象,然后转发给应用模块,繁琐且效率低下。当我们向Axis注入了针对于JDOM模型的序列化/反序列化器后,这一工作便可以由Axis代劳了。下面我们将逐个开发这四个类
      

  3.   


    JDomElementSerializerFactory 
    JDomElementSerializerFactory是一个工厂类,需要通过某种机制注册到Axis引擎(具体方法见下面"服务器端应用篇");Axis通过调用它,来实例化JDomElementSerializer。Axis 提供了BaseSerializerFactory,这个类是一个抽象类,并实现其中包含了一些可重用的代码。我们自己开发的工厂类只需简单继承这个类就可以。构造函数中需要调用父类的构造函数将序列器类下面是它的源代码: 
    package org.apache.axis.encoding.ser; 
    public class JDomElementSerializerFactory 
    extends BaseSerializerFactory { 
    public JDomElementSerializerFactory() { 
    super(JDomElementSerializer.class); 


    JDomElementSerializer 
    JDomElementSerializer实现org.apache.axis.encoding.Serializer接口,其核心API是serialize(),我们需要在这个方法的内部完成对JDOM模型的Element的序列化工作,序列化的结果要保存在入口参数传入的序列化上下文对象(SerializationContext)中: 
    public void serialize(QName name, Attributes attributes, Object value, 
    SerializationContext context) throws java.io.IOException { 
    if (!(value instanceof Element)) 
    throw new IOException( 
    Messages.getMessage("cant Serialize Object")); 
    //获取符合JDOM的Element对象 
    Element root=(Element)value; 
    //输出到StringWriter 
    XMLOutputter outputter=new XMLOutputter();//创建一个JDOM的XML输出器 
    StringWriter sw=new StringWriter(); 
    outputter.output(root,sw); 
    //用支持W3C的DOM模型的Xerces解析器解析文本流 
    DOMParser parser=new DOMParser();//创建一个DOM的XML解析器 
    try { 
    parser.parse(new org.xml.sax.InputSource( 
    new java.io.StringReader(sw.toString()))); 
    }catch (Exception ex) { 
    throw new java.io.IOException("序列化时产生错误"); 

    //获取符合DOM模型的Element对象 
    org.w3c.dom.Element w3c_root = 
    parser.getDocument().getDocumentElement(); 
    //放入序列化上下文对象中 
    context.startElement(name, attributes); 
    context.writeDOMElement(w3c_root); 
    context.endElement(); 

    JDomElementDeserializerFactory 
    反序列化器的工厂类同序列化器的工厂类一样的设计,在此不在赘述。代码: 
    package org.apache.axis.encoding.ser; 
    public class JDomElementDeserializerFactory 
    extends BaseDeserializerFactory { 
    public JDomElementDeserializerFactory() { 
    super(JDomElementDeserializer.class); 

      

  4.   

    晕 贴过来都乱了
    楼主自己去看看把
    http://zhidao.baidu.com/question/22855706.html?si=1