接口定义:
public interface SendSMSHandler {
public void handleMessage(String text);
}
实现类:
package com.jjh.core.msg.sms.impl;
import java.io.IOException;
import java.rmi.RemoteException;
import java.util.HashMap;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import com.jjh.security.CommonEncrypt;
import com.jjh.core.msg.sms.SendSMSHandler;
import com.jjh.util.Constrants;
@org.springframework.stereotype.Service
public class SendSMSHandlerImpl implements SendSMSHandler {
private static String smsURL = "http://sms.xxx.com/SMSService.asmx";
private static String soapAction = "http://www.xxx.com/";
private static ObjectMapper mapper = new ObjectMapper();
@SuppressWarnings("unchecked")
public void handleMessage(String text) {
org.apache.axis.client.Service service = new Service();
try {
HashMap<String, Object> messagecontent=(HashMap<String, Object>)mapper.readValue(text, HashMap.class);
String msgcontent=(String)messagecontent.get(Constrants.MSGCONT);
HashMap<String, Object> map=(HashMap<String, Object>)CommonEncrypt.decryptSerializeObject(msgcontent);
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(smsURL);
call.setOperationName(new QName(soapAction, "SendSms"));
call.addParameter(new QName(soapAction, "mobile"), XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName(soapAction, "text"), XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName(soapAction, "username"), XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter(new QName(soapAction, "password"), XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(new QName(soapAction, "SendSmsResponse"), Integer.class);
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapAction + "SendSms");
Integer v = (Integer)call.invoke(new Object[]{map.get("mobile"), map.get("text"), map.get("username"), map.get("password")});
System.out.println(v);
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
SendSMSHandler sms = new SendSMSHandlerImpl();
HashMap<String, Object> info = new HashMap<String, Object>();
info.put("mobile", "15800001111");
info.put("text", "Hello World!");
info.put("username", "xxx");
info.put("password", "xxxzzz");
String content = "";
try {
content = GlodonEncrypt.encryptSerializeObject(info);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HashMap<String, Object> msg = new HashMap<String, Object>();
msg.put(Constrants.MSGTYPE, Constrants.MESSAGE_TYPE[1]);
msg.put(Constrants.MSGCONT, content);
String message = "";
try {
message=mapper.writeValueAsString(msg);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sms.handleMessage(message);
}
}