基于Axis2的webservice开发及跨平台跨语言调用

一、webservice相关术语

1、SOA

Web服务建立于Service-Oriented Architecture(面向服务的体系结构,简写SOA)基础之上,SOA是最新的分布式计算技术。

 

2、SOAP消息

Simple Object Access Protocol(简单对象访问协议)

SOAP与其它分布式对象协议最为主要的区别在于它是基于XML的(传统的IIOP(CORBA)或JRMP(RMI)协议是基于二时进制的)。SOAP有自己的XML Schema定义,并大量依赖于用户自定义XML Schema。每一条经网络被送出的SOAP消息,都包含了标准SOAP元素与应用数据的XML文档。SOAP用作在HTTP、SMTP、FTP等 Internet协议之上使用绑定进行传送的消息交换协议。SOAP提供传输数据的标准方式,充当在服务提供方和服务请求方之间激活服务的消息交换服务

 

3、WSDL

Web Service Definition Language(web服务定义语言)

是一种用来描述web service及其访问信息的XML文档,它与编程语言、平台和协议无关。WSDL的协议无关性意味着,它可以用于描述任何类型的web service,而不仅仅是基于HTTP的SOAP类型,它包含web服务4个方面的重要信息

 

4、UDDI

Universal Description,Discovery and Integation(通用描述、发现和集成)

它定义了在互联网上发布和寻找web service的标准.与XML、SOAP、WSDL不同,它并非web service的基础。但是在Java EE中,它被认为是web service的一个基本要素。web服务代理方将UDDI用作注册web服务提供方的标准,而服务请求方则通过UDDI注册表通信来查找并调用服务。可UDDI可以实现为公共注册表,以支持全球的团体,也可实现为私有的注册表

 

实现web服务的操作步骤

(1)web服务提供方创建SOAP代理接口和基于WSDL的服务描述

(2)web服务提供方注册/发布服务

(3)web服务代理方(通常是一个UDDI注册表)将服务描述存储为绑定模块或URL

(4)web服务请求方从UDDI注册表查找服务及绑定信息

(5)web服务请求方激活并获得WSDL

(6)双方使用SOAP RPC或SOAP Messaging交换机制来交换数据

 

Web service的出现为真正意义上的跨越硬件(设备)、操作系统(平台)、编程语言和应用系统的互操作能力提供了可能。

 

二、运行环境

Axis2的下载和安装在Axis2下载与安装中已介绍,点击打开链接。

 

三、开发及发布webservice

在Axis2中可以直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。

首先编写Service类,代码如下:

 

public class Service {
    public String sayhello(String usename){
        return "Hello:" + usename;
    }
}

Service类中的sayhello方法是public的,发布后将成为webservice方法。

在命令行通过javac命令编译Service类生成Service.class文件。将Service.class文件放到%TomcatHome%\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录)。现在我们已经成功将Service类发布成了webservice。在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/services/listServices

这时当前页面将显示所有在Axis2中发布的webservice,如图1所示。

 

图一

 

点击服务名字就能得到相应的WSDl文件。

在编写、发布和测试WebService时应注意如下几点:

1. POJO类不能使用package关键字声明包。

 

2. Axis2在默认情况下可以热发布WebService,也就是说,将WebService.class文件复制到pojo目录中时,Tomcat不需要重新启动就可以自动发布WebService。如果想取消Axis2的热发布功能,可以打开%TomcatHome%\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置代码:

 

<parameter name="hotdeployment">true</parameter>

 <parameter name="hotupdate">true</parameter>

 <parameter name="enableMTOM">false</parameter> 

<parameter name="enableSwA">false</parameter>

 

true改为false即可。要注意的是,Axis2在默认情况下虽然是热发布,但并不是热更新,也就是说,一旦成功发布了WebService,再想更新该WebService,就必须重启Tomcat。这对于开发人员调试WebService非常不方便,因此,在开发WebService时,可以将Axis2设为热更新。在axis2.xml文件中找到

 

<parameter name="hotupdate">false</parameter>

 

false改为true即可。

 

3.发布WebServicepojo目录只是默认的,如果读者想在其他的目录发布WebService,可以打开axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:

<deployer extension=".class" directory="yourDirectory" class="org.apache.axis2.deployment.POJODeployer"/>

 

上面的配置允许在%TomcatHome%\webapps\axis2\WEB-INF\yourDirectory目录中发布WebService。例如,将本例中的Service.class复制到ourDirectory目录中也可以成功发布,但要删除POJO目录下的类Service.class,以免造成WebService会重名。

 

四、Java调用webservice

Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。wsdl2java.bat命令可以在%Axis2安装目录%bin目录中找到。在使用wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是<Axis2安装目录>

AXIS2_HOME环境变量,配置如图二所示

 

图二

 

调用WebService的代码生成:

\webapps\axis2-1.4.1-bin\axis2-1.4.1\bin\wsdl2java.bat拖到cmd命令行中

紧接着添加"-uri http://localhost:8080/axis2/services/Service?wsdl -p client -s -o service"回车后在如下目录中就可以找到ServiceStub.java,如图三所示

 

图三

 

在此重提一下Java环境变量的配置

PATH:%JAVA_HOME%/bin

CLASSPATH:%JAVA_HOME%/lib

JAVA_HOME:JDK的安装目录

在装有多个JDK的时候,JAVA_HOME要指定唯一的JDK,即JAVA_HOME的值是唯一的,否则在执行上面的命令时会出现图四的错误。

 

图四

 

生成了ServiceStub.java类后,就可以在Eclipse中使用客户端调用webservice了,把上述目录放进Eclipse工作路径,新建Java项目,名字为service,项目建好后导入Axis2包,之后新建TestService.java类,代码如下:

package client;

import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;

public class TestService {

    public static void main(String[] args) throws RemoteException {
        try {
            ServiceStub myservice=new ServiceStub();
            ServiceStub.Sayhello say=new ServiceStub.Sayhello();
            say.setArgs0("qiuchao");
            System.out.println(myservice.sayhello(say).get_return());
        } catch (AxisFault e) {
            e.printStackTrace();
        } finally {
        }
    }
}

执行客户端后将在控制台看到如下信息,如图五所示

 

图五

 

至此,webservice发布及Java中调用完成。

 

五、用C#调用webservice

Visual Studio 2010新建一个项目WebserviceTest.

项目建好之后,在菜单栏的“项目”中点击“添加服务引用...”如图六

 

图六

 

点击“高级...”之后点击“添加web引用...”在URL中输入WSDL文件地址http://localhost:8080/axis2/services/Service?wsdl,即能找到相应的服务,在“web引用名”改成自己想要的名称,之后点击“添加引用”。如图七

 

图七

 

添加完服务之后便在Program.cs写客户端,客户端代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WebserviceTest.service;

namespace WebserviceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Service service = new Service();
            Console.WriteLine("sayhello:" + service.sayhello("qiuchao"));
            Console.ReadLine();
        }
    }
}

调试程序前,要先把发布的服务启动,即启动Tomcat,后执行客户端程序,就可得到如图八所示结果。

 

图八

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值