Webservice如何通过代码单元测试

前面我在下面这篇文章说过如何使用WebService:
SpringBoot整合Apache-CXF实践

在这篇文章中我列举过通过SOAP UI测试webservice接口。

但实际中涉及服务调用的情况,需要类似单元测试的东西。

一、基于代理类工厂

核心代码很简单,如下所示(这个比较普遍常用):

复制代码
try {
           // 接口地址(写webservice的地址)
           String address = "http://127.0.0.1:9090/cxf/user?wsdl";
           // 代理工厂
           JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
           // 设置代理地址
           jaxWsProxyFactoryBean.setAddress(address);
           // 设置接口类型
           jaxWsProxyFactoryBean.setServiceClass(UserService.class);
           // 创建一个代理接口实现
           UserService userService = (UserService) jaxWsProxyFactoryBean.create();

           return userService.addUser(email, username, password);
       } catch (Exception e) {
           e.printStackTrace();
           return -1;
       }
复制代码

二、动态调用

复制代码
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
//接口地址
Client client = dcf.createClient("http://127.0.0.1/cxf/user?wsdl");
// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
Object[] objects = new Object[0];
try {
    // invoke("方法名",参数1,参数2,参数3....);
    objects = client.invoke("getUserName", "maple");
    System.out.println("返回数据:" + objects[0]);
} catch (java.lang.Exception e) {
    e.printStackTrace();
}
复制代码

三、通过Controller调用

我在SpringBoot整合Apache-CXF实践
这篇文章里就写到过。

具体的代码例子如下:

复制代码
ackage com.blog.cxf.client.controller;

import com.blog.cxf.server.dto.UserReqDto;
import com.blog.cxf.server.service.UserService;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.web.bind.annotation.*;

/**
 * @description:
 * @author: youcong
 * @time: 2020/10/24 23:37
 */
@RestController
@RequestMapping("/user")
public class UserApiController {


    @PostMapping("/add")
    public int add(@RequestParam String email, @RequestParam String username, @RequestParam String password) {

        try {
            // 接口地址
            String address = "http://127.0.0.1:9090/cxf/user?wsdl";
            // 代理工厂
            JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
            // 设置代理地址
            jaxWsProxyFactoryBean.setAddress(address);
            // 设置接口类型
            jaxWsProxyFactoryBean.setServiceClass(UserService.class);
            // 创建一个代理接口实现
            UserService userService = (UserService) jaxWsProxyFactoryBean.create();

            return userService.addUser(email, username, password);
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }
}
复制代码

至于其它服务调用,可以通过Feign,也可以基于HtppClient。

至于上面三种哪种更好,具体看实际业务场景而定。可以根据自己的需求来选择。

最后向大家推荐一下,近来所写关于WebService安全机制的思考和实践一文:
WebService安全机制的思考与实践

posted @   挑战者V  阅读(456)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2017-11-21 Linux系统学习之软件安装
点击右上角即可分享
微信分享提示