📄 cmccmm7recvservlet.java
字号:
/*
* Created on 2005-3-18
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.rainbow.mms.gateway;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletConfig;
import javax.sql.DataSource;
import log.DailyMessageLog;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cmcc.mm7.vasp.common.MMConstants;
import com.cmcc.mm7.vasp.common.MMContent;
import com.cmcc.mm7.vasp.conf.MM7Config;
import com.cmcc.mm7.vasp.message.MM7DeliverReq;
import com.cmcc.mm7.vasp.message.MM7DeliverRes;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportReq;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportRes;
import com.cmcc.mm7.vasp.message.MM7ReadReplyReq;
import com.cmcc.mm7.vasp.message.MM7ReadReplyRes;
import com.cmcc.mm7.vasp.message.MM7VASPRes;
import com.cmcc.mm7.vasp.service.MM7ReceiveServlet;
import com.rainbow.mms.common.CMCCMM7DeliverMsg;
import com.rainbow.mms.common.MimeContent;
import com.rainbow.mms.common.MmsContent;
import com.rainbow.mms.common.QueryMimeContentSaveStrategy;
import com.rainbow.util.tools.HibernateUtil;
import com.rainbow.util.tools.TimeOperate;
/**
* 处理收到的彩信
* @author Rainbow MMS Group Leader —— TrWorks
*
*/
public class CMCCMM7RecvServlet extends MM7ReceiveServlet {
/**
* 网关的接入号码
*/
private String gwServiceID = "02163";
/**
* 网关编号
*/
private int gwGateWayID = 89;
/**
* 数据库的数据源
*/
private DataSource ds = null;
/**
* 接收帐单
*/
private static DailyMessageLog bill = new DailyMessageLog();
/**
* 日志
*/
private static Logger log = Logger.getLogger(CMCCMM7RecvServlet.class);
/**
* 统计使用的定时器
*/
private Timer staticTimer = null;
/**
*
*/
private String mm7ConfigFilePath = null;
/**
* 初始化Servlet
*/
public void init(ServletConfig config) {
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
// 设置帐单名称
try {
Context initCtx = new InitialContext();
Context envContext = (Context) initCtx.lookup("java:/comp/env");
if (envContext == null) {
throw new Exception("Boom - No Context");
}
ds = (DataSource) envContext.lookup("jdbc/MMSDB2");
gwServiceID = (String) config.getInitParameter("gwServiceID");
String billPath = (String) config.getInitParameter("billPath");
String logConfigPath = (String)config.getInitParameter("logConfigPath");
PropertyConfigurator.configure(logConfigPath);
log.info("初始化接收型网关的Servlet");
//bill.setLogFile("bill\\mmsrecvbill");
bill.setLogFile(billPath);
gwGateWayID = Integer.parseInt(((String) config
.getInitParameter("gwGateWayID")));
System.out.println("ServiceID:" + gwServiceID);
System.out.println("GateWayID:" + gwGateWayID);
mm7ConfigFilePath = (String) config
.getInitParameter("mm7ConfigFilePath");
System.out.println("MM7ConfigFile:" + mm7ConfigFilePath);
System.out.println("billPath:" + billPath);
System.out.println("logConfigPath:" + billPath);
Config = new MM7Config(mm7ConfigFilePath);
envContext.close();
initCtx.close();
//System.out.println("End Init Servlet mm7");
RecverStaticInfo staticInfo = RecverStaticInfo.getInstance();
staticTimer = new Timer();
staticTimer.schedule(staticInfo, 0, (60*60*1000));
} catch (Exception e) {
e.printStackTrace();
log.error("读取数据库和网关的连接信息时出现异常");
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
public void destroy()
{
System.out.println("------------------------------------------------------------");
System.out.println("------------------------------------------------------------");
}
/**
* 处理收到的普通的Deliver消息,并回复应答消息
*/
public MM7VASPRes doDeliver(MM7DeliverReq request) {
if (request == null) {
return null;
}
// 累加统计计数器
RecverStaticInfo.getInstance().addDeliverNum();
// 取出符合接入号码的目的号码
String dstNum = getValidDstNum(request);
// 将收到的Deliver消息在界面上打印出来
StringBuffer buffer = new StringBuffer();
buffer.append("------收到Deliver消息------\n");
buffer.append("MMSCID:" + request.getMMSRelayServerID() + "\n");
buffer.append("recvTime: " + TimeOperate.getNowTime() + "\n");
buffer.append("srcNum: " + request.getSender() + "\n");
buffer.append("dstNum: " + dstNum + "\n");
buffer.append("subject: " + request.getSubject() + "\n");
buffer.append("transactionID: " + request.getTransactionID() + "\n");
buffer.append("gatewayID: " + this.gwGateWayID + "\n");
buffer.append("priority: " + request.getPriority() + "\n");
buffer.append("linkID: " + request.getLinkedID() + "\n");
buffer.append("replyCharging: " + request.getReplyChargingID() + "\n");
System.out.println(buffer.toString());
// 将收到的Deliver消息保存到帐单中
bill.log(buffer.toString());
if (dstNum == null) {
log.warn("收到的目的号码不符合我们的接入号码");
} else {
// 处理收到的请求消息
doDeliverMsg(request, dstNum);
}
// 回复应答消息
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS);
mm7DeliverRes.setTransactionID(request.getTransactionID());
mm7DeliverRes.setServiceCode(gwServiceID);
// 在界面上打印出应答消息
StringBuffer resOutput = new StringBuffer();
resOutput.append("------发送Deliver应答消息------\n");
resOutput.append("transactionID: " + mm7DeliverRes.getTransactionID()
+ "\n");
resOutput.append("statusCode: " + mm7DeliverRes.getStatusCode() + "\n");
resOutput.append("serviceCode: " + mm7DeliverRes.getServiceCode()
+ "\n");
System.out.println(resOutput.toString());
return (MM7VASPRes) mm7DeliverRes;
}
/**
* 处理收到的普通的Deliver消息,将消息放入到数据库中
*
* @param request
*/
protected void doDeliverMsg(MM7DeliverReq request, String dstNum) {
if (request == null || dstNum == null) {
return;
}
Session sess = HibernateUtil.currentSession();
int deliverID = 0;
try {
CMCCMM7DeliverMsg deliverMsg = new CMCCMM7DeliverMsg();
deliverMsg.setContentType(0);
deliverMsg.setDstNum(dstNum);
deliverMsg.setGateWayId(gwGateWayID);
deliverMsg.setLinkId(request.getLinkedID());
deliverMsg.setMmscId(request.getMMSRelayServerID());
deliverMsg.setMsgId(request.getTransactionID());
deliverMsg.setRecvTime(new Date());
deliverMsg.setSrcNum(request.getSender());
deliverMsg.setWantRead(0);
deliverMsg.setWantReport(0);
MmsContent mmsContent = new MmsContent();
mmsContent.setCreateFrom(0);
mmsContent.setCreaterMemo("user");
mmsContent.setCreateTime(new Date());
mmsContent.setSubject(request.getSubject());
Transaction tx = sess.beginTransaction();
// 请求消息内有多媒体内容
if (request.isContentExist() == true) {
//System.out.println("Has MMS Content");
MMContent parentContent = request.getContent();
MMContent c = parentContent;
// 多媒体内容是由多个多媒体元素组成的
if (parentContent.isMultipart()) {
//System.out.println("Has Many MMS Content");
List listElements = parentContent.getSubContents();
for (int i = 0; i < listElements.size(); i++) {
c = (MMContent) listElements.get(i);
MimeContent e = new MimeContent();
e.setMimeType(c.getContentType().getPrimaryType() + "/"
+ c.getContentType().getSubType());
e.setMimeContentName(c.getContentID());
e.setCreateTime(new Date());
// 按照文本格式保存
if (QueryMimeContentSaveStrategy.getSaveStrategy(e
.getMimeType(), sess) == 1) {
e.setCharacterContent(c.getContentAsString());
} else { // 按照二进制格式保存
e.setBinaryContent(c.getContent());
}
//System.out.println(e.toString());
// 保存该多媒体元素
sess.save(e);
// 将该多媒体元素加入到彩信内容体中
mmsContent.getMmsContentElments().add(e);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -