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<String,String> parmerMap){
		StringBuffer sb = new StringBuffer();
		sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:user=\"http://user.gxgd.com/UserCenter\">");
		sb.append("<soapenv:Header/>");
		sb.append("<soapenv:Body>");
		sb.append("<user:operReq>");
		sb.append("<operateType>SSO</operateType>");
		sb.append("<requestSysCode>21006</requestSysCode>");
		sb.append("<operRequestXML><![CDATA[<UAPRoot>");
		sb.append("<SessionHeader>");
		sb.append("<ServiceCode>UAP02001</ServiceCode>");
		sb.append("<Version>2014-05-23</Version>");
		sb.append("<ActionCode>0</ActionCode>");
		sb.append("<TransactionID>"+parmerMap.get("TransactionID")+"</TransactionID>");
		sb.append("<SrcSysID>"+parmerMap.get("SrcSysID")+"</SrcSysID>");
		sb.append("<DstSysID></DstSysID>");
		sb.append("<ReqTime></ReqTime>");
		sb.append("<Request>");
		sb.append("<ReqType></ReqType>");
		sb.append("<ReqCode></ReqCode>");
		sb.append("<ReqDesc></ReqDesc>");
		sb.append("</Request>");
		sb.append("</SessionHeader>");
		sb.append("<SessionBody>");
		sb.append("<AssertionQueryReq>");
		sb.append("<SSOTicket>"+parmerMap.get("SSOTicket")+"</SSOTicket>");
		sb.append("</AssertionQueryReq>");
		sb.append("</SessionBody>");
		sb.append("</UAPRoot>]]></operRequestXML>");
		sb.append("<digitalSign>"+parmerMap.get("digitalSign")+"</digitalSign>");//operRequestXML信息签名  "+parmerMap.get("digitalSign")+"
		sb.append("</user:operReq>");
		sb.append("</soapenv:Body>");
		sb.append("</soapenv:Envelope>");
		return sb.toString();
	}
	/**
	 * 第一次发送请求数据格式  模拟登陆
	 * @param parmMap
	 * @return
	 */
	public String buildRequestDatafirst(Map<String,String> parmMap){
		StringBuffer sb = new StringBuffer();
		sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:user=\"http://user.gxgd.com/UserCenter\">");
		sb.append("<soapenv:Header/>");
		sb.append("<soapenv:Body>");
		sb.append("<user:operReq>");
		sb.append("<operateType>SSO</operateType>");
		sb.append("<requestSysCode>"+parmMap.get("requestSysCode")+"</requestSysCode>");//21006
		sb.append("<operRequestXML><![CDATA[<UAPRoot>");
		sb.append("<SessionHeader>");
		sb.append("<ServiceCode>"+parmMap.get("ServiceCode")+"</ServiceCode>");//UAP02101
		sb.append("<Version>2014-05-23</Version>");
		sb.append("<ActionCode>0</ActionCode>");
		sb.append("<TransactionID>210012014052220140522538</TransactionID>");
		sb.append("<SrcSysID>"+parmMap.get("SrcSysID")+"</SrcSysID>");//21003
		sb.append("<DstSysID>"+parmMap.get("DstSysID")+"</DstSysID>");//21006
		sb.append("<ReqTime></ReqTime>");
		sb.append("<Request>");
		sb.append("<ReqType></ReqType>");
		sb.append("<ReqCode></ReqCode>");
		sb.append("<ReqDesc></ReqDesc>");
		sb.append("</Request>");
		sb.append("</SessionHeader>");
		sb.append("<SessionBody>");
		sb.append("<SSOReq>");
		sb.append("<SYSCODE_A>21003</SYSCODE_A>");
		sb.append("<SYSCODE_Z>21006</SYSCODE_Z>");
		sb.append("<SSO_URL>www.med.com/account</SSO_URL>");
		sb.append("<AuthInfo>");
		sb.append("<AccountID>"+parmMap.get("AccountID")+"</AccountID>");//18978907368
		sb.append("<PasswordType>"+parmMap.get("PasswordType")+"</PasswordType>");//20
		sb.append("<Password></Password>");
		sb.append("<CityCode></CityCode>");
		sb.append("</AuthInfo>");
		sb.append("</SSOReq>");
		sb.append("</SessionBody>");
		sb.append("</UAPRoot>]]></operRequestXML>");
		sb.append("<digitalSign>operRequestXML信息签名</digitalSign>");
		sb.append("</user:operReq>");
		sb.append("</soapenv:Body>");
		sb.append("</soapenv:Body>");
		return sb.toString();
	}
	
	
	/**
	 * 发送请求
	 * @param parmerMap 
	 * @param requestNum 请求次数 
	 * @return SOAP消息
	 * @throws Exception
	 */
	public String invoke(Map<String,String> 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<String, String> patameterMapfirst = new HashMap<String, String>();
		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<String,String> parMapSecced = new HashMap<String,String>();
		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消息!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值