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

本文介绍了WebService的基础概念,包括SOA、SOAP、WSDL和UDDI等,并详细讲解了如何使用Axis2发布WebService,以及如何用Java和C#语言进行调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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,后执行客户端程序,就可得到如图八所示结果。

 

图八

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值