webserivce client 、httpClient 客户端调用


最近在使用webserivce访问其他项目的接口,个人总结了两种方法!

方法一:

public static String invokeObject(String url,String operationName,Object []parm){
		String retString="";
		try 
		{
			System.out.println("---------开始连接----------");
			System.out.println("url:"+url);
			System.out.println("operationName:"+operationName);
			System.out.println("parm:"+parm);
			Client client = new Client(new URL(url));
			Object[] results = client.invoke(operationName, parm);
			retString = results[0].toString();
			System.out.println("result:"+retString);
		}
		catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return retString;
	}

这里需要传递URL、方法名、参数


方法二:

package com.common;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;

public class HttpClientUnit {
	//private String operationName;  //方法名
	private String url;				//访问路径	
	private String soapResponseData;//请求返回的数据
	/**
	 * 动态构造调用
	 * @param operationName 方法名
	 * @param url 访问路径
	 * @author weiyf
	 */
	public HttpClientUnit(String url){
		//this.operationName = operationName;
		this.url = url;
	}
	/**
	 * 第二次发送请求数据格式  
	 * @param parmerMap 
	 * 	接口请求样例:
		
	 * @return
	 * @author weiyf
	 */
	public String buildRequestData(Map parmerMap){
		StringBuffer sb = new StringBuffer();
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("SSO");
		sb.append("21006");
		sb.append("");
		sb.append("");
		sb.append("UAP02001");
		sb.append("2014-05-23");
		sb.append("0");
		sb.append(""+parmerMap.get("TransactionID")+"");
		sb.append(""+parmerMap.get("SrcSysID")+"");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append(""+parmerMap.get("SSOTicket")+"");
		sb.append("");
		sb.append("");
		sb.append("]]>");
		sb.append(""+parmerMap.get("digitalSign")+"");//operRequestXML信息签名  "+parmerMap.get("digitalSign")+"
		sb.append("");
		sb.append("");
		sb.append("");
		return sb.toString();
	}
	/**
	 * 第一次发送请求数据格式  模拟登陆
	 * @param parmMap
	 * @return
	 */
	public String buildRequestDatafirst(Map parmMap){
		StringBuffer sb = new StringBuffer();
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("SSO");
		sb.append(""+parmMap.get("requestSysCode")+"");//21006
		sb.append("");
		sb.append("");
		sb.append(""+parmMap.get("ServiceCode")+"");//UAP02101
		sb.append("2014-05-23");
		sb.append("0");
		sb.append("210012014052220140522538");
		sb.append(""+parmMap.get("SrcSysID")+"");//21003
		sb.append(""+parmMap.get("DstSysID")+"");//21006
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("21003");
		sb.append("21006");
		sb.append("www.med.com/account");
		sb.append("");
		sb.append(""+parmMap.get("AccountID")+"");//18978907368
		sb.append(""+parmMap.get("PasswordType")+"");//20
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("]]>");
		sb.append("operRequestXML信息签名");
		sb.append("");
		sb.append("");
		sb.append("");
		return sb.toString();
	}
	
	
	/**
	 * 发送请求
	 * @param parmerMap 
	 * @param requestNum 请求次数 
	 * @return SOAP消息
	 * @throws Exception
	 */
	public String invoke(Map parmerMap,int requestNum){
		PostMethod postMethod = new PostMethod(url);
		
		String soapRequestData="";
		if(requestNum==1){//第一次发送请求(模拟登录)
			soapRequestData = buildRequestDatafirst(parmerMap);
		}else if(requestNum==2){//第二次发送请求
			soapRequestData = buildRequestData(parmerMap);
		}
		System.out.println("invoke  soapRequestData:"+soapRequestData);
		byte[] bytes;
		try {
			bytes = soapRequestData.getBytes("utf-8");
			InputStream inputStream = new ByteArrayInputStream(bytes, 0,
		               bytes.length);
			RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,
			bytes.length, "application/soap+xml; charset=utf-8");
			postMethod.setRequestEntity(requestEntity);

			HttpClient httpClient = new HttpClient();
			int statusCode = httpClient.executeMethod(postMethod);
			//System.out.println("statusCode:"+statusCode);
			if(statusCode==200){
				System.out.println("调用成功!");	
				//取得回返的消息
				soapResponseData = postMethod.getResponseBodyAsString();
				System.out.println("返回的数据-----"+soapResponseData);
			}else{
				System.out.println("调用失败!"+statusCode);
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return soapResponseData;
	}
	
	public static void main(String[] args) throws HttpException, IOException{
		// TODO Auto-generated method stub
		
		String url="http://219.232.84.66:8080/UCenterWeb/services/userOperService?wsdl";
		HttpClientUnit httpClient = new HttpClientUnit(url);
		//第一次发送请求,获取SSOticket
		Map patameterMapfirst = new HashMap();
		patameterMapfirst.put("requestSysCode", "21006");
		patameterMapfirst.put("ServiceCode", "UAP02101");
		patameterMapfirst.put("SrcSysID", "21003");
		patameterMapfirst.put("DstSysID", "21006");
		patameterMapfirst.put("AccountID", "18777142423");
		patameterMapfirst.put("PasswordType", "20");
		String soapRequestData = httpClient.buildRequestDatafirst(patameterMapfirst);
		System.out.println("第一次发送的数据-----"+soapRequestData);
		String  soapResponseData = httpClient.invoke(patameterMapfirst,1);
		//第二次发送请求,获取用户数据
		Map parMapSecced = new HashMap();
		parMapSecced.put("SrcSysID", "21006");
		parMapSecced.put("SSOTicket", "0AB8DFBA1D0BD4B6C5B513E9AEDC5926");
		//String soapRequestData2 = httpClient.buildRequestData(parMapSecced);
		//System.out.println("第二次发送的数据-----"+soapRequestData2);
		//String  soapResponseData2 = httpClient.invoke(parMapSecced,2);
		
	}
}
有点懒啦,没做处理,直接把我写的全部贴出来,当然这里有参考网上的资料!这里主要是SOAP消息的请求,将消息提交,访问成功后,返回SOAP消息!

你可能感兴趣的:(webserivce)