用Apache axis开发Web服务

 

目前Apache 拥有两个版本的axis  axis1.X 系列 和  axis2, axis2  并不是axis1.x的升级版本,而是一个全新的版本,用他们自己的话说就是complete re-design and re-write ,从使用上来讲两个版本的axis也有很较大不同,下面依次介绍一下。

- 显示引用文字 -

 

Axis1.x的安装配置以及简单例子  

 

一.  安装和配置

      1.  axis1.x  主页  http://ws.apache.org/axis/

          axis1.4  下载地址    http://www.apache.org/dist/ws/axis/1_4/axis-bin-1_4.zip

          axis1.4  源码下载    http://www.apache.org/dist/ws/axis/1_4/axis-src-1_4.zip

      2.  解压  axis-bin-1_4.zip  将子目录  webapps  目录下的axis目录  拷贝到  tomcat/webapps下  

      3.  从    axis-src-1_4/axis-1_4/lib  中拷贝  activation.jar  到tomcat/common/lib  下

          从   jdk_home(例如:"C:/Program Files/Java/jdk1.5.0")/lib下拷贝 tools.jar 到 tomcat/common/lib下    

          从http://java.sun.com/products/javamail/downloads/index.html  下载javamail-1_4.zip  将其中的mail.jar拷贝到tomcat/common/lib  下  

          从http://xml.apache.org/security/dist/java-library/  下载  xml-security-bin-1_3_0.zip  将其中的lib/xmlsec-1.3.0.jar拷贝到                        tomcat/common/lib  下

      4.  启动  Tomcat,访问  http://127.0.0.1:8080/axis/  正常将出现  一个Apache  Axis的页面  点击其中的  Validation 正常的显示是提示找到了所有

            必要组件和可选组件

 

      5.  配置环境变量 

         AXIS_HOME = Tomcat/webapps/axis

         AXIS_LIB = %AXIS_HOME%/lib/WEB-INF/lib

         AXISCLASSPATH = .;%AXIS_LIB%/axis.jar;%AXIS_LIB%/commons-discovery-0.2.jar;

                         %AXIS_LIB%/commons-logging-1.0.4.jar;%AXIS_LIB%/jaxrpc.jar;%AXIS_LIB%/saaj.jar;%AXIS_LIB%/log4j-1.2.8.jar;

                         %AXIS_LIB%axis-ant.jar;  (注意这个) %TomcatHome%/common/lib/activation.jar; .....

         也就是lib下所有包的名字,以及步骤3中加入的四个包的名字

     另外有个log4j的配置,以后再补  

 

     注:为了减少以后的麻烦  ,tomcat  服务器必须占用端口8080                    

二. 发布服务(两种方式发布,三种方式调用)  

    A. DII(Dynamic Invocation Interface )方式访问web服务

       1. 编写服务器代码

        public class HelloWorld

        {

            public String getName(String name)

            {

                   return "hello "+name;

            }

        }

 

- 显示引用文字 -

       2. 将源码拷贝到Axis_HOME下,重命名为 HelloWorld.jws

       3. 访问连接http://localhost:8080/Axis/HelloWorld.jws?wsdl页面显示Axis自动生成的wsdl

       4. 编写访问服务的客户端代码

import org.apache.Axis.client.Call;

import org.apache.Axis.client.Service;

import javax.xml.namespace.QName;

import javax.xml.rpc.ServiceException;

import java.net.MalformedURLException;

import java.rmi.RemoteException;

public class SayHelloClient

{

    public static void main(String[] args)

 {

        try

  {

  String endpoint =

  "http://localhost:8080/Axis/HelloWorld.jws";

    Service service = new Service();

            Call call = null;

            call = (Call) service.createCall();

            call.setOperationName(new QName(

               "http://localhost:8080/Axis/HelloWorld.jws",

      "getName"));

            call.setTargetEndpointAddress

   (new java.net.URL(endpoint));

            String ret = (String) call.invoke(new Object[]

   {"zhangsan"});

            System.out.println("return value is " + ret);

        }

  catch (Exception ex)

  {

       ex.printStackTrace();

        }

    }

}  

    B. Dynamic Proxy方式访问服务 

        1.  编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloWorld

        2.  编写代理接口

                public interface HelloWorldInterface  extends java.rmi.Remote

                {

                    public String getName(String name)

                         throws java.rmi.RemoteException;

                }

        3. 编写并执行客户端程序TestHelloClient.java 

import javax.xml.rpc.Service;

import javax.xml.rpc.ServiceFactory;

import java.net.URL;

import javax.xml.namespace.QName;

public class TestHelloClient

{

    public static void main(String[] args)

