webService工具类

张军 5474 0

所有工具类

项目中调用了别的系统的webservice接口,调用成功之后发现wsdlLocation的地址是写死的,不方便修改,所以需要实现地址,包括用户名密码的可配置。项目的框架是Spring,调用webservice使用的是CXF。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package zj.cxf.util;
 
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.log4j.Logger;
 
/**
 
 * webService工具类
 
 * @version 1.00 (2014.09.15)
 * @author SHNKCS 张军 {@link  <a target=_blank href="http://www.zhangjunbk.com">张军个人网站</a>&nbsp;&nbsp;&nbsp;&nbsp;<a target=_blank href="http://user.qzone.qq.com/360901061/">张军QQ空间</a>}
 
 */
public class CxfUtil implements Serializable {
    private static final long serialVersionUID = 1L;
    private static Map<String, Client> MAP_CLIENTS = Collections.synchronizedMap(new HashMap<String, Client>());
    private static DynamicClientFactory DYNAMIC_CLIENT_FACTORY = null;
    private static final Logger logger = Logger.getLogger(CxfUtil.class);
    static {
        initInvoke();
    }
 
    /**
     * 初使化调用
     */
    private static void initInvoke() {
        if (DYNAMIC_CLIENT_FACTORY == null) {
            // DYNAMIC_CLIENT_FACTORY = JaxWsDynamicClientFactory.newInstance();
            DYNAMIC_CLIENT_FACTORY = DynamicClientFactory.newInstance();
        }
    }
 
    /**
     * 创建webservice代理并且调用webservice
     
     * @param wsdlAddress
     *            调用webservice地址
     * @param method
     *            调用远程的方法名
     * @param params
     *            传递的参数
     * @return
     */
    public static Object[] invoke(String wsdlAddress, String method, Object[] params) throws Exception {
        Client client = (Client) MAP_CLIENTS.get(wsdlAddress);
        if (client == null) {
            client = DYNAMIC_CLIENT_FACTORY.createClient(wsdlAddress);
            // add 时间设置防止webservice在访问时候再次超时
            HTTPConduit conduit = (HTTPConduit) client.getConduit();
            HTTPClientPolicy policy = new HTTPClientPolicy();
            policy.setConnectionTimeout(1800000);
            policy.setReceiveTimeout(1800000);
            conduit.setClient(policy);
            MAP_CLIENTS.put(wsdlAddress, client);
        }
        Object[] results = client.invoke(method, params);
        return results;
    }
 
    /**
     
     * @param wsdlAddress
     *            配置文件路径
     * @param method
     * @param arg0
     * @return
     */
    public static String invoke(String wsdlAddress, String method, String params) throws Exception {
        Object[] results = invoke(wsdlAddress, method, new Object[] { params });
        if (results != null && results.length > 0 && results[0] != null) {
            return String.valueOf(results[0]);
        else {
            return null;
        }
 
    }
 
    /**
     * 创建客户端地址集合
     
     * @param wsdlAddressList
     * @return
     */
    public static boolean addClientMap(List<String> wsdlAddressList) throws Exception {
        logger.debug("创建WebService开始");
        for (String wsdlAddress : wsdlAddressList) {
            try {
                Client client = DYNAMIC_CLIENT_FACTORY.createClient(wsdlAddress);
                // 设置超时时间
                HTTPConduit conduit = (HTTPConduit) client.getConduit();
                HTTPClientPolicy policy = new HTTPClientPolicy();
                policy.setConnectionTimeout(1800000);
                policy.setReceiveTimeout(1800000);
                conduit.setClient(policy);
                MAP_CLIENTS.put(wsdlAddress, client);
                logger.debug(wsdlAddress + "创建成功");
            catch (Exception e) {
                logger.error(wsdlAddress + "创建失败:" + e.getMessage());
                e.printStackTrace();
            }
        }
        logger.debug("WebService创建成功MAP_CLIENTS集合:" + MAP_CLIENTS);
        return true;
    }
}



更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论