`
andy54321
  • 浏览: 441558 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】用Axis 1.1 for Java进行Web Services开发

阅读更多



下面的所有几乎来自Axis1.1的文档。但不完全来自文档,本人做了部分修改,这些修改完全出自国内读者的需要。
什么是SOAP?
SOAP 是一个基于XML的用于应用程序之间通信数据编码的传输协议。最初由微软和Userland Software提出,随着不断地完善和改进,SOAP很快被业界广泛应用,目前完全发布版本是1.1。在其发展过程中,W3C XML标准工作小组积极促成SOAP成为一个真正的开放标准。在写作此文档之时,SOAP1.2草案已经发布,1.2对1.1中相对混乱的部分做了改进。
SOAP被广泛作为新一代跨平台、跨语言分布计算Web Services的重要部分。

什么是Axis?
Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。
但Axis并不完全是一个SOAP引擎,它还包括:
                   是一个独立的SOAP服务器。
                   是一个嵌入Servlet引擎(例如Tomcat)的服务器。
                   支持WSDL。
                   提供转化WSDL为Java类的工具。
                   提供例子程序。
                   提供TCP/IP数据包监视工具。
Axis是第三代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处理器。
一步一步开始用Axis进行Web Services操作
下面给出一段简单的调用Web Services方法的客户端代码(由于原文档中直接用导入包的方式初学者不易了解那个类在那个包中,所以下面我做了一些简单的修改,希望能给学习者清晰的思路):
public class TestClient {

    public static void main(String[] args) {
        try{
            String endpoint="http://localhost:8080/axis/SayHello.jws?wsdl";// 调用的web服务的url地址,这里是一个http请求,希望得到的结果是wsdl文档。
            org.apache.axis.client.Service service=new org.apache.axis.client.Service();//建立请求服务框架实例。
            /*
             * org.apache.axis.client.Service实现JAX-RPC's javax.xml.rpc.Services接口
             * 该接口充当产生下面提到的org.apache.axis.client.Call实例
             * 的角色。
             */
            org.apache.axis.client.Call call=(org.apache.axis.client.Call)service.createCall();//从框架中生成一个维护调用的实例。
            /*
             * org.apache.axis.client.Call实现了JAX-RPC's javax.xml.rpc.Call接口。
             */
             call.setTargetEndpointAddress(new java.net.URL(endpoint));
             call.setOperationName(new javax.xml.namespace.QName("http://www.edu-edu.com.cn/luopc/ws","echoString")); //设置需要调用的函数名称
             String result=(String)call.invoke(new Object[]{"hello!"});
             System.out.println(result);
           
        }catch(Exception e){
            System.err.println(e.toString());
        }   
    }
}

上面的代码可能和原文档中不同,并且在名称空间、函数多态上会给用户造成糊涂。不过别急,我在翻译手册的同时会加入很多解释的代码,如果哪位纯粹看不懂可以通过邮件获取帮助:luopc@edu-edu.com.cn ,邮件主题必须是我提供的文档名称。
通过上面的调用代码,最终生成向服务器请求SOAP信息包,具体XML内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body>
 <ns1:echoString xmlns:ns1="http://www.edu-edu.com.cn/luopc/ws">
   <arg0 xsi:type="xsd:string">Hello!</arg0>
 </ns1:echoString>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>



这里我不再多少,细心的朋友请从代码中找相应的对应信息来进行自己的逻辑理解。至于SOAP协议在我以后的翻译文档中会加入进去。
从上面的代码中我们在调用的时候输入了参数new Object[]{“hello!”}。然后从生成的SOAP请求包中可以看到自动序列化成<arg0 xsi:type="xsd:string">Hello!</arg0>。你可以看到参数名称为arg0,类型为xsd: string。其实在Axis客户端我们可以直接通过具体的方法来设置每一个参数名称、类型以及返回值类型。如下代码:

call.addParameter("testParam",
   org.apache.axis.Constants.XSD_STRING,
   javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);



加入上面的代码之后生成如下的SOAP信息:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SOAP-ENV:Body>
 <ns1:echoString xmlns:ns1="http://www.edu-edu.com.cn/luopc/ws">
   <testParam xsi:type="xsd:string">Hello!</testParam>
 </ns1:echoString>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>



可以作简单的对比。
也许你会疑惑设置参数名称和不设置参数名称有什么区别的疑问。这里作简单的解释:
1.    为什么要call.setReturnType(org.apache.axis.Constants.XSD_STRING)?
上面你可以调用或者可以不调用,但当返回结果中没有标明数据类型时Axis就不知道如何进行数据类型转换。当然如果返回类型你很清楚并且返回应答SOAP的结果中表明了相应的数据类型你便可以不进行上面的函数调用。
2.    为什么要设置参数名称和类型?

好了,下在你知道了如何调用Web Services了,下面告诉你如何写作和发布Web Services。
通过Axis发布Web Services
这里写作一个简单的类,然后一步一步进行发布。希望用户能够从中理出一些思路来。我在其他的关于Web Services的文章中会专门针对Web Services的通用发布方法。虽然Web Services牵涉到很多复杂的知识,但请大家不要感觉到这些操作简单,也许你已经有很多疑问,没关系,记下你的疑问,不断的投试。

public class SayHello {

    public String echoString(String hello){
        return hello;
    }
}



哈哈,这个类是不是太简单了。
一步一步来。
Axis提供两种将Java类发布成Web Services的途径,即即时快速自动发布和通过配置文件进行发布。我们首先从最容易部署的入手。
JWS----即时部署
简单说就是将自己写的Java类源文件按一定的规则Copy到特定的目录下便可自行被Axis部署。具体步骤如下:
                   将上面写的SayHello.java复制到axis目录下。
                   改名为SayHello.jws。
注意:在你写的类中不能有具体包的信息,因为这正是Axis即时部署不支持的。
运行我们前面写的客户端进行测试,运行结果是hello!。
目前你是否有如下的问题?
如果类中用多态的函数将如何处理?
其实很简单,我们知道在每次发出调用请求之前代理程序在后台会直接请求你给的URL,这里是http://localhost: 8080/axis/SayHello.jws?wsdl,其实这一请求返回来的是WSDL描述文件,通过具体的描述文件的内容和你输入的参数的类型比较,最终确定发送什么请求。细节上的解释需要用户阅读SOAP的具体内容。我也会提供相应的权威文当翻译的。
Axis的客户端默认就是通过HTTP协议传输吗?
如何将自己定义的类型进行映射?
通过WSDD自定义部署
上面的自动部署相当简单,但当你需要
                   映射自己的类型时
                   不需要暴露源代码时
                   需要自己的路径和包管理时
                   对用户操作Web Services的事件进行相应时
就需要通过WSDD来自定义部署。
前面新特性中提到过,Axis是一个很灵活的可配置系统,但在配置之前你得懂得Axis Web Services描述文档(WSDD)的格式和意义。这里有一个简单的例子(deploy.wsdd):
   

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
       xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
     <service name="SayHello2" provider="java:RPC">
      <parameter name="className" value="luopc.ws.SayHello"/>
      <parameter name="allowedMethods" value="*"/>
     </service>
    </deployment>


很简短的描述就会自定义对特定类以Web Services的形式发布。上面的每一个service项都会意味着开通一个相应的可被WSDL文件引用的服务。其内部描述信息将会描述从请求-处理请求-应答需要的所有核心信息。这里provider=”java:RPC”对应着相应的服务类为 org.apache.axis.providers.java.RPCProvider。其实你可以通过多种方式提供相应的服务。在关于Axis的架构文章中将会详细解释这些内容。
上面的各个参数我不再解释,我想大家一看就明白。
下面让我们在上面的简单配置上开始一步一步的进行各种高级配置:
服务存活范围
Axis提供Session、Request和Application三种可选范围配置。具体配置标记为:

<service name="MyService"...>
  <parameter name="scope" value="value"/>
  ...
</service>


一旦你完成上面的文件。可以写一个脚本批处理文件来完成部署。批处理文件如下:

java -classpath F:\resource\tools\axis-1_1\lib\axis.jar;F:\resource\tools\axis-1_1\lib\commons-discovery.jar;F:\resource\tools\axis-1_1\lib\jaxrpc.jar;F:\resource\tools\axis-1_1\lib\commons-logging.jar;F:\resource\tools\axis-1_1\lib\log4j-1.2.8.jar;F:\resource\tools\axis-1_1\lib\wsdl4j.jar;F:\resource\tools\axis-1_1\lib\j2ee.jar org.apache.axis.client.AdminClient sayHelloD.wsdd。


上面的一些jar文件都是Axis运行需要的组件,所以必须添加到环境中。上面的目录是我的机器里的目录,你可以按自己的目录进行。
如果部署成功,会输出<Admin>Done processing</Admin>信息。
但本人这里再强调几个:
                   你首先要将你编译好的类放到axis/web-inf/classes/下面。
                   可以通过http://localhost:8080/axis/services/SayHello2来调用。
                   你可以从我的配置文件中发现了包的概念。
                   可以用相应的xml文件进行卸载已部署的服务。
卸载方法如下:
编写如下XML文档

<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
 <service name="MyService"/>
</undeployment>


把上面的批处理文件中的sayHelloD.wsdd换成该文件便可。

继续关注高级部署
如果你想知道自己的某个Web Services被调用多少次,你应该怎么做呢?
Axis提供了相应的跟踪机制。
                   首先你应该编写一个满足一定接口的事件处理类。
                   在配置文件中添加事件处理器信息。
我们先看看配置文件中的信息:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
   xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <!-- define the logging handler configuration -->
 <handler name="track" type="java:samples.userguide.example4.LogHandler">
  <parameter name="parameter1" value="访问该services"/>
 </handler>
 <!-- define the service, using the log handler we just defined -->
 <service name="SayHello2" provider="java:RPC">
  <requestFlow>
   <handler type="track"/>
  </requestFlow>
  <parameter name="className" value="luopc.ws.SayHello"/>
  <parameter name="allowedMethods" value="*"/>
 </service>
</deployment>


上面的绿色部分起到核心的配置信息提供。
下面提供一个事件处理类,同样来自原文档,但为了更清晰我同样将所有的类前面加上了包名称。
package luopc.ws;

/**
* @author luopc
*/
public class EventHandler extends org.apache.axis.handlers.BasicHandler{
    public void invoke(org.apache.axis.MessageContext mtxt){
        String param=(String)getOption("parameter1");
        System.out.println(param);
    }

    public static void main(String[] args) {
    }
}
就这样,我们对请求跟踪了。嘻嘻。
可以远程进行管理(不推荐)
前面就提到服务类型的问题,在Axis有四种类型的服务,分别为RPC、Document、Wrapped和Message。

分享到:
评论

相关推荐

    axis1.1所需全部jar

    标题“axis1.1所需全部jar”指的是 Axis 1.1 版本的Web服务开发框架所需的全部Java Archive (JAR) 文件集合。Axis是一个开源的、基于Java的Web服务工具包,它允许开发者创建、部署和使用Web服务。这个压缩包包含了一...

    axis1.1发布webservice服务

    Axis1.1是Apache软件基金会开发的一个开源Java框架,主要用于创建和部署Web服务。它基于SOAP(Simple Object Access Protocol)协议,允许开发者在Java平台上快速地实现Web服务。本篇文章将详细阐述如何使用Axis1.1...

    java axis-1_1-src wsdl axis1 web services

    Java Axis 1.1 是一个古老的但仍然广泛使用的Web服务框架,它允许开发人员将Java对象转换为Web服务,反之亦然。这个压缩包“axis-1_1-src”包含了Axis 1.1的源代码,这对于开发者进行深入学习、调试或者定制 Axis ...

    axis2开发Web Services入门

    本文旨在介绍如何使用 Axis2 开发 Web Services 的全过程,包括环境搭建、插件安装等基础准备工作,以及具体的开发流程与实例演示。 #### 1. 环境搭建 ##### 1.1 安装配置 JDK、Tomcat 和 Eclipse **JDK (Java ...

    web services开发文档

    在本开发文档中,我们将深入探讨使用Apache Axis2、Tomcat服务器和Eclipse IDE进行Web Services开发的关键概念和技术。 首先,Apache Axis2是Java平台上流行的Web Services框架,它为构建和部署Web Services提供了...

    axis开发webservices

    标题:"axis开发webservices" 描述:"这是关于axis开发webservices的完整资料" ### Axis与Web Services:构建SOAP Web服务 Axis是Apache软件基金会提供的一款开源工具,用于在Java环境中实现Web服务,支持SOAP...

    Axis2教程和java调用webservice的各种方法总结

    - **JAX-WS(Java API for XML Web Services)**:Java平台的标准API,用于生成和消费Web服务。通过注解和接口,可以轻松地创建和调用Web服务。 - **Apache CXF**:一个开源框架,支持SOAP、RESTful等多种Web服务...

    axis2-1.1.zip

    6. **modules**目录:包含可插拔的模块,扩展了Axis2的功能,比如数据绑定框架(如AXIS2+Aegis或AXIS2+Java Architecture for XML Binding, JAXB)。 7. **samples**目录:可能包含一些示例代码和配置,帮助用户理解...

    基于axis2实现的webservice简单实现(客户端+服务端)。

    Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的Web服务解决方案。 **Web服务**是一种在互联网上不同系统间交换数据的方式,它允许应用程序之间通过标准协议进行通信。Web服务通常使用...

    Web Services资料大全

    CXF提供了更高级别的抽象,使得开发者可以使用Java注解或JAX-WS(Java API for XML Web Services)来定义服务接口。此外,CXF还包含了丰富的客户端和服务器端工具,以及对WS-*规范的良好支持。 4. SOAP(简单对象...

    axis_讲解 java

    Axis 是 Apache 组织提供的一款开源的 Web 服务框架,主要用于实现 SOAP 协议下的 Web 服务,它能够帮助开发者快速地开发、部署和调用基于 Java 的 Web 服务。 #### 1.2 Axis 特点 - **简单易用**:Axis 提供了简洁...

    Apache Axis 1.2RC2 完整包

    3. **Java-to-WSDL和WSDL-to-Java工具**:Axis 提供了将Java类自动转换为WSDL文档的工具,以及将WSDL文档反向生成Java代码的工具,大大简化了Web服务的开发过程。 4. **类型映射**:Axis 内置了多种数据类型之间的...

    Eclipse3.2+MyEclipse5.5M1+axis2_1.1.1+tomcat5.5 开发Web Services

    在本主题中,我们将深入探讨如何使用Eclipse 3.2、MyEclipse 5.5 M1、Axis2 1.1.1和Tomcat 5.5这些工具来开发Web服务。Web服务是一种软件系统,设计用于通过网络提供可互操作的分布式功能。下面我们将分别介绍每个...

    java-webservice-axis-例子

    Axis1.4是 Axis的一个版本,它支持SOAP 1.1和WSDL(Web Services Description Language)1.1,WSDL是用来定义Web服务接口和消息交换模式的规范。 1. **服务端接口**:在服务端,我们需要定义一个Java类,这个类包含...

    Spring + axis2 开发 webservice

    总之,"Spring + Axis2 开发 WebService"涵盖了从设计、实现、部署到消费Web服务的全过程,涉及到Spring框架的高级特性以及Apache Axis2的使用,对于Java开发者来说,这是一个深入了解Web服务和分布式系统交互的重要...

Global site tag (gtag.js) - Google Analytics