`

Apache Axis2 环境搭配详解

 
阅读更多

Apache Axis2 环境搭配详解  

 

    WebService概念:它可以让一个程序透明的调用互联网程序,不用管具体实现细节,只要WebService公开了服务接口,远程客户端就可以调用服务。Webservice基于HTTP协议,它是分布式应用程序的发展趋势。

    Apache Axis是一个开源的WebSerbive运行引擎,现在拥有1.x和2.x两个版本。本文讲解Axis2.x版本,该版本较Axis1.x版本在体系结构上进行了重写,具有更高的效率、更加模块化也更加面向XML。Axis应该是最早一批SOAP(简单对象访问协议),该协议提供了标准的RPC方法来调用WebService。SOAP、RPC是建立在HTTP请求响应模式上的。

1.环境准备:

IDE:Eclipse3.5

依赖的JAR文件:

www.apache.org(Apache官方网站)上去下载:

a.WebService所需的包,这里我们下载Axis2的1.5.1版本。

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

b.Jakarta项目下的Ex-Jakarta项目下的HttpComponents子项目的核心JAR包,HttpCore4.1-alpha1的Binary包。

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

配置Eclipse,Eclipse自带了开发WebService的工具。

打开Eclipse-->点击菜单windows-->Preferences-->WebServices-->Axis2Preferences-->设置Axis2 runtime location为Axis2下载后并解压的核心包的位置:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

选择后Eclipse会自动检测包是否正确。如果successfully提示表示设置正确。

2.在Eclipse创建一个WebProject时,点击Configuration的Modify会出现下图界面:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

勾选Axis2 Web Services按OK。回到新建WebProject界面,完成项目创建。

创建成功后会发现在WEB-INF文件夹下会多出一个axis2-web的文件夹,这个是Axis2的项目文件夹。

现在启动服务器会抛出异常,这是因为Eclipse在自动加载生成该项目时有几个问题需要手动修复,下面分别列出:

问题一:会抛出异常:java.lang.ClassNotFoundException: org.apache.axis2.transport.http.AxisAdminServlet

是因为生动生成的web.xml文件中所指定的AxisAdminServlet包路径有错。

自动生成的源码如下:

<servlet>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <servlet>
    <display-name>Apache-Axis Admin Servlet Web Admin</display-name>
    <servlet-name>AxisAdminServlet</servlet-name>
    <servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class>
    <load-on-startup>100</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>AxisAdminServlet</servlet-name>
    <url-pattern>/axis2-admin/*</url-pattern>
  </servlet-mapping>

注意红色字体部分,我们可以去看一下所下载的Axis2的源包。AxisAdminServlet类所在的包路径并不在下列这个路径中org.apache.axis2.transport.http,该类是属于包org.apache.axis2.webapp下。

问题二:会抛出异常:java.lang.ClassNotFoundException: org.apache.http.HttpResponseFactory,是因为少JAR包。将开始下好的HttpCore4.1-alpha1包解压后主文件夹下的lib文件夹下有httpcore-4.1-alpha1.jar包。将其拷贝到WEB-INF下的lib文件夹中。

重启服务器,正常启动成功,在浏览器地址栏输入:http://localhost:9000/WebServiceProject/axis2-web/

进入主页,如下图:表示Axis2部署成功:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

点击Validate进入验证Axis2环境界面:

这个页面会加册Axis2运行必备的一些库是否已具备,如果看到下列图中的绿色字体表示环境已搭建成功:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

再次返回主页,点击Service,可以看到当前可用的Service列表。默认有一个名为“Version”的WebService。

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

再次返回主页,点击Adminnistation,进入管理控制台的登录界面:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

输入username(用户名)和password(密码)。默认用户名为:admin,密码为:axis2。

点击登录进入Axis2管理控制平台:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

可点击左边的Available Service产看当前可用的Service列表。

3.开发实例

在src下新建一个名为HelloApp的类:

package service;

public class HelloApp {

 public HelloApp() {
  
 }
 /**
  * 对外公开的服务方法
  */
 public String sayHello(String name) {
  return "Hello," + name;
 }
}

在Eclipse中将鼠标放在刚才建立的HelloApp.java上点击右键,弹出菜单选择Web Service再选择Create Web Service,会弹出下图的界面:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

上下分别有个滑块,把上面的滑块滑至最上端(为Test service)。把下方滑块滑至第二格(Develop client)表示生成当前服务的客户端代码(完成后会在Eclipse中会自动生成一个名字为:[当前工程名+Client]的工程),同时选中publish the Web Service(公开这个Web Service)。点击下一步直至完成。步骤如图:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

保持默认设置,点击下一步。

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

继续保持默认设置,点击下一步。

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

当前设置Port Name(端口名)选择:当前工程名+SOAP11HttpSoap11Endpoint。并勾选下面的Generate a JUnit test case to the service。其它选项保持默认点击完成。

完成后可以看到Web Service Explorer中可以看到我们刚刚对外公开的HelloApp服务,如下图:

 

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

选中左边窗口中的HelloApp服务,找到并点击右边窗口中的Type(类型)为SOAP的服务绑定Name。

进入下图界面:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

当前列出了当前公开服务可用的方法,当前服务只有一个sayHello方法。点击Operations下Name为sayHello的方法,进入下图的界面:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

当前列出了当前公开服务的方法及参数。当前的唯一方法sayHello有一个String类型的名为name的参数。

点击Add,转到下图:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

为当前公开服务的sayHello方法传入一个String类型的name参数“EugeneHeen”,点击Go按钮。此时下面的Status(状态窗口)中会显示调用该方法后的结果。点击Source可以浏览到已经被SOAP分装好该服务的XML文件。

4.Eclipse生成的Client工程

在Eclipse中找到自动生成的客户端工程。在src下有一个当前公开服务的测试类。这是一个JUnit测试用例。

切记和服务端一样,这里需要将我们开始下好的HttpCore4.1-alpha1包解压后主文件夹下的lib文件夹下有httpcore-4.1-alpha1.jar包。不然会抛出异常:java.lang.ClassNotFoundException: org.apache.http.HttpResponseFactory

如图:

Apache Axis2 环境搭配详解 - EugeneHeen - EugeneHeen

打开HelloAppTest.java,找到testSayHello(String name)方法。里面有这样一行注释 // TODO : Fill in the sayHello4 here,它提示我们在此设置调用方法的参数。

Sub是存根。是有Axis2帮我们生成的客户端存根代码。可以这样理解,Sub封装了查找服务、编码、发送、接收、解码请求等一系列动作的帮助类。有了它我们不用去关心WebService底层调用的技术细节,而是直接调用WebService提供的方法。

 service.HelloAppStub stub = new service.HelloAppStub();这是方法中的第一行代码,实例化了一个存根。

方法中的第二行代码:

service.HelloAppStub.SayHello sayHello4 = (service.HelloAppStub.SayHello)getTestObject(service.HelloAppStub.SayHello.class);

调用了方法

public org.apache.axis2.databinding.ADBBean getTestObject(java.lang.Class type) throws java.lang.Exception{
           return (org.apache.axis2.databinding.ADBBean) type.newInstance();
        }

返回一个org.apache.axis2.databinding.ADBBean类型的对象。利用他来为要调用的方法设值。

为参数设值:sayHello4.setName("EugeneHeen");

最后自己编写一行打印调用当前公开服务的sayHello方法的语句:

System.out.println(stub.sayHello(sayHello4).local_return);

利用存根调用当前公开服务的sayHello(String name)方法,一定要调用local_return才能正确返回字符串。

运行该JUnit得到的结果与我们用Web Service Explorer为方法设值是一样的。这就是客户端编码调用。

分享到:
评论

相关推荐

    Java毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zip

    Java毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Java毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zip

    Music-app-master.zip

    Music-app-master

    基于springboot的权限管理系统.zip

    基于springboot的java毕业&课程设计

    外东洪路中段.m4a

    外东洪路中段.m4a

    基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档(毕业设计&课程设计&项目开发)

    基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 这是一个完整的微电网模型,包括电源、电力电子设备、使用MatLab和Simulink的负载和电源模型。该模型基于费萨尔·穆罕默德的硕士论文《微网格建模与仿真》。 什么是微电网 模拟的微电网使用一组电源和负载在与任何集中式电网(宏电网)断开连接的情况下工作,并自主运行,为其局部区域提供电力。该仿真对微电网在稳态下进行建模,以分析其对输入变化的瞬态响应。 此模拟的目的 对系统进行全年模拟,测量负载、产量、电压和频率。 给出简化规划和资源评估阶段的方法。

    MySQL8.4.0 LTS(mysql-server-8.4.0-1debian12-amd64.deb-bundle)

    MySQL8.4.0 LTS(mysql-server_8.4.0-1debian12_amd64.deb-bundle.tar)适用于Debian 12 Linux (x86, 64-bit)

    改进混沌游戏优化(ICgo)matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于SpringBoot,SpringCloud的微服务大型在线学习平台实现.zip

    基于springboot的java毕业&课程设计

    圣经投屏软件(5种语言版本)

    圣经投屏软件(5种语言版本)

    基于SpringBoot,Spring Security实现的前后端分离权限管理简易系统.zip

    基于springboot的java毕业&课程设计

    jSP在线教学质量评价系统的设计与实现(源代码)

    在线教学质量评价系统可以方便和全面地收集教师教学工作的数据,提供师生网上评教的评分结果,快速集中收集各方面的评教信息,使教务管理部门能够及时了解教学动态和师资情况,为教务老师提供相关决策支持,为职称评聘提供教学工作质量的科学依据,同时减轻了教务老师的工作量。

    测障测角小车程序+仿真电路DSN文件+设计报告doc.zip

    包含作品的设计论文doc文档+测障测角小车程序+仿真电路DSN文件,可直接修改,适合于电赛备赛、课程设计、毕设参考等。 设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示所走的路程和行走的时间,并可发声发光。作品可以作为大学生学习嵌入式控制的强有力的应用实例。     作品以两电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动作,以达到自身控制。电机驱动电路采用高电压,高电流,四通道驱动集成芯片L293D。其中避障采用红外线收发来完成;铁片检测部分采用电感式接近开关LJ18A3-8-Z/BX检测;黑带检测采用红外线接收二极管完成;趋光部分通过3路光敏二极管对光源信号的采集,再经过ADC0809转化为数字信号送单片机处理判别方向。由控制单元处理数据后完成相应动作,实现了无人控制即可完成一系列动作,相当于简易机器人。 关键字:智能控制   蔽障  红外线收发  寻迹行驶  趋光行驶

    基于Python卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计

    1412基于Python卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计毕业源码案例设计 卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。 全连接层(Fully Connected Layer): 在CNN的末端,通常会有几层全连接层(也称为密集层或线性层)。这些层中的每个神经元都与前一层的所有神经元连接。 全连接层通常用于对提取的特征进行分类或回归。 训练过程: CNN的训练过程与其他深度学习模型类似,通过反向传播算法和梯度下降(或其变种)来优化网络参数(如滤波器权重和偏置)。 训练数据通常被分为多个批次(mini-batches),并在每个批次上迭代更新网络参数。 应用: CNN在计算机视觉领域有着广泛的应用,包括图像分类、目标检测、图像分割、人脸识别等。 它们也已被扩展到处理其他类型的数据,如文本(通过卷积一维序列)和音频(通过卷积时间序列)。 随着深度学习技术的发展,卷积神经网络的结构和设计也在不断演变,出现了许多新的变体和改进,如残差网络(ResNet)、深度卷积生成对抗网络(DCGAN)等。

    基于Vue + SpringBoot实现的前后端分离的仿小米商城项目.zip

    基于springboot的java毕业&课程设计

    QKD 协议密钥率的数值评估matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于springboot校园社团管理.zip

    基于springboot的java毕业&课程设计

    基于卷积神经网络的城市感知评估.zip

    卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Po

    课设毕设基于SpringBoot+Vue的医院急诊系统 LW+PPT+源码可运行.zip

    课设毕设基于SpringBoot+Vue的医院急诊系统 LW+PPT+源码可运行.zip

    无人驾驶实战-无人驾驶高精地图

    无人驾驶高精地图,学习无人驾驶高精地图

    企业数据治理之数据存储治理方案.pptx

    企业数据治理之数据存储治理方案

Global site tag (gtag.js) - Google Analytics