Eclipse+Axis2发布WSDL类型的Web Service并用SoapUI测试调用 2021.11.15
1、Web Service简介
????????参考Eclipse帮助手册 ????????Web services 是建立可互操作的分布式应用程序的新平台。Web service 平台是一套标准,它定义了应用程序如何在Web 上实现互操作性。Web Service 是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML (标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。Web Service 平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service 平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。 ????????Web Service 是一种跨编程语言和跨操作系统平台的远程调用技术。通俗来讲就是web 服务,controller 控制层定义的一系列接口,就是应用程序的API 。XML+XSD,SOAP和WSDL就是构成Web Service 平台的三大技术。
1.1 XML
????????可扩展的标记语言(标准通用标记语言下的一个子集)是Web service 平台中表示数据的基本格式。因此XML解决了Web Service中数据表示的问题。
1.2 XSD
????????为了定义一套标准且可扩展的数据类型(如整数、浮点数、字符串所占用的比特位数8、16、32 or 64),同时满足互操作性的需要,W3C 制定的XML Schema (XSD )作为一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。因此XSD解决了Web service中系统标准数据类型的问题。
1.3 UDDI
????????UDDI (Universal Description, Discovery and Integration )是为加速Web Service 的推广、加强Web Service 的互操作能力而推出的一个计划,基于标准的服务描述和发现的规范(specification )。UDDI 计划的核心组件是UDDI 商业注册,它使用XML文档来描述企业及其提供的Web Service 。
1.2 SOAP
????????SOAP 即简单对象访问协议(Simple Object Access Protocol ),它是用于交换XML (标准通用标记语言下的一个子集)编码信息的轻量级协议。简单对象访问协议(SOAP )提供了标准的RPC 方法来调用Web service 。SOAP 规范定义了SOAP 消息的格式,以及怎样通过HTTP 协议来使用SOAP 。SOAP 也是基于XML (标准通用标记语言下的一个子集)和XSD 的,XML 是SOAP 的数据编码方式,可以运行在任何其他传输协议上。
1.2 WSDL
????????Web service 描述语言(WSDL )就是这样一个基于XML (标准通用标记语言下的一个子集)的语言,用于描述Web service 及其函数、参数和返回值。用机器能阅读的方式提供一个正式的描述文档。 WSDL 文件保存在Web 服务器上,通过一个url 地址就可以访问到它。客户端要调用一个Web Service 服务之前,要知道该服务的WSDL 文件的地址。 ????????Web Service 服务提供商(Service Provider)可以通过两种方式来暴露它的WSDL 文件地址:一、注册到UDDI 服务器,以便被人查找;二、直接告诉客户端调用者。
2、环境配置
2.1 安装Java 1.8(JDK8)
????????到Oracle官网下载Java SE 安装包,安装Java 完成后需要设置环境变量JAVA_HOME 的值为D:\Program Files (x86)\Java\jdk1.8.0_221 和classpath 的值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; ,之后Win+R打开cmd 窗口输入java -version 来测试java 环境,若输出java 版本则配置成功。
2.2 安装Eclipse(推荐Java EE)
????????首先需要到Eclipse官网查看可下载的各版本的Eclipse ,对各个版本的功能有大致的了解后才能选择满足自己要求且合适的版本,这里特别值得强调的是需要选择Kepler下R系列的免安装版Eclipse 压缩包eclipse-jee-kepler-R-win32-x86_64.zip并解压,进入eclipse 文件夹后手动新建一个工作空间文件夹,这里取名为myworkspace ,然后双击可执行程序eclipse.exe 来启动Eclipse 。 ????????启动eclipse 后需要选择工作空间为刚才新建的myworkspace 文件夹后点击OK 即可。 ????????新建Java 工程helloworld ,在src 下新建com 包,在com 包下新建MyTest 类,输入如下代码后配置项目的Build Path 设置JDK 路径后运行。
package com;
public class MyTest
{
public static int add(int a,int b)
{
return a+b;
}
public static int sub(int a,int b)
{
return a-b;
}
public static void main(String[] args)
{
System.out.println("hello,world!");
int c = add(12,34);
int d = sub(12,34);
System.out.println(Integer.toString(c)+"\n"+Integer.toString(d));
}
}
2.3 Eclipse安装Axis2插件
????????Apache Axis2 是Axis 的后续版本,是新一代的SOAP 引擎,它具有更强的灵活性并可扩展到新的体系结构,可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。 ????????Axis2主要有以下几个特点:
1. 采用名为 AXIOM(AXIs Object Model)的新核心XML(标准通用标记语言的子集)处理模型,利用新的XML解析器提供的灵活性按需构造对象模型。
2. 支持不同的消息交换模式。Axis2支持三种模式:In-Only、Robust-In和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答;Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。
3. 提供阻塞和非阻塞客户端 API。
4. 支持内置的 Web服务寻址 (WS-Addressing) 。
5. 灵活的数据绑定,可以选择直接使用 AXIOM,使用与原来的 Axis 相似的简单数据绑定方法,或使用XMLBeans、JiBX 或 JAXB 2.0 等专用数据绑定框架。
6. 新的部署模型,支持热部署。
7. 支持HTTP,SMTP,JMS,TCP传输协议。
8. 支持REST (Representational State Transfer)。
????????下载,需要下载Axis2 对应的Eclipse 插件:axis2-eclipse-service-plugin.zip和axis2-eclipse-codegen-plugin.zip这两个文件,想要下载其他版本的可以点击下方的archive后进行选择。 ????????最终下载了axis2-eclipse-codegen-plugin-1.7.8.zip 和axis2-eclipse-service-plugin-1.7.8.zip 这两个文件并解压,解压后的文件内容如下 ????????然后进入到Eclipse文件夹E:\Download Software\eclipse-jee-kepler-R-win32-x86_64\eclipse 下的dropins 文件夹,新建axis2 文件夹后,再在axis2 文件夹中新建features 文件夹,然后在features 文件夹中将下载解压后的两个jar 包文件(org.apache.axis2.eclipse.service.plugin_1.7.8.jar和org.apache.axis2.eclipse.codegen.plugin_1.7.8.jar)拷贝到此处。 ????????启动eclipse.exe 后,点击File->New->Other弹出New 窗口提示Select a wizard 向导,看到有Axis2 Wizaids 则配置成功。
2.4 安装Tomcat容器
????????到Tomcat官网下载对应版本的Tomcat安装文件,这里选择的是apache-tomcat-10.0.12.zip,下载完成后解压,将解压后的apache-tomcat-10.0.12文件夹粘贴到D:\program files 下 ????????打开apache-tomcat-10.0.12 文件夹下的RUNNING.txt 文件可查看运行Tomcat10 的前提条件:(1)已安装Java 8+ 版本的JRE 或JDK (已完成);(2)下载Tomcat 文件并安装解压(已完成);(3)设置环境变量JAVA_HOME (已完成)和CATALINA_HOME (需完成)。 ????????在计算机上右键,选择属性,选择高级系统设置下的环境变量后弹出环境变量窗口,在系统变量中新建变量CATALINA_HOME ,编辑其值为D:\program files\apache-tomcat-10.0.12 ;新建系统变量CATALINA_BASE ,编辑其值为D:\program files\apache-tomcat-10.0.12 。 ????????现在用记事本分别打开D:\program files\apache-tomcat-10.0.12\bin 文件夹下的startup.bat 文件和shutdown.bat 文件,在@echo off 的下一行添加以下两行内容:
SET JAVA_HOME=D:\Program Files (x86)\Java\jdk1.8.0_221
SET TOMCAT_HOME=D:\program files\apache-tomcat-10.0.12
????????此时用鼠标双击startup.bat 来启动Tomcat10服务器,启动后打开浏览器访问http://localhost:8080/出现Apache Tomcat/10.0.12页面则Tomcat 环境配置成功。 ????????之后可用鼠标双击shutdown.bat 来关闭Tomcat10服务器。 ????????如果想要解决控制台显示中文乱码的问题,则可以用记事本打开找到D:\program files\apache-tomcat-10.0.12\conf 文件夹下的logging.properties 文件,找到java.util.logging.ConsoleHandler.encoding = UTF-8 这一行,将UTF-8 修改为GBK,此时再启动bin 文件夹下的startup.bat 运行,结果控制台中文显示正常。
2.4.1 .war文件介绍
????????war 包是Sun 提出的一种web 应用程序格式,与jar 类似,是很多文件的压缩包。WAR 文件(Web Application Resource or Web application Archive ) 是由 JAR 文件、JavaServer pages 、 Java Servlets ,Java Classes 、XML 文件、标签库、静态网页(HTML )以及其他资源组成一个web 应用。war 包中的文件按照一定的目录结构来组织,根目录下包含有html 和jsp 文件,另外还有WEB-INF 目录,此目录下含有一个web.xml 配置文件和一个classes 目录(包含编译好的servlet 类和jsp ),或者servlet所依赖的其他类(如JavaBean),所依赖的类也打成jar 包成放在WEB-INF下的lib目录下。以Tomcat 为例,将war 包放置在它的webapps目录下后启动Tomcat ,这个包就会自动解压发布。
2.4.2 Tomcat容器中安装Axis2服务器
????????首先到Axis2官网下载 axis2-1.8.0-war.zip文件并解压,将axis2.war 文件粘贴到Tomcat的webapp文件夹:D:\program files\apache-tomcat-10.0.12\webapps ????????启动Tomcat 服务器,访问http://localhost:8080/axis2/后看到Axis2 欢迎页面则配置成功,同时在tomcat 的webapps 文件夹下生成了axis2 文件夹,axis2文件夹下的结构如下。
2.5 直接安装Axis2服务器
????????下载axis2-1.8.0-bin.zip并解压,然后查看installation-std-bin.txt 文件,需要新建系统环境变量AXIS2_HOME ,编辑其值为D:\program files\axis2-1.8.0 ????????启动bin 文件夹下的axis2server.bat 来启动Axis2服务器,访问http://localhost:8080/axis2/services/,启动后可以看到Axis2服务器上已部署的服务。
3、Eclipse+Axis2新建Web Service实例
3.1 Eclipse新建Java工程编译生成.class字节码文件
????????打开Eclipse ,点击菜单栏File->New->Other弹出New 窗口,选择Java Project 后点击Next ,在New Java Project 窗口中输入项目名称,选择项目保存位置和默认JRE 后点击Finish 。 ????????在左侧项目的src上右键新建两个package 包,名称分别为com 和function ,然后在function 包上右键新建JieCheng 类,在com 包上右键新建MainInvoke 类,编辑这两个java 类的具体代码后编译运行,运行成功后会在对应目录下生成bin 文件夹,其中有各个包文件夹,文件夹中有编译后的.class 文件(MainInvoke.class和JieCheng.class)。 JieCheng.java
package function;
public class JieCheng
{
public int jc(int n)
{
if(n<=1)
return 1;
else if(n >1)
{
int a = jc(n-1);
return a*n;
}
return n;
}
public int add(int a,int b)
{
return a+b;
}
public String say(String s)
{
return s+",hello!";
}
public String connect(String s1,String s2)
{
return s1+s2;
}
}
MainInvoke.java
package com;
import function.JieCheng;
public class MainInvoke
{
public static void main(String[] args)
{
JieCheng jc = new JieCheng();
System.out.println(Integer.toString(jc.add(1, 2)));
System.out.println(Integer.toString(jc.jc(5)));
System.out.println(jc.say("China"));
System.out.println(jc.connect("This is ","my computer!"));
}
}
3.2 利用Axis2插件生成aar文件后发布为Axis2服务器上的web service
????????在Eclipse 中点击File->New->Other,在New 窗口中选择Axis2 Wizards下的Axis2 Service Archiver 后点击Next ,在弹出的Service Archiver窗口中选择E:\Download Software\eclipse-jee-kepler-R-win32-x86_64\eclipse\myworkspace\FirstJavaProject\bin 文件夹后点击Next ,之后选择Skip WSDL 点击Next ,由于未使用第三方外部依赖库所以直接点击Next (注:如果有的话应该选择相应的依赖jar包),然后选中Generate the service xml automatically点击Next , ????????在Generate the Service XML file窗口中,对应Class Name输入包名.类名 后点击右侧的Load ,查找到后会在下方显示所声明的方法,选中所需要的方法后点击Next ,选择输出文件的位置为D:\program files\apache-tomcat-10.0.12\webapps\axis2\WEB-INF\services ,同时输入文件名为jiecheng_service 后确定即可。 ????????下图为生成的文件为jiecheng_service.aar 文件,然后启动Tomcat 服务器进行查看,(这种方式实测出现问题) ????????也可将jiecheng_service.aar 文件复制到D:\program files\axis2-1.8.0\repository\services 文件夹下,然后启动Axis2 服务器进行查看。(推荐使用这种方式,实测成功) http://localhost:8080/axis2/services/MyService?wsdl
3.3 .aar文件介绍
4、使用SoapUI调用发布的Web Service
????????SoapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web Service的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse ,Maven ,Netbeans 和IDEA 中使用。把一个或多个测试套件(TestSuite )组织成项目,每个测试套件包含一个或多个测试用例(TestCase ),每个测试用例包含一个或多个测试步骤,包括发送请求、接受响应、分析结果、改变测试执行流程等。具体的使用方法可参考 SoapUI帮助。
????????打开SoapUI 软件后,点击File->New SOAP Project,在弹出的New SOAP Project窗口中输入Project Name为MyServicewsdlTestProject ,Initial WSDL为http://localhost:8080/axis2/services/MyService?wsdl 后点击OK 。 ????????进入工程后,可以看到有MyServiceSoap11Binding 和MyServiceSoap12Binding ,这两个本质差不多,这里以第一个为例,点击进去发现有add、connect、jc和say四个接口,分别点击每个接口下的Request1 后,在右侧的窗口左侧的XML 中相应位置输入对应的参数,然后点击三角形绿色执行按钮后,执行成功则会在右侧输出请求的结果,结果XML 中包含正确的输出。
|