 {

        try

        {

            String wsdlUrl =

   "http://localhost:8080/Axis/HelloWorld.jws?wsdl";

            String nameSpaceUri =

   "http://localhost:8080/Axis/HelloWorld.jws";

            String serviceName = "HelloWorldService";

            String portName = "HelloWorld";

            ServiceFactory serviceFactory =

   ServiceFactory.newInstance();

            Service afService =

   serviceFactory.createService(new URL(wsdlUrl),

         new QName(nameSpaceUri, serviceName));

            HelloWorldInterface  proxy = (HelloWorldInterface  )

        afService.getPort(new QName(

                    nameSpaceUri, portName), 

     HelloWorldInterface  .class);

            System.out.println

   ("return value is "+proxy.getName("john") ) ;

        }catch(Exception ex)

        {

            ex.printStackTrace() ;

        }

    }

}

    C. 编写wsdd发布web服务,编写stub client访问web服务

      1、编写服务端程序SayHello.java,编译SayHello.java

            public class SayHello

            {

                public String getName(String name)

                {

                    return "hello "+name;

                }

             }

      2.  编写LogHandler.java

            import org.apache.axis.AxisFault;

            import org.apache.axis.Handler;

            import org.apache.axis.MessageContext;

            import org.apache.axis.handlers.BasicHandler;

            import java.util.Date;

            public class LogHandler extends BasicHandler

            {

                 public void invoke(MessageContext msgContext) throws AxisFault

                {

                    /** Log an access each time we get invoked. */

                    try {

                            Handler serviceHandler = msgContext.getService();

                            Integer numAccesses =  (Integer)serviceHandler.getOption("accesses");

                            if (numAccesses == null)

                                numAccesses = new Integer(0);

                            numAccesses = new Integer(numAccesses.intValue() + 1);

                            Date date = new Date();

                            String result = date + ": service " +msgContext.getTargetService() +" accessed " + numAccesses + " time(s).";

                            serviceHandler.setOption("accesses", numAccesses);

                            System.out.println(result);

                        } catch (Exception e)

                        {

                            throw AxisFault.makeFault(e);

                        }

                }

            }

  3. 编写deploy.wsdd文件

       <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java= "http://xml.apache.org/axis/wsdd/providers/java">          

           <handler type="java:LogHandler"/>

           <service provider="java:RPC">

                 <requestFlow>

                     <handler type="print"/>

                 </requestFlow>

                 <parameter   value="SayHello"/>

                 <parameter value="*"/> 

           </service>

       </deployment>

    4. 将编译后的文件拷贝到Axis_HOME/WEB-INF/classes下,如:D:/tomcat/webapps/Axis/WEB-INF/classes

    5. 发布服务,生成服务配置文件  java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd 正常会输出一个文件server-config.wsdd

    6.生成客户端代码  

    a:方式1

  将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,

  执行下面的命令生存client stub

java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java -p client  http://localhost:8080/axis/SayHello.jws?wsdl 

这种方式相当于实际上使用了第一种发布方式来生成 wsdl 文件 然后用WSDL2Java  生成客户端stub代码

  b:方式2

   这种方式 先用SayHello生成一个静态的SayHello.wsdl 文件,然后用WSDL2Java  生成对应的客户端stub框架  

  执行如下命令生成SayHello.wsdl

java -cp %AXISCLASSPATH% org.apache.axis.wsdl.Java2WSDL -oSayHello.wsdl -lhttp://localhost:8080/axis/services/SayHello -nsayhello SayHello

  执行如下命令生成client stub

java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java  SayHello.wsdl  -p client

  生成的stub client文件列表为:

  1.SayHello.java

  2.SayHelloService.java。

  3.SayHelloServiceLocator.java

  4.SayHelloSoapBindingStub.java

  6、编写客户端程序,编译并执行

public class SayHelloClient

{

    public static void main(String[] args)

 {

        try

  {

    SayHelloService service = new client.

       SayHelloServiceLocator();

          client.SayHello_PortType

    client = service.getSayHello();

            String retValue=client.getName("Your name");

            System.out.println(retValue);

}

catch (Exception e)

{

 System.err.println

 ("Execution failed. Exception: " + e);

        }

    }

}

 

 

 

Axis2  的安装配置以及简单例子  

一.安装配置 

    1. axis2 的主页  http://ws.apache.org/axis2/index.html 

       axis2 1.0 的下载地址 http://ws.apache.org/axis2/download/1_0/download.cgi

    2. servlet 容器安装 (以tomcat5.5 为例)

       从上面给出的下载地址下载 War Distribution (axis2.war)

       放到  tomcat/webapps 目录下,在浏览器中输入 http://localhost:8080/axis2 正常显示Welcome 的页面,(查看tomcat/webapps  可以看到生成一个名为axis2的文件夹) 点击 Validate 验证安装是否正常

       一切正常侯即可使用axis2发布web服务 

       axis2 web管理环境的用户名:admin 密码:axis2

 

    3. 配置开发相关环境变量

       需要添加 AXIS2_HOME = axis2解压目录

 

       为了随处可以使用axis2 提供的代码生成工具,可以在path 环境变量里添加 %AXIS2_HOME%/bin    

        

   

