zoukankan      html  css  js  c++  java
  • WebServiceUtil

    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;
    	}
    }
    
    
    
  • 相关阅读:
    android灭屏后调用binder通讯竟然影响了socket的POLL_OUT事件,怪事。
    B0宏
    从surfaceflinger历史变更谈截屏
    arm下dlsym返回的符号地址居然不是偶对齐的。
    SIGCHLD waitpid, 小心子进程结束事件被偷了
    root权限后,不要忘了还有selinux
    shell命令管道未读完阻塞了子进程,与等待其结束的父进程死"锁"。
    我对BP网络的简单的理解
    python 中的字符串格式化
    阿里云深度学习采坑记
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/10488352.html
Copyright © 2011-2022 走看看