webService作为SOA(Service-Oriented Architecture)服务架构,在工作中,我们可能经常会用到。那到底什么是WebService,以及基于什么样的实现。在这一篇我会简单描述,并结合在工作中使用SoapUI-5.2.0开发的一些见解与大家分享。
一、Webservice原理和基础。
什么是Webservice?WebService的全称是XML Webservice。Webservice是一种可以接收从internet和interanet接收过来的请求,轻量级的通信技术。
为什么我们需要WebService? 企业或政府,会开发一些列的软件为民众或相关合作单位服务。这里有两个概念,一是发布服务的是服务端,二是接收服务的是客户端。当服务端发布服务时,客户端可能是在不同平台接收服务的。WebService的是跨平台的,其本身是基于soap(simple object access protocol)简单对象传输协议,Service-Oriented Architecture。
而SOAP采用了已经广泛使用的两个协议:HTTP 和XML(标准通用标记语言下的一个子集),HTTP协议是基于TCP协议的应用层协议。简而言值,SOAP是基于HTTP协议进行XML的传输。这里做一个拓展,HTTP协议和RPC协议一致,简单且应用广泛,而且对防火墙比其它协议更容易发挥作用。
二、实现一个简单的WebService服务端发布和客户端接收。
2.1引入Jar包
在运用WebService时,我们首先新建一个工程,并引入一些Jar包。
2.2 定义服务端
WebService是由接口和类组成的。
首先我们定义一个接口来发布我们的服务。
/**
* 定义一个发布天气的服务
* @author ziqiang
*
*/
@WebService
public interface IweatherService {
/**
* 返回天气
* @param cityCode
* @param date
* @return
*/
List<Map<String, Object>> getweatherByCity(String cityCode);
}
然后定义一个实现类实现我们需要发布的服务
package com.webservice.service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
import net.sf.json.JSONArray;
@WebService(endpointInterface="com.webservice.service.IweatherService",serviceName="WeatherService")//指定webservice所实现的接口以及服务名称
public class WeatherService implements IweatherService {
@Override
public String getweatherByCity(String cityCode) {
List<Map<String, Object>> weatherList=new ArrayList<>();
if (cityCode.equals("110000")) {//北京
Map<String, Object> tempMap=new HashMap<String, Object>();
tempMap.put("温度", "20~30华氏摄氏度");
Map<String, Object> cloudMap=new HashMap<String,Object>();
cloudMap.put("天气", "多云转晴");
weatherList.add(tempMap);
weatherList.add(cloudMap);
}
String result=JSONArray.fromObject(weatherList).toString();
return result;
}
}
服务端进行服务的发布
package com.webservice.test;
import javax.xml.ws.Endpoint;
import com.webservice.service.IweatherService;
import com.webservice.service.WeatherService;
/**
* @author ziqiang
*
*/
public class Publisher {
public static void main(String[] args) {
//定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
//String address = "http://192.168.1.100:8989/";这个WebService发布地址的写法是合法的
//String address = "http://192.168.1.100:8989/Webservice";这个WebService发布地址的是合法的
IweatherService weatherService=new WeatherService();
String address = "http://127.0.0.1:9090/Webservice";
//使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
Endpoint.publish(address , weatherService);
System.out.println("发布webservice成功!");
}
}
点击运行之后,我们就能发现服务发布了。
三、用SoapUI进行测试
下载soapUI
然后添加项目add wsdl输入我们上面发布的地址
<SOAP-ENV:Envelope
各种属性>
<SOAP:HEADER>
</SOAP:HEADER>
<SOAP:Body>
</SOAP:Body>
</SOAP-ENV:Envelope>
在Body下面有传参,我们可以输入参数,然后就可以看到返回给我们的参数了。
四、其他方式进行测试
除了SOAP我们可以进行webService的测试外,我们还可以通过新建一个webservice-client来进行测试。