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 endpoint            wsdl地址    
     * @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;
    }

三、注意事项

如上的工具类可以自行扩展。接口调用时可以根据wsdl地址生成客户端代码,然后找到其中对应的命名空间、调用方法、调用参数以及返回值。如果是返回的实体,则把生成的实体拷贝到自己目录下或者自己新建都可以。

请求参数是一个数组,务必要保证传入的参数数量以及类型正确。

参数信息是一个List套Map, Map就是具体每一个参数的信息,包括参数名称以及参数类型【String,int或者其他】。

你可能感兴趣的:(java)