package weixin.popular.bean.xmlmessage; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.UUID; import com.qq.weixin.mp.aes.AesException; import com.qq.weixin.mp.aes.WXBizMsgCrypt; import weixin.popular.bean.message.message.Message; public abstract class XMLMessage { protected String toUserName; protected String fromUserName; protected String msgType; protected XMLMessage(String toUserName, String fromUserName, String msgType) { super(); this.toUserName = toUserName; this.fromUserName = fromUserName; this.msgType = msgType; } /** * 子类自定义XML * @return XML */ public abstract String subXML(); /** * 转换为 Message 对象 * @return Message */ public abstract Message convert(); public String toXML(){ StringBuilder sb = new StringBuilder(); sb.append("<xml>"); sb.append("<ToUserName><![CDATA["+toUserName+"]]></ToUserName>"); sb.append("<FromUserName><![CDATA["+fromUserName+"]]></FromUserName>"); sb.append("<CreateTime>"+System.currentTimeMillis()/1000+"</CreateTime>"); sb.append("<MsgType><![CDATA["+msgType+"]]></MsgType>"); sb.append(subXML()); sb.append("</xml>"); return sb.toString(); } public boolean outputStreamWrite(OutputStream outputStream){ try { outputStream.write(toXML().getBytes("utf-8")); outputStream.flush(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } return true; } public boolean outputStreamWrite(OutputStream outputStream,WXBizMsgCrypt bizMsgCrypt){ if(bizMsgCrypt != null){ try { String outputStr = bizMsgCrypt.encryptMsg(toXML(), System.currentTimeMillis()+"",UUID.randomUUID().toString()); outputStream.write(outputStr.getBytes("utf-8")); outputStream.flush(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } catch (AesException e) { e.printStackTrace(); return false; } return true; }else{ return outputStreamWrite(outputStream); } } public String getToUserName() { return toUserName; } public String getFromUserName() { return fromUserName; } public String getMsgType() { return msgType; } }