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>
<!-- XML转JSON-->
<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()