java调用webservice接口

import java.net.URL;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import javax.xml.namespace.QName;
import org.apache.axis.AxisEngine;
import org.apache.axis.Constants;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.description.OperationDesc;
import org.apache.axis.description.ParameterDesc;
import org.apache.axis.soap.SOAPConstants;

public class TestWS {
	
	static OperationDesc [] _operations = new OperationDesc[9];
	
	public static void _initParam(String method,Map<String, String> params){
		OperationDesc oper = new OperationDesc();
		ParameterDesc param;
		oper.setName(method);
		Set<String> set = params.keySet();
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()){
			String key = iter.next();
			param = new ParameterDesc(new QName("", key),ParameterDesc.IN,new QName("http://www.w3.org/2001/XMLSchema", "string"),java.lang.String.class, false, false);
			param.setOmittable(true);
			oper.addParameter(param);
		}
        oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
        oper.setReturnClass(java.lang.String.class);
        oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
        oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
        oper.setUse(org.apache.axis.constants.Use.LITERAL);
        _operations[0] = oper;    
	}
	
	public static void initService(String ws_url,Map<String, String> params,String method){
		_initParam(method,params);
		int size = params.size();
		int i = 0;
		Object param[] = new Object[size];
		Set<String> set = params.keySet();
		Iterator<String> iter = set.iterator();
		while (iter.hasNext()){
			String key = iter.next();
			param[i] = params.get(key);
			i ++;
		}
		try {
			Service service = new Service();
			Call call = (Call) service.createCall();
			call.setOperation(_operations[0]);
			call.setUseSOAPAction(true);
			call.setSOAPActionURI("");
			call.setEncodingStyle(Constants.NS_PREFIX_SCHEMA_XSD);
			call.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
			call.setProperty(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
			call.setSOAPVersion(SOAPConstants.SOAP11_CONSTANTS);
			call.setTargetEndpointAddress(new URL(ws_url));
			call.setOperationName(new QName(ws_url,method));
			String ret = (String) call.invoke(param);
			System.out.println(ret);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 	
	public static void main(String[] args) {
		String method = "method";//接口方法
		String xml = "xml";//接口参数
		String ws_url = "ws_url";//接口地址
		Map<String, String> params = new LinkedHashMap<String, String>();//使用linkedhashmap保持参数put的先后顺序与接口方法参数顺序一致
		params.put("xml", xml);//此处需要注意key值需要与接口方法的参数名字一致
		params.put("xml1", xml);//
		params.put("xml2", xml);//多个参数需要put多次,put的参数个数需要与接口参数个数一致
		initService(ws_url, params, method);
	}
}

 使用到一下jar,axis.jar、axis-ant.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、jaxrpc.jar、mail-1.4.jar、wsdl4j-1.5.1.jar

猜你喜欢

转载自heng-wang201602190716.iteye.com/blog/2309626