SOAP WebService 短信接口对接

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.message.SOAPHeaderElement;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * SMS API
 */
@Controller
public class Sms {

    /** 
     * 短信发送接口对接
     * @param phone
     * @param message
     */
    @RequestMapping(value = "sendSms")
    public String sendSms(String phone, String message) {
        String nameSpace = "http://tempuri.org/";
        String sendMessage = "SendMessage";
        String url = "http://192.168.1.25:9090/WebService.asmx?wsdl";
        String localPart = "soapHeader";

        List<Object> list = new ArrayList<Object>();
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("phone", phone);
        map.put("message", message);
        map.put("taskname", "任务名称");
        map.put("bankMessagid", "[建设银行]");
        try {
        	//创建服务
	        Service serv = new Service();
	        SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(nameSpace, localPart);
	        Call call = (Call) serv.createCall();
	        Map<String, String> roleMap = new HashMap<String, String>();
	        roleMap.put("password", "123456");
	        for (Map.Entry<String, String> entry : roleMap.entrySet()){
	            soapHeaderElement.addChildElement(entry.getKey()).setValue(entry.getValue());
	            soapHeaderElement.addChildElement(entry.getKey()).setValue(entry.getValue());
	        }
	        soapHeaderElement.setNamespaceURI(nameSpace);
	        call.addHeader(soapHeaderElement);
	        //设置要调用的接口地址
	        call.setTargetEndpointAddress(url);
	        //设置要调用的接口方法
	        call.setOperationName(new QName(nameSpace,sendMessage));
	        call.setSOAPActionURI(nameSpace+sendMessage);
	        //设置参数名  第二个参数表示入参类型,第三个参数表示入参
	        for (Map.Entry<String, Object> entry : map.entrySet()) {
	            if (entry.getValue() instanceof String) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_STRING, ParameterMode.IN);
	            } else if (entry.getValue() instanceof Long) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_LONG, ParameterMode.IN);
	            } else if (entry.getValue() instanceof Double) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_DOUBLE, ParameterMode.IN);
	            } else if (entry.getValue() instanceof Float) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_FLOAT, ParameterMode.IN);
	            } else if (entry.getValue() instanceof Integer) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_INTEGER, ParameterMode.IN);
	            } else if (entry.getValue() instanceof Date) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_DATETIME, ParameterMode.IN);
	            } else if (entry.getValue() instanceof Boolean) {
	                call.addParameter(new QName(nameSpace, entry.getKey()),
	                        XMLType.XSD_BOOLEAN, ParameterMode.IN);
	            }
	            list.add(entry.getValue());
	        }
	        //返回参数类型
	        call.setReturnType(XMLType.XSD_STRING);
	        call.setEncodingStyle("UTF-8");
	        //开始调用
	        String result = (String) call.invoke(list.toArray());
	        //dom4j
	        Document doc = DocumentHelper.parseText("<root>"+ result + "</root>");
	        Element root = doc.getRootElement();//根
	        //获取接口返回的节点内容 
	        System.out.println("rtMessage1==="+root.element("rtMessage1").getText());
	        System.out.println("rtMessage2==="+root.element("rtMessage2").getText());
	        System.out.println("rtMessage3==="+root.element("rtMessage3").getText());
	        
	        return "";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

}

猜你喜欢

转载自blog.csdn.net/u014596302/article/details/76687475