博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpClient调用wsdl协议
阅读量:7172 次
发布时间:2019-06-29

本文共 7717 字,大约阅读时间需要 25 分钟。

hot3.png

package www.codepeople.cn.test.utils;import java.io.ByteArrayInputStream;import java.io.InputStream;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.methods.InputStreamRequestEntity;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.RequestEntity;/** * @ClassName: DynamicHttpclientCall  * @Description: 静态调用wsdl * @author 刘仁 * @date 2017年6月15日 下午6:44:35 */// 动态构造调用串,灵活性更大public class DynamicHttpclientCall {	private String namespace;	private String methodName;	private String wsdlLocation;	private String soapResponseData;	public DynamicHttpclientCall(String namespace, String methodName, String wsdlLocation) {		this.namespace = namespace;		this.methodName = methodName;		this.wsdlLocation = wsdlLocation;	}	private int invoke() throws Exception {		PostMethod postMethod = new PostMethod(wsdlLocation);		String soapRequestData = buildRequestData();		byte[] bytes = soapRequestData.getBytes("UTF-8");		InputStream inputStream = new ByteArrayInputStream(bytes, 0, bytes.length);		RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, bytes.length,				"text/xml; charset=UTF-8");		postMethod.setRequestEntity(requestEntity);		HttpClient httpClient = new HttpClient();		int statusCode = httpClient.executeMethod(postMethod);		soapResponseData = postMethod.getResponseBodyAsString();		return statusCode;	}	private String buildRequestData() {		StringBuffer soapRequestData = new StringBuffer();		soapRequestData				.append("
" + "
" + "<?xml version="1.0" encoding="UTF-8"?>" + "<SMSReq>" + "<SMS_ID>123456</SMS_ID>" + "<MDN>18689653751</MDN>" + "<ASSIGN_TIME>20170615175307</ASSIGN_TIME>" + "<WORKSHEET_PERSON>张三</WORKSHEET_PERSON>" + "<SMS_INFO>欠费了</SMS_INFO>" + "</SMSReq>" + "
"); return soapRequestData.toString(); } /** * @Title: main * @Description: http调用wsdl协议 * @param @param args * @param @throws Exception 设定文件 * @return void 返回类型 * @throws */ public static void main(String[] args) throws Exception { DynamicHttpclientCall dynamicHttpclientCall = new DynamicHttpclientCall("http://service.hoo.com/", "SMSTest", "http://127.0.0.1:8080/STEInterface/STEservice?wsdl"); String soapRequestData = dynamicHttpclientCall.buildRequestData(); System.out.println(soapRequestData); int statusCode = dynamicHttpclientCall.invoke(); if (statusCode == 200) { System.out.println("调用成功!"); System.out.println(dynamicHttpclientCall.soapResponseData); } else { System.out.println("调用失败!错误码:" + statusCode); } }}

需要用到的架包

184718_2Jkk_1399599.png

commons-codec-1.4.jar

commons-httpclient-3.0.1.jar
commons-logging-1.1.1.jar

使用Axis1调用wsdl协议

 

