⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mm7receiveservlet.java

📁 彩信发送源代码,实现mm7接口
💻 JAVA
📖 第 1 页 / 共 3 页
字号:

			baos.write(sContentType.getBytes());
			baos.write("\r\n".getBytes());
			while (totallen < length) // word = in.read()
			{
				// System.out.println("开始");
				readlen = in.read(b);
				baos.write(b, 0, readlen);
				totallen = totallen + readlen;

				// System.out.println("totallen="+totallen);
			}
			// System.out.println("-----receive http body-----");
			SevereBuffer.append("-----receive http body-----");
			if (log.isDebugEnabled())
				log.debug("开始接收HTTP的包体部分........");
			// System.out.println(baos.toString());

			if (Config.getAuthenticationMode() == 1) {
				if (log.isDebugEnabled())
					log.debug("认证模式:Config.getAuthenticationMode()=" + Config.getAuthenticationMode());
				if (basicAuth(rsp, baos) == false) {
					log.warn("认证失败,系统返回.........");
					return;
				}
			}
			else if (Config.getAuthenticationMode() == 2) {
				if (log.isDebugEnabled())
					log.debug("认证模式:Config.getAuthenticationMode()=" + Config.getAuthenticationMode());

				if (digestAuth(rsp, baos, nc) == false) {
					log.warn("认证失败,系统返回.........");
					return;
				}
			}

			SOAPDecoder soapDecoder = null;
			soapDecoder = new SOAPDecoder();
			soapDecoder.setMessage(baos);
			try {
				soapDecoder.decodeMessage();
				MM7RSReq rsReq = soapDecoder.getMessage();
				if (rsReq == null) {
					log.warn("取得的包体消息,解码后为空,系统返回.......");
					rsp.sendError(404);
					return;
				}
				if (soapDecoder.getMessageName().equals(MMConstants.DELIVERREQ)) {
					// System.out.println("DeliverReq");

					MM7DeliverReq deliverReq = (MM7DeliverReq) rsReq;

					log.info("收取到Deliver消息,发送方:" + deliverReq.getSender() + ",主题:" + deliverReq.getSubject()
							+ ",LinkedID:" + deliverReq.getLinkedID());
					InfoBuffer.append("\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][3]");
					TempBuffer.append("[TransactionID=" + deliverReq.getTransactionID() + "]");
					TempBuffer.append("[Message_Type=MM7DeliverReq]");
					TempBuffer.append("[Sender_Address=" + deliverReq.getSender() + "]");
					TempBuffer.append("[Recipient_Address={");
					if (deliverReq.isToExist()) {
						TempBuffer.append("To={");
						List to = new ArrayList();
						to = deliverReq.getTo();
						for (int i = 0; i < to.size(); i++)
							TempBuffer.append((String) to.get(i) + ",");
						TempBuffer.append("}");
					}
					if (deliverReq.isCcExist()) {
						TempBuffer.append("Cc={");
						List cc = new ArrayList();
						cc = deliverReq.getCc();
						for (int i = 0; i < cc.size(); i++)
							TempBuffer.append((String) cc.get(i) + ",");
						TempBuffer.append("}");
					}
					if (deliverReq.isBccExist()) {
						TempBuffer.append("Bcc={");
						List bcc = new ArrayList();
						bcc = deliverReq.getBcc();
						for (int i = 0; i < bcc.size(); i++)
							TempBuffer.append((String) bcc.get(i) + ",");
						TempBuffer.append("}");
					}
					TempBuffer.append("}]");
					InfoBuffer.append(TempBuffer);
					InfoBuffer.append("\r\n" + soapDecoder.getEnvelope()); // Envelope消息
					String timelevel = "\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][6]";
					Finerbaos.write(timelevel.getBytes());
					Finerbaos.write(TempBuffer.toString().getBytes());
					Finerbaos.write("\r\n".getBytes());
					Finerbaos.write(soapDecoder.getSoapStream().toByteArray());
					TempBuffer = new StringBuffer();
					if (log.isDebugEnabled())
						log.debug("业务逻辑处理Deliver消息开始........");
					MM7DeliverRes deliverRes = (MM7DeliverRes) doDeliver(deliverReq);
					if (log.isDebugEnabled())
						log.debug("业务逻辑处理Deliver消息完毕,状态:" + deliverRes.getStatusCode());
					InfoBuffer.append("\r\n\r\n" + "[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "]"
							+ "[3]");
					String tempres = "\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][6]";
					Finerbaos.write(tempres.getBytes());
					TempBuffer.append("[Message_Type=MM7DeliverRes]");
					TempBuffer.append("[Comments={" + deliverRes.getStatusCode() + ";" + deliverRes.getStatusText()
							+ "}]\r\n");
					InfoBuffer.append(TempBuffer);
					Finerbaos.write(TempBuffer.toString().getBytes());
					TempBuffer = new StringBuffer();
					Finerbaos.write("\r\n".getBytes());
					send(rsp, deliverRes);
					log.info("DeliverRes消息发送完毕:StatusCode=" + deliverRes.getStatusCode());
					// System.out.println("发送DeliverRes完毕");
					SevereBuffer.append("DeliverRes消息发送完毕");
				}
				else if (soapDecoder.getMessageName().equals(MMConstants.DELIVERYREPORTREQ)) {
					// System.out.println("DeliverReportReq");
					MM7DeliveryReportReq deliverReportReq = (MM7DeliveryReportReq) rsReq;

					log.info("收到状态报告,接受方:" + deliverReportReq.getRecipient() + ",状态:" + deliverReportReq.getMMStatus()
							+ ",MSGID:" + deliverReportReq.getMessageID());

					InfoBuffer.append("\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][3]");
					TempBuffer.append("[TransactionID=" + deliverReportReq.getTransactionID() + "]");
					TempBuffer.append("[Message_Type=MM7DeliveryReportReq]");
					TempBuffer.append("[Sender_Address=" + deliverReportReq.getSender() + "]");
					InfoBuffer.append(TempBuffer);
					InfoBuffer.append("\r\n" + soapDecoder.getEnvelope()); // Envelope消息
					String timelevel = "\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][6]";
					Finerbaos.write(timelevel.getBytes());
					Finerbaos.write(TempBuffer.toString().getBytes());
					Finerbaos.write("\r\n".getBytes());
					Finerbaos.write(soapDecoder.getSoapStream().toByteArray());
					TempBuffer = new StringBuffer();
					if (log.isDebugEnabled())
						log.debug("业务逻辑处理状态报告消息开始........");
					MM7DeliveryReportRes deliverReportRes = (MM7DeliveryReportRes) doDeliveryReport(deliverReportReq);
					if (log.isDebugEnabled())
						log.debug("业务逻辑处理状态报告消息完毕,STATUSCODE:"+deliverReportRes.getStatusCode());
					InfoBuffer.append("\r\n\r\n" + "[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "]"
							+ "[3]");
					String tempres = "\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][6]";
					Finerbaos.write(tempres.getBytes());
					TempBuffer.append("[Message_Type=MM7DeliverRes]");
					TempBuffer.append("[Comments={" + deliverReportRes.getStatusCode() + ";"
							+ deliverReportRes.getStatusText() + "}]\r\n");
					InfoBuffer.append(TempBuffer);
					Finerbaos.write(TempBuffer.toString().getBytes());
					TempBuffer = new StringBuffer();
					Finerbaos.write("\r\n".getBytes());

					send(rsp, deliverReportRes);
					// System.out.println("发送deliveryReportRes完毕");
					log.info("deliveryReportRes消息发送完毕:StatusCode=" + deliverReportRes.getStatusCode());
					SevereBuffer.append("发送deliveryReportRes完毕");
				}
				else if (soapDecoder.getMessageName().equals(MMConstants.READREPLYREQ)) {
					MM7ReadReplyReq readReplyReq = (MM7ReadReplyReq) rsReq;
					log.info("收到读后回复消息,接受方:" + readReplyReq.getRecipient() + ",状态:" + readReplyReq.getMMStatus()
							+ ",MSGID:" + readReplyReq.getMessageID());
					InfoBuffer.append("\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][3]");
					TempBuffer.append("[TransactionID=" + readReplyReq.getTransactionID() + "]");
					TempBuffer.append("[Message_Type=MM7ReadReplyReq]");
					TempBuffer.append("[Sender_Address=" + readReplyReq.getSender() + "]");
					InfoBuffer.append(TempBuffer);
					InfoBuffer.append("\r\n" + soapDecoder.getEnvelope()); // Envelope消息
					String timelevel = "\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][6]";
					Finerbaos.write(timelevel.getBytes());
					Finerbaos.write(TempBuffer.toString().getBytes());
					Finerbaos.write("\r\n".getBytes());
					Finerbaos.write(soapDecoder.getSoapStream().toByteArray());
					TempBuffer = new StringBuffer();
					if (log.isDebugEnabled())
						log.debug("业务逻辑处理读后回复消息开始........");
					
					MM7ReadReplyRes readReplyRes = (MM7ReadReplyRes) doReadReply(readReplyReq);
					if (log.isDebugEnabled())
						log.debug("业务逻辑处理读后回复消息完毕,STATUSCODE:"+readReplyRes.getStatusCode());
					InfoBuffer.append("\r\n\r\n" + "[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "]"
							+ "[3]");
					String tempres = "\r\n\r\n[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "][6]";
					Finerbaos.write(tempres.getBytes());
					TempBuffer.append("[Message_Type=MM7DeliverRes]");
					TempBuffer.append("[Comments={" + readReplyRes.getStatusCode() + ";" + readReplyRes.getStatusText()
							+ "}]\r\n");
					InfoBuffer.append(TempBuffer);
					Finerbaos.write(TempBuffer.toString().getBytes());
					TempBuffer = new StringBuffer();
					Finerbaos.write("\r\n".getBytes());
					send(rsp, readReplyRes);
					log.info("读后回复响应消息发送完毕:StatusCode=" + readReplyRes.getStatusCode());
				}
				InfoBuffer.append(strEnvelope);
				Finerbaos.write(strEnvelope.getBytes());
				String time = "[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "]";
				SevereBuffer.insert(0, "\r\n\r\n" + time + "[1]"); //
				MMSCID = Config.getMmscId();
				if (Config.getLogLevel() > 0)
					WriteLog(MMSCID);
			}
			catch (SOAPDecodeException e) {
				// System.err.println(e);
				log.error("SOAPDecodeException:解码失败:" + e);
			}
		}
		catch (IOException ioe) {
			// System.out.println("Error in SimpleWebServer: " + ioe);
			SevereBuffer.append("Error in SimpleWebServer: " + ioe);
			log.error("Service():IOException:" + ioe);
		}
	}

	public void send(HttpServletResponse rsp, MM7VASPRes mm7VASPRes) {
		StringBuffer sb = new StringBuffer();
		StringBuffer entityBody = new StringBuffer();
		ServletOutputStream sender = null;
		try {
			sender = rsp.getOutputStream();
			// rsp.addHeader("Connection","Keep-Alive");
			rsp.addHeader("Content-Type", "text/xml;charset=\"" + Config.getCharSet() + "\"");
			// rsp.addHeader("Content-Type","text/xml;charset=\"US-ASCII\"");
			// 设置鉴权
			byte[] bcontent = getContent(mm7VASPRes);
			// 设置消息体长度
			rsp.addHeader("Content-Length", Integer.toString(bcontent.length));
			// rsp.addHeader("Mime-Version","1.0");
			// rsp.addHeader("SOAPAction","");
			entityBody.append(new String(bcontent));
			sb.append(entityBody);
			// System.out.println("**********send res *********");
			// System.out.println(sb.toString());
			sender.write(sb.toString().getBytes());
			sender.flush();
			SevereBuffer.append("end sending ack!\r\n");
			return;
		}
		catch (InterruptedIOException iioe) {
			log.error("send():" + iioe);
			return;
		}
		catch (Exception e) {
			log.error("send():" + e);
			return;
		}
	}

	private byte[] getContent(MM7VASPRes mm7VASPRes) {
		byte[] b = null;

		b = encodeMessage(mm7VASPRes);
		String strMessage = new String(b);
		int index = strMessage.indexOf(MMConstants.BEGINXMLFLAG);
		strEnvelope = strMessage.substring(index);
		return b;
	}

	private byte[] encodeMessage(MM7VASPRes mm7VASPRes) {
		ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
		StringBuffer sb = new StringBuffer();

		sb
				.append("<?xml version=\"1.0\"?><env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Header>");//
		if (mm7VASPRes.isTransactionIDExist()) //
			sb
					.append("<mm7:TransactionID xmlns:mm7=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">"
							+ mm7VASPRes.getTransactionID() + "</mm7:TransactionID>");
		else
//			System.err.println("TransactionID 不许为空!");
			log.warn("encodeMessage():TransactionID 不许为空!");
		sb.append("</env:Header><env:Body>");
		/*
		 * if(mm7VaspReq.isMM7VersionExist()) sb.append("<MM7Version>"+mm7VaspReq.getMM7Version()+"</MM7Version>");
		 */

		/**
		 * 若发送的消息为MM7SubmitReq
		 */
		if (mm7VASPRes instanceof MM7DeliverRes) {
			MM7DeliverRes deliverRes = (MM7DeliverRes) mm7VASPRes;
			sb
					.append("<DeliverRsp xmlns=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">");
			if (deliverRes.isMM7VersionExist()) {
				sb.append("<MM7Version>" + deliverRes.getMM7Version() + "</MM7Version>");
			}
			else {
//				System.err.println("MM7Version 不许为空!");
				log.warn("encodeMessage():MM7Version 不许为空!");
			}

			if (deliverRes.isServiceCodeExist()) {
				sb.append("<ServiceCode>" + deliverRes.getServiceCode() + "</ServiceCode>");
			}

			sb.append("<Status>");
			if (deliverRes.isStatusCodeExist()) {
				sb.append("<StatusCode>" + deliverRes.getStatusCode() + "</StatusCode>");
			}
			else {
//				System.err.println("StatusCode 不许为空");
				log.warn("encodeMessage():StatusCode 不许为空!");
			}

			if (deliverRes.isStatusTextExist()) {
				sb.append("<StatusText>" + deliverRes.getStatusText() + "</StatusText>");
			}
			if (deliverRes.isStatusDetailExist()) {
				sb.append("<Details>" + deliverRes.getStatusDetail() + "</Details>");
			}
			sb.append("</Status>");

			sb.append("</DeliverRsp>");
			sb.append("</env:Body></env:Envelope>");
			sb.append("\r\n");
		}
		else if (mm7VASPRes instanceof MM7DeliveryReportRes) {
			MM7DeliveryReportRes deliveryReportRes = (MM7DeliveryReportRes) mm7VASPRes;
			sb
					.append("<DeliveryReportRsp xmlns=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">");
			if (deliveryReportRes.isMM7VersionExist()) {
				sb.append("<MM7Version>" + deliveryReportRes.getMM7Version() + "</MM7Version>");
			}
			else {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -