• AXIS最佳实践


    前言:

    Axis是apache一个开源的webservice服务,需要web容器进行发布。本节主要用于介绍使用Axis开发webservice,包括服务端的创建、webservice的部署、客户端的调用。

    准备工作:
    1、尽可能了解SOAP(简单对象访问协议)、WSDL(web服务描述语言)、XML(可扩展标记语言)、axis(阿帕奇可扩展交互系统)等相关知识。
    2、http://ws.apache.org/axis/ Axis官方网站行下载 axis-bin-1_4.zip。 (本文使用的是Axis1版本,非Axis2版本)
    3、Axis的两种发布方式介绍。(Webservice服务发布的技术主要有XFire、Jax-WS、Axis等)
    A、JWS方式
      1.这种方式很简单,只需要将源码java文件放到AXIS_HOME下面,然后将后缀改为.jws,此时Axis会自动编译.jws文件,并把它自动加入到Java WebServie的服务中。
      2.但是这种方式的缺点是只能java源代码且类中不能含有包名。
      3.此方式的代码实例可参见【转】http://www.cnblogs.com/yisheng163/p/4524808.html

    B、WSDD方式
      1.编写一个Java类{MySoapServer.java}。
      2.web.xml文件中增加Axis核心处理类{AxisServlet}配置。
      3.server-config.wsdd文件中配置第一步编写的Java类。
      4.启动tomcat,服务发布成功。

    开发环境:
    Window7 + Eclipse3.3 + Tomcat6 + JDK-1.6


    第一步:服务器端的开发{WSDD方式}


    1.编写一个Java类{MySoapServer.java}

    package my.soap;
    
    public class MySoapServer
    {
        public String getStr(String name)
        {
            return "Hi, " + name + " ! Welcome to MySoapServer !";
        }
        
        public int getAdd(int i, int j)
        {
            return i + j;
        }
    }

    2.web.xml文件中增加Axis核心处理类{AxisServlet}配置

    <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>
          org.apache.axis.transport.http.AxisServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    3.server-config.wsdd文件中配置第一步编写的Java类

    <service name="MySoapServer" provider="java:RPC" use="literal">
       <parameter name="className" value="my.soap.MySoapServer" />
       <parameter name="allowedMethods" value="*" />
       <namespace>http://client.mysoap</namespace>
    </service>

    此文件放在项目的WEB-INF下面,<service>标签的name属性是发布的webservice的名称,可以自己命名,
    第一个<parameter>标签的value属性指定实现类的完整路径,包括类名。
    第二个<parameter>标签的value属性指定实现类中哪些方法需要发布,此处*为代表类中所有方法,
    如果需要指定发布具体某几个方法,value="methodName1 methodName2",方法名中间使用空格隔开即可。
    <namespace>标签为可选,它的作用是发布服务中的wsdl中的命名空间。

    4.启动tomcat,webservice服务发布成功

    截图中的web服务名称为AxisFoo,因此在Browser地址输入http://ip:port/AxisFoo/services,页面显示如下:

    第二步:客户端的开发{下面介绍三种调用webservice方式}

    A、动态调用接口方式

    1.测试代码,MySoapClient.java

    package my.soap;
    import java.net.URL;
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    public class MySoapClient { // “MySoapServer”是server-config.wsdd文件发布服务名称“<service name="MySoapServer" provider="java:RPC" >” private static final String endpoint = "http://localhost:8080/AxisFoo/services/MySoapServer"; public static void main(String[] args) throws Exception { Service service = new Service();// 1.创建service对象,通过axis自带的类创建 Call call = (Call) service.createCall(); // 2.创建服务方法的调用者对象call call.setTargetEndpointAddress(new URL(endpoint)); // 3.请求服务的URL call.setOperationName("getStr"); // 4.远程调用方法名 // 通过invoke方法调用webservice, new Object[]为远程调用方法需要传递的参数 String res = (String) call.invoke(new Object[] { "MyAxisFoo!" });// 5.调用webservice System.out.println(res); } }

    2.测试结果

     Hi, MyAxisFoo! ! Welcome to MySoapServer ! 

    B、wsimport命令生成java代码方式

     wsimport -d D:/axisclient/ -keep -verbose -p wsimport.client http://localhost:8080/AxisFoo/services/MySoapServer?wsdl 

    个人不推荐使用此方式,不同Axis版本的服务端使用wsimport生成客户端代码存在bugs。

    因此此处不做详细介绍,有需要可以参见[转]:http://www.cnblogs.com/simle/archive/2011/11/03/2233417.html

    C、[推荐]使用eclipse自带WEB service client指定wsdl文件,从而反向生成java代码方式

    1、右键点击项目名称—>“NEW”—>“Other”—>输入“web” 如下

    2、点击“Next”出现客户端配置窗口,如下点击“Browser”选择wsdl文件,然后直接点击“Finish” 如下

    3、生成后的客户端代码如下红色区域

    4、测试代码,MySoapClient2.java

    package my.soap;
    import java.net.URL;
    import mysoap.client.MySoapServer;
    import mysoap.client.MySoapServerServiceLocator;
    
    public class MySoapClient2
    {
        private static final String endpoint = "http://localhost:8080/AxisFoo/services/MySoapServer";
        
        public static void main(String[] args) throws Exception
        {
            MySoapServerServiceLocator locator = new MySoapServerServiceLocator();
            MySoapServer mySoapServer = locator.getMySoapServer(new URL(endpoint));
            
            int add = mySoapServer.getAdd(3, 4);
            System.out.println(add);
         // 测试结果输出:7 } }

    示例代码下载:

    Axis服务和客户端示例代码:AxisFoo

  • 相关阅读:
    Qt Creater更改默认构建目录
    QT-无法定位程序输入点解决方案
    Qt qmake报错(TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension)
    python学习--交互式图形编程实例二
    python学习--交互式图形编程实例一
    python学习--面向对象程序设计实例
    python学习--面向过程程序设计实例
    python学习--程序设计方法实例一
    python学习--字典操作实例二
    python学习--文档
  • 原文地址:https://www.cnblogs.com/maven-chao/p/5247963.html
Copyright © 2020-2023  润新知