最近在使用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消息!