一、创建webService服务。
采用appache提供的cxf开发webService服务,需要引入如下几个包
1、创建工程test
创建实体类
package hu.liu;
import lombok.Getter;
import lombok.Setter;
/**
* @author 作者:David
* @version 创建时间:2018年3月5日 下午3:09:46
* 类说明 Info.java
*/
@Getter
@Setter
public class Info
{
private Integer id;
private String key;
private String result;
}
创建接口:
package hu.liu;
import java.util.Map;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
* @author 作者:David
* @version 创建时间:2018年3月5日 下午2:23:36
* 类说明 IWebService.java
*/
@WebService
public interface IWebService
{
@WebMethod
public String excute(@WebParam(name="param") String s);
@WebMethod
public String testString(Info param);
}
实现IWebService接口:
package hu.liu;
import java.util.Map;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/**
* @author 作者:David
* @version 创建时间:2018年3月5日 下午2:25:14
* 类说明 WebServiceImp.java
*/
@WebService
public class WebServiceImp implements IWebService
{
@WebMethod
@Override
public String excute(@WebParam(name="param") String param)
{
System.out.println(param);
Gson json = new Gson();//需要引入Gson包
Info info = json.fromJson(param, new TypeToken<Info>(){}.getType());
Integer id = info.getId();
System.out.println(id);
return "hello world!";
}
@WebMethod
@Override
public String testString(Info param)
{
return "dddd";
}
}
创建webService发布启动类:
package hu.liu;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
/**
* @author 作者:David
* @version 创建时间:2018年3月5日 下午2:25:48
* 类说明 Launcher.java
*/
public class Launcher
{
public static void main(String[] args)
{
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(IWebService.class);
// 发布接口
factory.setAddress("http://localhost:9000/ws/" + IWebService.class.getSimpleName());
factory.setServiceBean(new WebServiceImp());
factory.create();
}
}
至此一个简单的webService服务就已经发布成功了。
通过浏览器访问http://localhost:9000/ws/IWebService?wsdl 可以看到如下信息:
以上标注红色的是方法名及对应的参数。
二、创建客户端访问webService。
创建客户端工程,并引入与服务相同的包,且创建IWebService接口,接口的目录和服务端的一样,且方法一样。可以将服务端的接口打成jar包提供给客户端。
客户端调用代码如下:
package hu.liu;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.google.gson.Gson;
/**
* @author 作者:David
* @version 创建时间:2018年1月5日 下午3:59:37
* 类说明 TestImp1.java
*/
public class TestImp1
{
public static void main(String[] args) throws NoSuchAlgorithmException
{
JaxWsProxyFactoryBean factoryBean=new JaxWsProxyFactoryBean();
/*factoryBean.getInInterceptors().add(new LoggingInInterceptor());
factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); */
factoryBean.setServiceClass(IWebService.class);
factoryBean.setAddress("http://localhost:9000/ws/IWebService?wsdl");
IWebService webService=(IWebService) factoryBean.create();
Gson gson = new Gson();
Info info = new Info();
info.setId(123);
info.setResult("中国");
/*sb.append("id=").append(info.getId());
sb.append("&result=").append(info.getResult());
info.setKey(new MD5Util().hashCode(sb.toString()));*/
String s = gson.toJson(info);
System.out.println(webService.excute(s));
}
}
执行后如果没有意外应该有如下信息
客户端打印信息:4444444444444
服务端打印信息:123
至此整个webService从服务发布到客户端调用整个过程梳理完毕。
当然了,很多人在开发的时候只是负责开发服务端,不关心客户端的情况,这种时候如何通过webService测试软件进行接口测试呢。目前我使用的是Postman,谷歌提供的一个接口测试插件。
现在通过Postman测试以上发布的接口excute接口如下:
1、打开Postman界面如下:
设置Content-Type=text/xml
设置body请求调用的方法excute及对应的参数param
请求结果如下:
至此通过Postman进行webService接口测试测试完毕!