openfire自定义发送消息

加入以下类:

这个是xml格式的,解析时可以将xml转成map,参数可自由定义

import org.jivesoftware.smack.packet.PacketExtension;


/**
 * 为Message扩展信息
 */
public class ChatInfo implements PacketExtension{
    
    //元素名称小写,便于xml转map时取值
    //聊天信息元素名称
    private static String elementName = "chatinfo";
    //病例id元素名称
    private static String caseIdElement = "caseid";
    //消息类型:1文字2语音3图片4视频5就医建议
    private static String zTypeElement = "ztype";
    //发送人身份:1医生2患者
    private static String identityElement = "identity";
    //长度
    private static String msglengthElement = "msglength";
    //主键
    private static String zidElement = "zid";
    
    //发送人id
    private static String senderIdElement = "senderid";
    
    //接收人id
    private static String sendeeIdElement = "sendeeid";
    
    //极光推送接收人
    private static String tagElement = "tag";
    
    //病例id元素值
    private String caseId;
    //元素值
    private String zType;
    //元素值
    private String identity;
    //长度
    private String msglength;
    //主键
    private String zid;
    
    private String senderid;
    
    private String sendeeid;
    
    private String tag;
    
    @Override
    public String getElementName() {
        return elementName;
    }
    
    /**
     * 返回扩展的xml字符串
     * 此字符串作为message元素的子元素
     */
    @Override
    public String toXML() {
        StringBuilder sb = new StringBuilder();
        
        sb.append("<");
        sb.append(elementName);
        sb.append(">");
        
            sb.append("<");
            sb.append(caseIdElement);
            sb.append(">");
            sb.append(caseId);
            sb.append("</");
            sb.append(caseIdElement);
            sb.append(">");
            
            sb.append("<");
            sb.append(zTypeElement);
            sb.append(">");
            sb.append(zType);
            sb.append("</");
            sb.append(zTypeElement);
            sb.append(">");
        
            sb.append("<");
            sb.append(identityElement);
            sb.append(">");
            sb.append(identity);
            sb.append("</");
            sb.append(identityElement);
            sb.append(">");
            
            sb.append("<");
            sb.append(msglengthElement);
            sb.append(">");
            sb.append(msglength);
            sb.append("</");
            sb.append(msglengthElement);
            sb.append(">");
            
            sb.append("<");
            sb.append(zidElement);
            sb.append(">");
            sb.append(zid);
            sb.append("</");
            sb.append(zidElement);
            sb.append(">");
            
            sb.append("<");
            sb.append(senderIdElement);
            sb.append(">");
            sb.append(senderid);
            sb.append("</");
            sb.append(senderIdElement);
            sb.append(">");
            
            sb.append("<");
            sb.append(sendeeIdElement);
            sb.append(">");
            sb.append(sendeeid);
            sb.append("</");
            sb.append(sendeeIdElement);
            sb.append(">");
            
            sb.append("<");
            sb.append(tagElement);
            sb.append(">");
            sb.append(tag);
            sb.append("</");
            sb.append(tagElement);
            sb.append(">");
            
        sb.append("</");
        sb.append(elementName);
        sb.append(">");
        
        return sb.toString();
    }

    public String getCaseId() {
        return caseId;
    }

    public void setCaseId(String caseId) {
        this.caseId = caseId;
    }

    public String getzType() {
        return zType;
    }

    public void setzType(String zType) {
        this.zType = zType;
    }

    public String getIdentity() {
        return identity;
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }

    @Override
    public String getNamespace() {
        return "";
    }

    public String getMsglength() {
        return msglength;
    }

    public void setMsglength(String msglength) {
        this.msglength = msglength;
    }

    public String getZid() {
        return zid;
    }

    public void setZid(String zid) {
        this.zid = zid;
    }

    public String getSenderid() {
        return senderid;
    }

    public void setSenderid(String senderid) {
        this.senderid = senderid;
    }

    public String getSendeeid() {
        return sendeeid;
    }

    public void setSendeeid(String sendeeid) {
        this.sendeeid = sendeeid;
    }

    public String getTag() {
        return tag;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

消息发送时将自定义的消息带上(示例用的是smack)

public static void SendMsg(String username, String pass, String content, String toUser, String type, String caseId, String identity, String filePath, String realPath
            , String senderId, String sendeeId
            ) throws XMPPException {
        Connection con = login(username, pass);
        Chat mychat = con.getChatManager()
                .createChat(toUser + "@" + "192.168.1.254", // 接收端的JID,JID是要加域的  zsmy-of-test
                new MessageListener() {
                    @Override
                    public void processMessage(Chat chat, Message message) {
                        String messageBody = message.getBody();
                        Constant.MY_LOG.debug("收到信息:" + messageBody + " " + message.getFrom());
                    }
                });

        Message msg = new Message();
        ChatInfo chatInfo = new ChatInfo();
        chatInfo.setCaseId(caseId);
        chatInfo.setIdentity(identity);
        chatInfo.setzType(type);
        chatInfo.setSenderid(senderId);
        chatInfo.setSendeeid(sendeeId);
        if ("3".equals(type)) {
            chatInfo.setMsglength("0");
            msg.setBody(filePath);
        } else {
            chatInfo.setMsglength(content.length() + "");
            msg.setBody(content);
            // mychat.sendMessage(content);
        }
        msg.addExtension(chatInfo); // 添加扩展内容
        mychat.sendMessage(msg);
        // con.disconnect(); // 断开连接
    }
原文地址:https://www.cnblogs.com/shihaiming/p/5981851.html