博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebServiceUtil
阅读量:6747 次
发布时间:2019-06-25

本文共 4078 字,大约阅读时间需要 13 分钟。

import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.rmi.RemoteException;import javax.xml.rpc.ServiceException;import org.codehaus.xfire.client.Client;import org.codehaus.xfire.transport.http.CommonsHttpMessageSender; public class WebServiceUtil {     /**     * 静态调用Webservice方法     * @param method     * @param parms     * @return     * @throws ServiceException     * @throws RemoteException     * @throws Exception        public static String callService(ServiceMethod method, Object[] parms)            throws Exception {              // throws ServiceException, RemoteException, Exception {        String endPoint = StringUtils.removeEnd(                method.getMethodUrl(), "?wsdl");        String methodName = method.getMethodName();        String nameSpace = method.getNamespace();        String username = method.getUserName();        String password = method.getPassword();        String returnType = method.getReturnType();        Service service = new Service();        Call call = (Call)service.createCall();    //  Call call = new Call(endPoint);        // 设置远程webService 端点url        call.setTargetEndpointAddress(endPoint);        call.setTimeout(Integer.valueOf(120000));        // 是否有普通的用户身份认证        if (StringUtils.isNotEmpty(username)) {            call.setUsername(username);            call.setPassword(password);        }        // 是否设置命名空间(nameSpace)        if (StringUtils.isEmpty(nameSpace))            call.setOperationName(methodName);        else {            call.setOperationName(new QName(nameSpace, methodName));        }        // 设置方法需要的参数——参数名,类型,输入参数        int count = 0;        for (Object o : parms) {            call.addParameter("arg" + count++, Constants.XSD_STRING,                    ParameterMode.IN);        }        call.setReturnType(Constants.XSD_ANYSIMPLETYPE);        // 通过返回值类型判断WebService的调用方式        if (StringUtils.isNotEmpty(returnType)) {            Object returnXml = call.invoke(parms);            return (returnXml == null) ? null : returnXml.toString();        }        call.invokeOneWay(parms);         return null;    }  */        /***     *      *@Description:获取web服务调用客户端     *@Author:ouyangbiao     *@Date:2016-9-29     *@param callurl     *@return     *@throws Exception     *@Modfiy:     */    public static Client getWebServiceClient(String callurl) throws Exception {        URL url = new URL(callurl);        HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();        httpConnection.setReadTimeout(30000);// 设置http连接的读超时,单位是毫秒        httpConnection.setConnectTimeout(30000);        httpConnection.connect();        InputStream is = httpConnection.getInputStream();        Client client = new Client(is, null);        try {            client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, String.valueOf(30000));// 设置发送的超时限制,单位是毫秒;            // 解决Xfire/HttpMethod 造成Socket连接池满            // 解决使用netstat -ano命令,发现服务器上有大量的CLOSE_WAIT连接,导致之后的WebService服务访问经常失败            client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");            client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE,"true");            return client;        } catch (Exception e) {            e.printStackTrace();        } finally {            if(is != null) {                is.close();            }        }        return null;    }    /***     *      *@Description: 调用服务     *@Author:ouyangbiao     *@Date:2016-9-29     *@param in     *@param serviceCode     *@param prssurl     *@param opName     *@return     *@throws Exception     *@Modfiy:     */    public static String callService(String url, String opName,Object... params)            throws Exception {        String callurl =  url;        if(callurl.indexOf("?wsdl")<0){            callurl=callurl+"?wsdl";        }        Client client = getWebServiceClient(callurl);        Object[] result = client.invoke(opName, params);        String rtn = result[0] == null ? "" : result[0].toString();        return rtn;    }}

转载于:https://www.cnblogs.com/jakaBlog/p/10488352.html

你可能感兴趣的文章
安裝手冊写法
查看>>
web.xml详细配置讲解
查看>>
【转】20 个数据库设计最佳实践
查看>>
【转】Netty那点事(二)Netty中的buffer
查看>>
MySQL · 引擎特性 · InnoDB IO子系统
查看>>
Virtualenvwrapper安装【Windows7】
查看>>
ZMQ设置socket选项
查看>>
软件测试
查看>>
继承,多态
查看>>
深度理解《正则表达式》
查看>>
记录遇到过的插件、工具
查看>>
差分约束系统
查看>>
[Js]Ajax
查看>>
[Jquery]判断数据类型
查看>>
C#多态——抽象类、虚方法、接口
查看>>
【day25】类方法classmethod、静态方法staticmethod、普通方法
查看>>
七层网络模型
查看>>
MVC局部刷新
查看>>
对激活函数的理解
查看>>
mysql向表中某字段后追加一段字符串:
查看>>