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

📄 soapencoder.java

📁 彩信发送源代码,实现mm7接口
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * File Name:SOAPEncoder.java Company: 中国移动集团公司 Date : 2004-1-8
 */


/**
 * modified by liuhuafeng on 2006/7/26
 * 1:日志由Log4j产生
 * 
 */
package com.cmcc.mm7.vasp.common;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

import sun.misc.BASE64Encoder;

import com.cmcc.mm7.vasp.conf.MM7Config;
import com.cmcc.mm7.vasp.message.MM7CancelReq;
import com.cmcc.mm7.vasp.message.MM7ReplaceReq;
import com.cmcc.mm7.vasp.message.MM7SubmitReq;
import com.cmcc.mm7.vasp.message.MM7VASPReq;

public class SOAPEncoder {
	private static final Logger log = Logger.getLogger(SOAPEncoder.class);

	private MM7VASPReq mm7VaspReq;

	private boolean bMessageExist;

	private boolean bEncoder;

	private ByteArrayOutputStream byteOutput;

	private MM7Config mm7Config;

	/** 默认构造方法 */
	public SOAPEncoder() {
		reset();
	}

	public SOAPEncoder(MM7Config config) {
		mm7Config = config;
	}

	public void reset() {
		mm7VaspReq = null;
		bMessageExist = false;
		bEncoder = false;
		byteOutput = null;
		mm7Config = null;
	}

	/** 设置MM7VASPReq类型的消息 */
	public void setMessage(MM7VASPReq mm7vaspreq) {
		mm7VaspReq = mm7vaspreq;
		bMessageExist = true;
	}

	/** 得到byte[]形式的消息 */
	public byte[] getMessage() {
		if (bEncoder)
			return (byteOutput.toByteArray());
		else
			return (null);
	}

