package org.springblade.common.utils;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

import javax.xml.namespace.QName;

public class WebserviceUtil {

	/**
	 * 超时时间，单位：毫秒，默认为300000（5分钟）
	 */
	public static final long TIME_OUT = 300000;

	public static String commonInvokeQuality(String webServiceUrl, String targetNamespace, String methodName, String parameter) {
		// 默认返回值
		String returnVal = null;
		try {
			// 使用RPC方式调用WebService
			RPCServiceClient serviceClient = new RPCServiceClient();
			Options options = serviceClient.getOptions();
			// 指定调用WebService的URL
			EndpointReference targetEPR = new EndpointReference(webServiceUrl);
			options.setTo(targetEPR);
			options.setTimeOutInMilliSeconds(TIME_OUT);
			// 指定webservice方法的参数值
			Object[] opAddEntryArgs = new Object[]{parameter};
			// 指定webservice方法返回值的数据类型的Class对象
			Class<?>[] classes = new Class[]{String.class};
			// 指定要调用的webservice方法及WSDL文件的命名空间
			QName opAddEntry = new QName(targetNamespace, methodName);
			// 获得 调用webservice方法返回值
			Object returnObj = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0];
			if (returnObj != null) {
				returnVal = (String) returnObj;
			}
		} catch (AxisFault e) {
			e.printStackTrace();
		}
		return returnVal;
	}
}
