Springboot 项目 调用webservice接口

前言

近期接到个需求,项目中需要集成零几年建设的OA系统。

OA系统使用的接口全部都是webservice接口,在此分享一下webservice接口调用过程中遇到的问题及调用方式。

焦头烂额

笔者也是第一次接触webservice接口,搜索了大量的资料,最后使用如下两种方式进行的交互。

调用方式:

笔者接触到的OA系统,接口参数没有统一
1、有的入参使用XML方式,有的入参是JSON字符串,
2、有的有命名空间,有的没有命名空间
3、有的返回了JSON字符串,有的返回了XML~
em....(@#%¥#@%#¥%),为了适配这个老东西,下面展出两种方式的调用代码,。

1.使用Hutool工具包调用:

   业务流程是web端调用我的HTTP接口,然后HTTP接口去调用OA的webservice接口拿数据。

   但是webservice接口返回的参数是XML形式的,所以需要使用工具转成JSON,返回给web浏览器。

   笔者使用的工具是hutool下的SoapClient工具包(Hutool还是挺强大)调用webservice接口,jdom、fastjson做XML转换JSON。

POM如下

   		<!-- 如下依赖看自己的需求取-->
   		
   		<!-- fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            //版本自己找哈~
        </dependency>
        <!-- hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.20</version>
        </dependency>
        
        <!-- XMLJSON-->
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom</artifactId>
            <version>2.0.2</version>
        </dependency>
        
    

Controller忽略不展示了
Service 实现 如下:

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import cn.hutool.http.webservice.SoapClient;
import javax.xml.namespace.QName;
import java.util.*;
@Service
@Slf4j
public class OAServiceImpl implements OAService {
   
   
 //@Override
 public JSONObject getGWList(OAReqVO reqVO) {
   
   
        Map<String, Object> map = new HashMap<>();
        //笔者系统中的业务参数,对方需要用到的json参数
        map.put("参数3-1","1");
        map.put("参数3-2","2");
        map.put("参数3-3","3");
        Map<String, Object> mapReq = new HashMap<>();
        mapReq.put("content",map);
        JSONObject writeContent = new JSONObject(mapReq);
        log.info("接口入参:"+writeContent);
        String result = null;
        try {
   
   
        	//对方接口地址
            SoapClient soapClient = SoapClient.create("http://xxx.xxx.xxx/xxxController/init.done")
                    // 对端 提供的方法名,命名空间(如果有命名空间记得找他们要)
                    .setMethod("方法名", "http://xxx.xxx.com.cn")
                    // 设置参数名称及参数值
                    .setParam("token", "token-123123123")
                    .setParam("systemId","系统标识")
                    //上面中的writeContent,对端业务系统使用
                    .setParam("content",writeContent.toString()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值