根据WebService接口定时发送短信和心跳包,自己提高自己做的一个小Demo,俗话说得好,好记性不如烂笔头,当然哥也是一个慷慨的人,所以分享出来和大家一起学习和参考哈哈
application.java
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:cxf="http://cxf.apache.org/core"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="smsJobServiceImpl" class="com.sxit.alarm.service.SmsJobServiceImpl"/>
<!-- <bean id="smsJobServiceImpl" class="com.sxit.alarm.test.Firstquartz"/> -->
<!--配置定时器触发详情 -->
<bean id="timeDitail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="smsJobServiceImpl"/>
<property name="targetMethod" value="sendActive"/>
</bean>
<!--定义时间间隔触发器 -->
<!-- <bean id="timeTigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="timeDitail"></property>
<property name="cronExpression" value="*/40 * * * * ?"/>
<property name="startDelay" value="0"></property>
</bean> -->
<bean id="timeTigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="timeDitail"></property>
<property name="startDelay" value="0"></property>
<property name="repeatInterval">
<value>40000</value>
</property>
</bean>
<!--启动定时器 -->
<bean id="startJob" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="timeTigger" />
</list>
</property>
</bean>
</beans>
package com.sxit.alarm.ford;
import java.rmi.RemoteException;
import org.apache.log4j.Logger;
import com.sxit.alarm.service.SmsJobServiceImpl;
import com.sxit.alarm.webservice.AppServiceClient;
import com.sxit.alarm.webservice.model.DeliverMsg;
import com.sxit.alarm.webservice.model.RespInfo;
import com.sxit.alarm.webservice.model.SendRespMsg;
/**
*
* @author lfq
* 2015-4
* 移动短信接口
*
*/
public class Sms{
/**
* 日志对象
*/
protected static Logger logger = Logger.getLogger("Sms");
/**
* 鉴权接口
* @param header
* @param spid
* @param password
* @return
* @throws RemoteException
*/
public static RespInfo auth(
com.sxit.alarm.webservice.model.InfoHeader header,
java.lang.String spid, java.lang.String password) throws RemoteException{
AppServiceClient.setEndPoint("http://218.206.27.231:8085/mas/services/AppService");
return AppServiceClient.auth(header, spid, password);
}
/**
* 完整发送短信接口,内部调用了短信下发的相关接口
* @param servicenumber
* @param content
* @param spid
* @param spasswd
* @param receiveList
* @throws RemoteException
*/
public static void sendNotifySms(String servicenumber, String content,
String spid, String spasswd, String[] receiveList)
throws RemoteException{
AppServiceClient.sendNotifySms(servicenumber, content, spid, spasswd, receiveList);
}
/**
* 注销接口:会话注销接口
* @param header
* @param passport
* @return
* @throws java.rmi.RemoteException
*/
public static RespInfo terminate(
com.sxit.alarm.webservice.model.InfoHeader header,
java.lang.String passport) throws java.rmi.RemoteException {
if (SmsJobServiceImpl.getPassport()!=null&&"".equals(SmsJobServiceImpl.getPassport())) {
return AppServiceClient.terminate(header,SmsJobServiceImpl.getPassport() );
}
logger.error("terminate令牌为空");
return null;
}
/**
* 下发短信接口:用户鉴权成功后,通过此接口可以进行短信下发
* @param header
* @param passport
* @param sequence
* @param srcid
* @param receiverList
* @param content
* @param reportFlag
* @return
* @throws java.rmi.RemoteException
*/
public static RespInfo sendSms(
com.sxit.alarm.webservice.model.InfoHeader header,
java.lang.String passport, int sequence, java.lang.String srcid,
java.lang.String[] receiverList, java.lang.String content,
boolean reportFlag) throws java.rmi.RemoteException {
if (SmsJobServiceImpl.getPassport()!=null&&"".equals(SmsJobServiceImpl.getPassport())) {
return AppServiceClient.sendSms(header, SmsJobServiceImpl.getPassport(), sequence, srcid, receiverList, content, reportFlag);
}
logger.error("sendSms令牌通行证为空");
return null;
}
/**
* 心跳接口:为了保证用户身份及通行证有效,每90秒自动触发此接口
* @param header
* @param passport
* @return
* @throws java.rmi.RemoteException
*/
public static RespInfo sendActive(
com.sxit.alarm.webservice.model.InfoHeader header,
java.lang.String passport) throws java.rmi.RemoteException {
return AppServiceClient.sendActive(header, passport);
}
/**
* 获取应答状态接口:用户获取已经提交消息msgid接口[支持1000条消息缓存]
* @param header
* @param passport
* @return
* @throws java.rmi.RemoteException
*/
public static DeliverMsg[] getDeliver(
com.sxit.alarm.webservice.model.InfoHeader header,
java.lang.String passport) throws java.rmi.RemoteException {
if (SmsJobServiceImpl.getPassport()!=null&&"".equals(SmsJobServiceImpl.getPassport())) {
return AppServiceClient.getDeliver(header, SmsJobServiceImpl.getPassport());
}
logger.error("getDeliver令牌通行证为空");
return null;
}
/**
* 状态报告和上行消息接口:用户获取已经提交消息msgid接口[支持1000条消息缓存]
* @param header
* @param passport
* @return
* @throws java.rmi.RemoteException
*/
public static SendRespMsg[] getSendResp(
com.sxit.alarm.webservice.model.InfoHeader header,
java.lang.String passport) throws java.rmi.RemoteException {
if (SmsJobServiceImpl.getPassport()!=null&&"".equals(SmsJobServiceImpl.getPassport())) {
return AppServiceClient.getSendResp(header, SmsJobServiceImpl.getPassport());
}
logger.error("getSendResp令牌通行证为空");
return null;
}
/**
* 获取时间戳接口
* @return
*/
public static String getTimeStamp() {
return AppServiceClient.getTimeStamp();
}
}
package com.sxit.alarm.service; import java.rmi.RemoteException; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import org.apache.log4j.Logger; import com.sxit.alarm.webservice.model.RespInfo; /** * WebService接口 * */ @WebService public interface SmsJobService { /** * 心跳接口,90秒执行一次 * @throws RemoteException */ public void sendActive() throws RemoteException; /** * 鉴权接口,服务器启动执行一次 * @throws RemoteException */ public void auth() throws RemoteException; /** * 发送短信接口 * @throws RemoteException */ public RespInfo sendSms(int sequenceId,String[] receiverList, String content,String tailNum) throws RemoteException; }
package com.sxit.alarm.service; import java.io.InputStream; import java.net.MalformedURLException; import java.rmi.RemoteException; import java.util.Properties; import org.apache.log4j.Logger; import com.sxit.alarm.ford.Sms; import com.sxit.alarm.webservice.model.InfoHeader; import com.sxit.alarm.webservice.model.RespInfo; public class SmsJobServiceImpl implements SmsJobService { private static String endpoint; private static int authCode =1; private static String passport;// 保存通行证 private static String pid; private static String password; /** * 日志对象 */ protected static Logger logger = Logger.getLogger("SmsClient"); // 获得通行证 public static String getPassport() { return passport; } public static int getAuthCode() { return authCode; } @Override public synchronized void sendActive() { RespInfo sendActive = null; final InfoHeader header = new InfoHeader(); header.setCode("sendActive"); if(passport!=null) { try { sendActive = Sms.sendActive(header, passport); } catch (RemoteException e) { logger.error(e.getMessage(),e); } } if(sendActive==null||sendActive.getRespCode()!=0||authCode!=0) { if(sendActive!=null) { //System.out.println("authauthauthauthauth"+sendActive.getRespCode()); logger.info("authauthauthauthauth"+sendActive.getRespCode()); } authCode=1;//心跳失败后重新赋值为1 passport="";//心跳失败后删除原有的passport值 try { auth(); } catch (RemoteException e) { // TODO Auto-generated catch block //e.printStackTrace(); logger.error(e.getMessage(),e); } } } @Override public void auth() throws RemoteException { final InfoHeader header = new InfoHeader(); // 设置消息头 header.setCode("auth"); // 调用鉴权接口 RespInfo auth = Sms.auth(header, pid, password); if (auth.getRespCode() != 0) {// 鉴权不成功,等待5s,再次鉴权成功,直到成功为止! if(auth.getRespCode() == 104 && passport != null && !"".equals(passport)) { final InfoHeader header1 = new InfoHeader(); header1.setCode("terminate"); try{ RespInfo info = Sms.terminate(header1, passport); if(info == null) { //System.out.println("terminate fail"); logger.info("terminate fail"); }else{ //System.out.println("104 callback terminate code:" + info.getRespCode()); logger.info("104 callback terminate code:"+ info.getRespCode()); } }catch (Exception e){ //e.printStackTrace(); logger.error(e.getMessage(),e); } } //System.out.println("authing..."+auth.getRespCode()+auth.getRespMessage()); logger.info("authing..."+auth.getRespCode()+auth.getRespMessage()); int count = 0; while (count<2) { count++; try { Thread.sleep(5 * 1000); header.setCode("auth"); auth = Sms.auth(header, pid, password); //System.out.println("authCode="+authCode+" password "+passport); logger.info("authCode="+authCode+" password "+passport); if (auth.getRespCode() == 0) {//鉴权成功,退出循环 authCode = auth.getRespCode(); passport = auth.getRespMessage(); break; } } catch (InterruptedException e) { //e.printStackTrace(); logger.error(e.getMessage(),e); } } } else//鉴权成功则给authCode和passport赋值 { authCode = auth.getRespCode();// 设置通行证代码 passport = auth.getRespMessage();// 设置通行证 } } @Override public RespInfo sendSms(int sequenceId, String[] receiverList, String content, String tailNum) throws RemoteException { final InfoHeader header = new InfoHeader(); if (authCode == 0) { header.setCode("sendSms"); return Sms.sendSms(header, passport, sequenceId, tailNum, receiverList, content, true); } else { //System.out.println("authCode!=0");\ logger.info("authCode!=0"); return null; } } // 注销 public static void terminate() throws RemoteException { final InfoHeader header = new InfoHeader(); if(authCode==0){ header.setCode("terminate"); Sms.terminate(header, passport); }else{ //System.err.println("鉴权成功后才能注销..."); } } }