📄 soapencoder.java
字号:
/**File Name:SOAPEncoder.java
* Company: 中国移动集团公司
* Date : 2004-1-8
* */
package com.cmcc.mm7.vasp.common;
import java.io.*;
import java.util.*;
import java.text.*;
import sun.misc.BASE64Encoder;
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.conf.*;
public class SOAPEncoder
{
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 不许为空!");
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 不许为空!");
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不许为空!");
if(submitReq.isVASIDExist())
sb.append("<VASID>"+submitReq.getVASID()+"</VASID>");
else
System.out.println("服务代码VASID不许为空!");
if(submitReq.isSenderAddressExist())
sb.append("<SenderAddress>"+submitReq.getSenderAddress()+"</SenderAddress>");
sb.append("</SenderIdentification>");
}
else
System.out.println("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中至少需要有一个不为空!");
if(submitReq.isServiceCodeExist())
sb.append("<ServiceCode>"+submitReq.getServiceCode()+"</ServiceCode>");
else
System.out.println("业务代码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;
}
}
}
sb.append("Content-Type:"+"multipart/related;"+
"start=\""+strtempID+"\";type=\"application/smil\""+
";boundary=\"SubPart_7452684322002_77645\""+"\r\n");
}
else
{
sb.append("Content-Type:" +
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -