Eclipse+Axis2发布WSDL类型的Web Service并用SoapUI测试调用(2021.11.15)

Posted jing_zhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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控制层定义的一系列接口,就是应用程序的APIXML+XSD,SOAPWSDL就是构成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 serviceSOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAPSOAP也是基于XML(标准通用标记语言下的一个子集)和XSD的,XMLSOAP的数据编码方式,可以运行在任何其他传输协议上。

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_221classpath的值为.;%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) 
	{
		// TODO Auto-generated method stub
		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 Axis2Axis的后续版本,是新一代的SOAP引擎,它具有更强的灵活性并可扩展到新的体系结构,可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-SecurityWS-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.zipaxis2-eclipse-codegen-plugin.zip这两个文件,想要下载其他版本的可以点击下方的archive后进行选择。



        最终下载了axis2-eclipse-codegen-plugin-1.7.8.zipaxis2-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.jarorg.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+版本的JREJDK已完成);(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 pagesJava Servlets,Java ClassesXML文件、标签库、静态网页(html)以及其他资源组成一个web应用。war包中的文件按照一定的目录结构来组织,根目录下包含有htmljsp文件,另外还有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欢迎页面则配置成功,同时在tomcatwebapps文件夹下生成了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包,名称分别为comfunction,然后在function包上右键新建JieCheng类,在com包上右键新建MainInvoke类,编辑这两个java类的具体代码后编译运行,运行成功后会在对应目录下生成bin文件夹,其中有各个包文件夹,文件夹中有编译后的.class文件(MainInvoke.classJieCheng.class)。

JieCheng.java

package function;

public class JieCheng 
{
	public int jc(int n)//calculate factor of a integer
	{
		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)//sum of two integers
	{
		return a+b;
	}
	public String say(String s)//say hello
	{
		return s+",hello!";
	}
	public String connect(String s1,String s2)//connect two strings to be one string
	{
		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的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使用,也可利用插件集成到EclipseMavenNetbeansIDEA中使用。把一个或多个测试套件(TestSuite)组织成项目,每个测试套件包含一个或多个测试用例(TestCase),每个测试用例包含一个或多个测试步骤,包括发送请求接受响应分析结果改变测试执行流程等。具体的使用方法可参考 SoapUI帮助


        打开SoapUI软件后,点击File->New SOAP Project,在弹出的New SOAP Project窗口中输入Project NameMyServicewsdlTestProjectInitial WSDLhttp://localhost:8080/axis2/services/MyService?wsdl后点击OK


        进入工程后,可以看到有MyServiceSoap11BindingMyServiceSoap12Binding,这两个本质差不多,这里以第一个为例,点击进去发现有addconnectjcsay四个接口,分别点击每个接口下的Request1后,在右侧的窗口左侧的XML中相应位置输入对应的参数,然后点击三角形绿色执行按钮后,执行成功则会在右侧输出请求的结果,结果XML中包含正确的输出。



以上是关于Eclipse+Axis2发布WSDL类型的Web Service并用SoapUI测试调用(2021.11.15)的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse+Axis2发布WSDL类型的Web Service并用SoapUI测试调用(2021.11.15)

axis2的wsdl无法使用eclipse axis1插件来生成client--解决方法

Axis2 与旧 wsdl 文件/Web 服务的兼容性

axis2 wsdl生成java文件 参数类型与wsdl定义的不一样

Axis2 的 wsdl2java 在 RPC/Encoded 样式 Web 服务上失败

java如何通过eclipse安装axis2来调用webservice