首先是在tomcat上运行的web项目,在接收彩信中心发送的数据时却是使用了普通的应用程序模式
代码如下,用监听器打开:
/** * 监听器,监听联通彩信接收 * @author fudl * */ public class ReceiveListener implements ServletContextListener { private static Log log = LogFactory.getLog(ReceiveListener.class); private static ReceiveMgr receMgr = new ReceiveMgr(); public void contextDestroyed(ServletContextEvent event) { log.info("=========================\n结束接收联通彩信服务 end..."); log.info("\n========================="); receMgr.stop(); Runtime.getRuntime().exit(0); } public void contextInitialized(ServletContextEvent event) { log.info("=========================\n监听接收联通彩信服务 start..."); log.info("\n========================="); receMgr.setConfig(ReceiveMgr.mm7Config); receMgr.start(); } }
?
?
ReceiveMgr代码如下:
public class ReceiveMgr extends MM7Receiver{ private static ReportMgr reportMgr = MgrFactory.getInstance("reportMgr", ReportMgr.class); private static DeliverMgr deliMgr = MgrFactory.getInstance("deliMgr", DeliverMgr.class); public static MM7Config mm7Config = null; private static Log log = LogFactory.getLog(ReceiveMgr.class); public ReceiveMgr() { //初始化vasp接收器 String path = "/conf/mm7Config.xml"; String configPath = getUrlPath(path); mm7Config = new MM7Config(configPath); String connPath = getUrlPath("/conf/ConnConfig.xml"); mm7Config.setConnConfigName(connPath); } /** * 接收联通的彩信内容并且提取有用信息 */ public MM7VASPRes doDeliver(MM7DeliverReq request) { DeliverBean deliBean = deliMgr.getMmsInfoByDeliver(request); if(deliBean == null){ log.info("采集数据失败.."); return null; } //保存到数据库 ....................... MM7DeliverRes res = new MM7DeliverRes(); res.setTransactionID(request.getTransactionID()); //设置成功状态,以便表明SP已经接收到传送消息 1000 res.setStatusCode(MMConstants.RequestStatus.SUCCESS); //返回给MM7 API,以便API将MM7DeliverRes返回给MMSC return (MM7VASPRes)res; } //接收回复报告 public MM7VASPRes doDeliveryReport(MM7DeliveryReportReq mm7DeliveryReportReq) { MM7DeliveryReportRes res = new MM7DeliveryReportRes(); res.setTransactionID(mm7DeliveryReportReq.getTransactionID()); res.setStatusCode(MMConstants.RequestStatus.SUCCESS); byte b = mm7DeliveryReportReq.getMMStatus(); if (b == 1 || mm7DeliveryReportReq.getStatusText().endsWith("OK")) { } ReportBean reportBean = reportMgr.fillReportBean(mm7DeliveryReportReq); // update or insert //reportMgr.mergeInto(reportBean); reportMgr.recordRroportBean(reportBean); log.info(" |mm7DeliveryReportReq| \n"+mm7DeliveryReportReq.toString()); return (MM7VASPRes)res; } public MM7VASPRes doReadReply(MM7ReadReplyReq mm7ReadReplyReq) { MM7ReadReplyRes res = new MM7ReadReplyRes(); res.setTransactionID(mm7ReadReplyReq.getTransactionID()); res.setStatusCode(MMConstants.RequestStatus.SUCCESS); int report_stat = 0; String report_statusText = mm7ReadReplyReq.getStatusText(); return res; } /** * 获得真实路径 * api读取相对路径有问题,所以写了一个读取相对路径的方法,然后把绝 对路径传给api * @param path * @return */ private String getUrlPath(String path){ String urlPath = null; if(!path.isEmpty()){ //注意加载资源文件的写法 /表示从根目录开始 否则就表示从当前类所在的路径下开始 URL url = this.getClass().getResource(path); urlPath = url.getPath(); } return urlPath; } }
?
虽然api提供web方式的接收数据方式,但是不知道是配置原因还是什么,老是接收不到数据,希望有牛人解答啊
?
<mmscURL>/mm7(不知道什么用,难道和web方式接收有关)</mmscURL> <mmscIP>联通提供的ip和port</mmscIP> <MmscID>同样联通提供</MmscID> <UseSSL>true</UseSSL> <ListenIP>自己的ip需上报联通设置</ListenIP> <ListenPort>端口号</ListenPort>
?web方式代码:
public class MyReceiver extends MM7RecieveServlet { public MM7VASPRes doDeliver(MM7DeliverReq request) { return(MM7VASPRes)mm7DeliverRes; } }
?实在搞不懂为什么接收不到数据,求解答啊。。。
?
另外,上述线程接收方式,不太稳定,抓包得知能收到数据,但是解析不了,所以时有彩信发送不了的情况
用的包是mm7api.jar。
1 楼
xuan
2011-03-04
没有人知道么。。自己先顶。。
2 楼
kw73b
2012-05-08
你这个 web方式接收状态报告的问题解决了吗 我也遇到同样的问题了qq 1468788657 麻烦联系我 谢谢