二.开发服务

    axis2 通过两种方式来开发一个web服务,一种方式通过使用axis2 primary APIs

    另一种方式使用wsdl文件来生成web服务的客户端和服务端框架代码

    A.  通过 axis2 primary APIs 开发web service

        这种方式需要学习axis2 对象模型(叫AXIOM)的基础知识 ,而且可扩展性不如后一种方式。

        

    B. 通过wsdl文件开发和测试一个web服务 

       AXIS2_HOME/samples/wsdl下有wsdl文件的例子 ,以Axis2SampleDocLit.wsdl 为例,简单介绍一下生成框架代码的过程,

       1.  在命令行模式里,进入到AXIS2_HOME/samples/wsdl 目录  

 

           注意:这个Axis2SampleDocLit.wsdl 文件有点问题,需要将里边 style = "rpc"的地方全部改成 style = "document"

 

       2.  运行 wsdl2java -uri ./Axis2SampleDocLit.wsdl -ss -s d -d xmlbeans -g -o Axis2SampleDocLit -p org.apache.axis2.userguide

           这个命令在当前目录生成一个文件夹Axis2SampleDocLit 

       3.  添加服务: 编辑

               Axis2SampleDocLit/src/org/apache/axis2/userguide/Axis2SampleDocLitServiceSkeleton.java  文件

            编辑 echoString 方法为

       public org.apache.axis2.userguide.xsd.EchoStringReturnDocument echoString(          

                                                          org.apache.axis2.userguide.xsd.EchoStringParamDocument  param4)

 

       {

          String >

          String retStr = "Hello " + name + "!";

          EchoStringReturnDocument esrd = EchoStringReturnDocument.Factory.newInstance();

          esrd.setEchoStringReturn(retStr);

          return esrd;

       }

 

       4 .  进入目录Axis2SampleDocLit,可以看到build.xml,运行ant(ant的安装相当简单 ,下载ant 1.6.5 将 "ant解压目录/bin" 添加到path 环境变量即可)

           ant 会告诉你build 成功或者失败 , 

           

       5.  build 成功后转到浏览器,进入 http://127.0.0.1:8080/axis2/axis2-admin/ 登陆,Upload Service ,选择           

                                                                         Axis2SampleDocLit/build/lib/Axis2SampleDocLitService.aar,

            然后upload ,服务就发布成功了

       6. 客户端代码 

 

           public static void main(String[] args) {

               try {

                   java.lang.String str = new java.lang.String(); 

                   Axis2SampleDocLitServiceStub stub= new Axis2SampleDocLitServiceStub    

                                                                   ("http://localhost:8080/axis2/services/Axis2SampleDocLitService");

                   //Create the request document to be sent.

                   EchoStringParamDocument  reqDoc= EchoStringParamDocument.Factory.newInstance();

                   reqDoc.setEchoStringParam("Your name");

                   //invokes the Web service.

                   EchoStringReturnDocument resDoc = stub.echoString(reqDoc);

                   System.out.println(resDoc.getEchoStringReturn());

 

                  } catch (Exception e) {

                       e.printStackTrace();

                  }

             }

         编译运行,应该可以看到hello Your name 输出   

 

     C. 可以通过axis1.x 介绍 C.6.b的介绍 通过java 代码生成wsdl的原型文件

    

     D. 也可以通过Axis2_Codegen_Wizard_1.2.0 eclipse 插件 来开发wsdl 和 框架文件 

        然后通过Axis_Service_Archiver_1.0.0 eclipse 插件 打包服务

        这两个插件的下载地址

       http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_0/Axis2_Service_Archiver.zip 

       http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_0/Axis2_Code_Generator.zip  

      

        以Axis2_Codegen_Wizard_1.2.0 为例:

       下载后解压 ,解压后的文件夹是一个eclipse 插件工程,导入eclipse 开发环境 , 然后在package explorer 视图中 右键 export

       然后选择 deployable plug-ins and .... 然后指定输出目录,这样在输出目录将会生成 plugins 文件夹 ,将该文件夹拷贝到 eclipse 安装目录

       重启eclipse ,在new -->other 的列表里应该会出现axis2 wizard 的 项 ,说明安装插件成功,工具的使用请查看

       "Axis2_Codegen_Wizard_1.2.0解压目录"/help/wsdl2java-plugin.html 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值