java 调用wsdl的webservice接口工具类通用处理

最早在调wsdl的webservice接口时都是直接生成客户端代码,然后直接调用,实际调用时挺简单,只是需要生成一堆与当前项目无关的代码。由于之前类似这种调用方式挺少,不常对接也就没有关注太多,后来在新项目的系统对接中,这种调用方式太多了,我也不可能每个都生成一堆客户端代码,若是生成了,最终生成的客户端代码要比项目代码还要多,所以后来考虑了工具类。
一、maven jar

org.apache.axis
axis
1.4


commons-discovery
commons-discovery
0.4


commons-logging
commons-logging




org.apache.axis
axis-jaxrpc
1.4


org.apache.axis
axis-saaj
1.4


wsdl4j
wsdl4j
1.6.2

二、工具类 /**
* webservice请求
* @param endpointwsdl地址
* @param namespace命名空间
* @param method调用方法
* @param resultType结果返回类型
* @param parameterInfo参数信息
* @param parameters请求参数
* @return
* @throws Exception
*/
public static Object doWebService (String endpoint, String namespace, String method, String resultType, List paramInfoList, Object[] parameters) throws Exception {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName(namespace, method));

if (paramInfoList != null && paramInfoList.size() > 0) {
for (int i = 0; i < paramInfoList.size(); i++) {
Map paramInfo = paramInfoList.get(i);
String paramName = paramInfo.getOrDefault("paramName", null);
String paramType = paramInfo.getOrDefault("paramType", null);

if (StringUtil.isNotBlank(paramName) && StringUtil.isNotBlank(paramType)) {
if (Objects.equals(paramType, "String")) {
call.addParameter(paramName, org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); //接口的参数
}
}
}
}

if (Objects.equals(resultType, "String")) {
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); //设置返回类型
}

Object result = call.invoke(parameters);

return result;
}
三、注意事项 【java 调用wsdl的webservice接口工具类通用处理】如上的工具类可以自行扩展。接口调用时可以根据wsdl地址生成客户端代码,然后找到其中对应的命名空间、调用方法、调用参数以及返回值。如果是返回的实体,则把生成的实体拷贝到自己目录下或者自己新建都可以。
请求参数是一个数组,务必要保证传入的参数数量以及类型正确。
参数信息是一个List套Map, Map就是具体每一个参数的信息,包括参数名称以及参数类型【String,int或者其他】。

    推荐阅读