package com.tydic.web.cust.common;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties;import javax.xml.namespace.QName;import javax.xml.rpc.ParameterMode;import javax.xml.rpc.encoding.XMLType;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.log4j.Logger;import com.tydic.base.util.IMapEntry;import com.tydic.base.util.Maps;/** * 短信发送接口 * @author liure * */public class SMSSendUtil {	 private static final Logger LOGGER = Logger.getLogger(MsgSendUtil.class);	 private static Properties properties = new Properties();     private static String propertyName = "mail_msg.properties";	 public final static String FILE_SEP = System.getProperty("file.separator");//文件分隔符(在 UNIX 系统中是“/”)	 private static String wsdlUrl;	 private static String wsdlQName;	 private static String wsdlMethod;	 	 static {	        loadConfigProperties();	    }	 /**	  * @Title: getPropertyPath  	  * @Description: 获取配置文件	  * @param @return    设定文件  	  * @return String    返回类型  	  * @throws	  */	 public static String getPropertyPath(){			String path = System.getProperty("user.dir")+FILE_SEP+"config"+FILE_SEP+propertyName;			LOGGER.info(path);			return propertyName;		}	 /**	     * Load configuration properties to initialize attributes.	     * @throws Exception 	     */	    private static void loadConfigProperties() {	    		    				try {				Properties prop = new Properties();    				InputStream inStream =  MsgSendUtil.class.getClassLoader().getResourceAsStream(getPropertyPath());//包内配置文件				prop.load(inStream);  				wsdlUrl = prop.getProperty("WSDLURL");				wsdlQName = prop.getProperty("QNAME");				wsdlMethod = prop.getProperty("METHOD");			} catch (Exception e) {				e.printStackTrace();			}	    		    }	public static void main(String[] args) {		String format_time = getTime();		System.out.println(format_time);		String SMS_ID = "123456";		String worksheet_person = "张三"; // 短信发送方信息		String sms_info = "欠费了";//短信内容		List
phoneNumList = new ArrayList
(); phoneNumList.add("18789xxxxx"); phoneNumList.add("186896xxxx"); for (String mdn : phoneNumList) { String xmlString = NamespaceURI_R(SMS_ID, mdn, format_time, worksheet_person, sms_info); sendSMS(xmlString); } } /** * 发送短信的wsdl接口 * * @param xmlString */ public static void sendSMS(String xmlString) { IMapEntry
resultMap = Maps.newMapEntry(); try { String msg = ""; Map
map_read = new HashMap
(); Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(wsdlUrl); // WSDL里面描述的接口名称(要调用的方法) call.setOperationName(new QName(wsdlQName, wsdlMethod)); call.addParameter("xml", XMLType.XSD_STRING, ParameterMode.IN); // 封装参数 // 设置被调用方法的返回值类型 call.setReturnType(XMLType.XSD_STRING); // 设置方法中参数的值 Object[] paramValues = new Object[] { xmlString }; LOGGER.info("短信接口传入报文:"); LOGGER.info(xmlString); // 给方法传递参数,并且调用方法 String result = (String) call.invoke(paramValues); LOGGER.info("短信接口返回报文:"); LOGGER.info(result); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 初始化时间格式 * * @return */ private static String getTime() { Date date = new Date(); SimpleDateFormat sft = new SimpleDateFormat("yyyyMMddHHmmss"); String time = sft.format(date); return time; } /** * 封装短信发送的xml报文 * * @param SMS_ID * 发送短信的ID;数据类型:String;长度:100 * @param MDN * 接收短信的手机号码;数据类型:String;长度:11 * @param time * 短信派发时间,格式为:yyyyMMddHHmmss;数据类型:String;长度:14 * @param phoneNum * @param msg * @return */ public static String NamespaceURI_R(String SMS_ID, String mdn, String time, String WORKSHEET_PERSON, String SMS_INFO) { StringBuffer buffer = new StringBuffer(); buffer.append("
"); buffer.append("
"); buffer.append("
"); buffer.append(SMS_ID); buffer.append("
"); buffer.append("
"); buffer.append(mdn); buffer.append("
"); buffer.append("
"); buffer.append(time); buffer.append("
"); buffer.append("
"); buffer.append(WORKSHEET_PERSON); buffer.append("
"); buffer.append("
"); buffer.append(SMS_INFO); buffer.append("
"); buffer.append("
"); return buffer.toString(); }}

 

需要的架包:

org.apache.axis
axis
1.4
axis
axis-jaxrpc
1.3
commons-discovery
commons-discovery
0.2
wsdl4j
wsdl4j
1.6.2
dom4j
dom4j
1.6.1

 

转载于:https://my.oschina.net/u/1399599/blog/967849

你可能感兴趣的文章
网站制作中建议你必须特别注意的问题
查看>>
ASP.NET中TextBox控件设置ReadOnly="true"后台取不到值
查看>>
找出Java进程ID pid的N种方法
查看>>
SSH和SFTP简介
查看>>
借助JRebel使Tomcat支持热部署
查看>>
Android Studio导入第三方类库的方法
查看>>
基于Mozilla Thunderbird的扩展开发(八)---进程间通信之Socket篇(续)
查看>>
AliSQL编译安装
查看>>
再谈java枚举 ENUM
查看>>
如何在应用系统中实现数据权限的控制功能(2)
查看>>
COM组件开发实践(二)
查看>>
1.5. Nginx module
查看>>
【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析...
查看>>
EMF介绍系列(八、模型的验证)
查看>>
listener.ora
查看>>
Execl to HTML
查看>>
Android udev /dev 设备节点权限
查看>>
PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
查看>>
[LeetCode] Spiral Matrix
查看>>
剑桥大学在文明5游戏中设定AI毁灭世界,AI突破即时策略游戏防线?
查看>>