	/** 进行消息的编码 */
	public void encodeMessage() throws SOAPEncodeException {
		if (!bMessageExist)
			throw new SOAPEncodeException("No Multimedia Messages set in the encoder!");
		try {
			byteOutput = new ByteArrayOutputStream();
			bEncoder = false;
			StringBuffer sb = new StringBuffer();
			StringBuffer ContentBuffer = new StringBuffer();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
			// add by hudm 2004-06-21
			if (mm7VaspReq instanceof MM7SubmitReq) {
				MM7SubmitReq req = (MM7SubmitReq) mm7VaspReq;
				if (req.isContentExist()) {
					sb.append("this is a multi-part message in MIME format" + "\r\n");
					sb.append("\r\n");
					sb.append("\r\n");
					sb.append("----NextPart_0_2817_24856" + "\r\n");
					sb.append("Content-Type:text/xml;charset=\"" + mm7Config.getCharSet() + "\"\r\n");
					sb.append("Content-Transfer-Encoding:8bit" + "\r\n");
					sb.append("Content-ID:</tnn-200102/mm7-vasp>" + "\r\n");
					sb.append("\r\n");
				}
			}
			else if (mm7VaspReq instanceof MM7ReplaceReq) {
				MM7ReplaceReq req = (MM7ReplaceReq) mm7VaspReq;
				if (req.isContentExist()) {
					sb.append("this is a multi-part message in MIME format" + "\r\n");
					sb.append("\r\n");
					sb.append("\r\n");
					sb.append("----NextPart_0_2817_24856" + "\r\n");
					sb.append("Content-Type:text/xml;charset=\"" + mm7Config.getCharSet() + "\"\r\n");
					sb.append("Content-Transfer-Encoding:8bit" + "\r\n");
					sb.append("Content-ID:</tnn-200102/mm7-vasp>" + "\r\n");
					sb.append("\r\n");
				}
			}
			// end add by hudm 2004-06-21
			sb.append("<?xml version=\"1.0\" encoding=\"" + mm7Config.getCharSet()
					+ "\"?><env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Header>");//
			if (mm7VaspReq.isTransactionIDExist()) //
				sb
						.append("<mm7:TransactionID xmlns:mm7=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\" env:mustUnderstand=\"1\">"
								+ mm7VaspReq.getTransactionID() + "</mm7:TransactionID>");
			else
				// System.out.println("TransactionID 不许为空!");
				log.warn("SOAPEncoder.encodeMessage():TransactionID不许为空!");
			sb.append("</env:Header><env:Body>");
			/**
			 * 若发送的消息为MM7SubmitReq
			 */
			if (mm7VaspReq instanceof MM7SubmitReq) {
				MM7SubmitReq submitReq = (MM7SubmitReq) mm7VaspReq;
				sb
						.append("<SubmitReq xmlns=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">");
				if (submitReq.isMM7VersionExist())
					sb.append("<MM7Version>" + submitReq.getMM7Version() + "</MM7Version>");
				else
					// System.out.println("MM7Version 不许为空!");
					log.warn("SOAPEncoder.encodeMessage():MM7Version 不许为空!");
				if (submitReq.isVASPIDExist() || submitReq.isVASIDExist() || submitReq.isSenderAddressExist()) {
					sb.append("<SenderIdentification>");
					if (submitReq.isVASPIDExist())
						sb.append("<VASPID>" + submitReq.getVASPID() + "</VASPID>");
					else
						// System.out.println("SP代码VASPID不许为空!");
						log.warn("SOAPEncoder.encodeMessage():SP代码VASPID不许为空!");
					if (submitReq.isVASIDExist())
						sb.append("<VASID>" + submitReq.getVASID() + "</VASID>");
					else
						// System.out.println("服务代码VASID不许为空!");
						log.warn("SOAPEncoder.encodeMessage():服务代码VASID不许为空!");
					if (submitReq.isSenderAddressExist())
						sb.append("<SenderAddress>" + submitReq.getSenderAddress() + "</SenderAddress>");
					sb.append("</SenderIdentification>");
				}
				else
					// System.out.println("SP代码VASPID和服务代码VASID均不允许为空!");
					log.warn("SOAPEncoder.encodeMessage():SP代码VASPID和服务代码VASID均不允许为空!");

				if (submitReq.isToExist() || submitReq.isCcExist() || submitReq.isBccExist()) {
					sb.append("<Recipients>");
					if (submitReq.isToExist()) {
						sb.append("<To>");
						List ToList = new ArrayList();
						ToList = submitReq.getTo();
						for (int i = 0; i < ToList.size(); i++) {
							String strto = (String) ToList.get(i);
							if (strto.indexOf('@') > 0)
								sb.append("<RFC2822Address>" + strto + "</RFC2822Address>");
							else
								sb.append("<Number>" + strto + "</Number>");
						}
						sb.append("</To>");
					}
					if (submitReq.isCcExist()) {
						sb.append("<Cc>");
						List CcList = new ArrayList();
						CcList = submitReq.getCc();
						for (int i = 0; i < CcList.size(); i++) {
							String strcc = (String) CcList.get(i);
							if (strcc.indexOf('@') > 0)
								sb.append("<RFC2822Address>" + strcc + "</RFC2822Address>");
							else
								sb.append("<Number>" + strcc + "</Number>");
						}
						sb.append("</Cc>");
					}
					if (submitReq.isBccExist()) {
						sb.append("<Bcc>");
						List BccList = new ArrayList();
						BccList = submitReq.getBcc();
						for (int i = 0; i < BccList.size(); i++) {
							String strbcc = (String) BccList.get(i);
							if (strbcc.indexOf('@') > 0)
								sb.append("<RFC2822Address>" + strbcc + "</RFC2822Address>");
							else
								sb.append("<Number>" + strbcc + "</Number>");
						}
						sb.append("</Bcc>");
					}
					sb.append("</Recipients>");
				}
				else
//					System.out.println("接收方地址To、抄送方地址Cc和密送方地址Bcc中至少需要有一个不为空!");
				log.warn("SOAPEncoder.encodeMessage():接收方地址To、抄送方地址Cc和密送方地址Bcc中至少需要有一个不为空!");
				if (submitReq.isServiceCodeExist())
					sb.append("<ServiceCode>" + submitReq.getServiceCode() + "</ServiceCode>");
				else
//					System.out.println("业务代码ServiceCode不许为空!");
				log.warn("SOAPEncoder.encodeMessage():业务代码ServiceCode不许为空!");
				
				if (submitReq.isLinkedIDExist())
					sb.append("<LinkedID>" + submitReq.getLinkedID() + "</LinkedID>");
				if (submitReq.isMessageClassExist())
					sb.append("<MessageClass>" + submitReq.getMessageClass() + "</MessageClass>");
				if (submitReq.isTimeStampExist())
					sb.append("<TimeStamp>" + sdf.format(submitReq.getTimeStamp()) + "</TimeStamp>");
				if (submitReq.isReplyChargingExist()) {
					sb.append("<ReplyCharging");
					if (submitReq.isReplyChargingSizeExist())
						sb.append(" replyChargingSize=\"" + submitReq.getReplyChargingSize() + "\"");
					if (submitReq.isReplyDeadlineExist())
						sb.append(" replyDeadline=\"" + sdf.format(new Date(submitReq.getReplyDeadlineRelative()))
								+ "+08:00\"");
					if (submitReq.isReplyDeadlineAbsoluteExist())
						sb.append(" replyDeadline=\"" + sdf.format(submitReq.getReplyDeadlineAbsolute()) + "+08:00\"");
					sb.append("></ReplyCharging>");
				}
				if (submitReq.isEarliestDeliveryTimeExist()) {
					Date dd = new Date(submitReq.getEarliestDeliveryTimeRelative());
					sb.append("<EarliestDeliveryTime>" + sdf.format(dd) + "+08:00" + "</EarliestDeliveryTime>");
				}
				if (submitReq.isEarliestDeliveryTimeAbsolute())
					sb.append("<EarliestDeliveryTime>" + sdf.format(submitReq.getEarliestDeliveryTimeAbsolute())
							+ "+08:00" + "</EarliestDeliveryTime>");
				if (submitReq.isExpiryDateExist())
					sb.append("<ExpiryDate>" + sdf.format(new Date(submitReq.getExpiryDateRelative())) + "+08:00"
							+ "</ExpiryDate>");
				if (submitReq.isExpiryDateAbsolute())
					sb.append("<ExpiryDate>" + sdf.format(submitReq.getExpiryDateAbsolute()) + "+08:00"
							+ "</ExpiryDate>");
				if (submitReq.isDeliveryReportExist())
					sb.append("<DeliveryReport>" + submitReq.getDeliveryReport() + "</DeliveryReport>");
				if (submitReq.isReadReplyExist())
					sb.append("<ReadReply>" + submitReq.getReadReply() + "</ReadReply>");
				/*
				 * if(submitReq.isReplyChargingExist()) sb.append("<ReplyCharging>"+submitReq.getReplyCharging()+"</ReplyCharging>");
				 * if(submitReq.isReplyDeadlineExist()) sb.append("<Reply-Deadline>"+sdf.format(new
				 * Date( submitReq.getReplyDeadlineRelative()))+"+08:00"+"</Reply-Deadline>");
				 * if(submitReq.isReplyDeadlineAbsoluteExist()) sb.append("<Reply-Deadline>"+sdf.format(
				 * submitReq.getReplyDeadlineAbsolute())+"+08:00"+"</Reply-Deadline>");
				 * if(submitReq.isReplyChargingSizeExist()) sb.append("<ReplyChargingSize>"+submitReq.getReplyChargingSize()+"</ReplyChargingSize>");
				 */

				if (submitReq.isPriorityExist()) {
					// sb.append("<Priority>" + submitReq.getPriority() +
					// "</Priority>");
					if (submitReq.getPriority() == (byte) 0)
						sb.append("<Priority>" + "Low" + "</Priority>");
					else if (submitReq.getPriority() == (byte) 1)
						sb.append("<Priority>" + "Normal" + "</Priority>");
					else if (submitReq.getPriority() == (byte) 2)
						sb.append("<Priority>" + "High" + "</Priority>");
				}
				if (submitReq.isSubjectExist())
					sb.append("<Subject>" + submitReq.getSubject() + "</Subject>");
				if (submitReq.isChargedPartyExist()) {
					// sb.append("<ChargedParty>"+submitReq.getChargedParty()+"</ChargedParty>");
					if (submitReq.getChargedParty() == (byte) 0)
						sb.append("<ChargedParty>Sender</ChargedParty>");
					else if (submitReq.getChargedParty() == (byte) 1)
						sb.append("<ChargedParty>Recipient</ChargedParty>");
					else if (submitReq.getChargedParty() == (byte) 2)
						sb.append("<ChargedParty>Both</ChargedParty>");
					else if (submitReq.getChargedParty() == (byte) 3)
						sb.append("<ChargedParty>Neither</ChargedParty>");
					else if (submitReq.getChargedParty() == (byte) 4)
						sb.append("<ChargedParty>ThirdParty</ChargedParty>");
				}
				if (submitReq.isChargedPartyIDExist())
					sb.append("<ChargedPartyID>" + submitReq.getChargedPartyID() + "</ChargedPartyID>");
				if (submitReq.isDistributionIndicatorExist())
					sb.append("<DistributionIndicator>" + submitReq.getDistributionIndicator()
							+ "</DistributionIndicator>");
				if (submitReq.isContentExist()) {
					// begin add by hudm 2004-03-09
					/*
					 * if(submitReq.getContent().isContentIDExist()) sb.append("<Content
					 * href=\"cid:"+submitReq.getContent().getContentID()+"\"");
					 * if(submitReq.isAllowAdaptationsExist())
					 * sb.append(";allowAdaptions=\"True\"/>"); else
					 * sb.append("/>");
					 */
					// end add by hudm 2004-03-09*/
					// sb.append("</mm7:SubmitReq>");
					sb.append("</SubmitReq>");
					sb.append("</env:Body></env:Envelope>");
					sb.append("\r\n");
					sb.append("----NextPart_0_2817_24856\r\n");
					MMContent parentContent = submitReq.getContent();
					// sb.append("Content-Type:"+parentContent.getContentType().getPrimaryType()+"/"+
					// parentContent.getContentType().getSubType()+
					// ";boundary=\"SubPart_7452684322002_77645\""+"\r\n");
					if (parentContent.getContentType() != null) {
						String strSubType = "";
						String strtempID = "<START>";
						strSubType = parentContent.getContentType().getSubType();
						if (strSubType.equalsIgnoreCase("related")) {
							if (parentContent.isMultipart()) {
								List tempSub = new ArrayList();
								tempSub = parentContent.getSubContents();
								for (int x = 0; x < tempSub.size(); x++) {
									MMContent tempCon = (MMContent) tempSub.get(x);
									if (tempCon.getContentType().getSubType().equalsIgnoreCase("smil")) {
										if (tempCon.isContentIDExist())
											strtempID = tempCon.getContentID();
										else
											strtempID = "<START>";
										break;

⌨️ 快捷键说明

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