文档章节

解析微信公众号发送到服务器的xml消息工具类

Zero零_度
 Zero零_度
发布于 2016/04/07 14:41
字数 618
阅读 609
收藏 3

消息格式:

<xml>
    <ToUserName><![CDATA[gh_9874da07858e]]></ToUserName>
    <FromUserName><![CDATA[oQuVZxDRTVOMgECs4xdrhci-JZgI]]></FromUserName>
    <CreateTime>1460011109</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[你好]]></Content>
    <MsgId>6270699965354102946</MsgId>
</xml>

实体类:

package com.sniper.weixin.model;

public class ReceiveXmlModel {
    
    private String ToUserName="";  
    private String FromUserName="";  
    private String CreateTime="";  
    private String MsgType="";  
    private String MsgId="";  
    private String Event="";  
    private String EventKey="";  
    private String Ticket="";  
    private String Latitude="";  
    private String Longitude="";  
    private String Precision="";  
    private String PicUrl="";  
    private String MediaId="";  
    private String Title="";  
    private String Description="";  
    private String Url="";  
    private String Location_X="";  
    private String Location_Y="";  
    private String Scale="";  
    private String Label="";  
    private String Content="";  
    private String Format="";  
    private String Recognition="";
    
    public String getToUserName() {
        return ToUserName;
    }
    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }
    public String getFromUserName() {
        return FromUserName;
    }
    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }
    public String getCreateTime() {
        return CreateTime;
    }
    public void setCreateTime(String createTime) {
        CreateTime = createTime;
    }
    public String getMsgType() {
        return MsgType;
    }
    public void setMsgType(String msgType) {
        MsgType = msgType;
    }
    public String getMsgId() {
        return MsgId;
    }
    public void setMsgId(String msgId) {
        MsgId = msgId;
    }
    public String getEvent() {
        return Event;
    }
    public void setEvent(String event) {
        Event = event;
    }
    public String getEventKey() {
        return EventKey;
    }
    public void setEventKey(String eventKey) {
        EventKey = eventKey;
    }
    public String getTicket() {
        return Ticket;
    }
    public void setTicket(String ticket) {
        Ticket = ticket;
    }
    public String getLatitude() {
        return Latitude;
    }
    public void setLatitude(String latitude) {
        Latitude = latitude;
    }
    public String getLongitude() {
        return Longitude;
    }
    public void setLongitude(String longitude) {
        Longitude = longitude;
    }
    public String getPrecision() {
        return Precision;
    }
    public void setPrecision(String precision) {
        Precision = precision;
    }
    public String getPicUrl() {
        return PicUrl;
    }
    public void setPicUrl(String picUrl) {
        PicUrl = picUrl;
    }
    public String getMediaId() {
        return MediaId;
    }
    public void setMediaId(String mediaId) {
        MediaId = mediaId;
    }
    public String getTitle() {
        return Title;
    }
    public void setTitle(String title) {
        Title = title;
    }
    public String getDescription() {
        return Description;
    }
    public void setDescription(String description) {
        Description = description;
    }
    public String getUrl() {
        return Url;
    }
    public void setUrl(String url) {
        Url = url;
    }
    public String getLocation_X() {
        return Location_X;
    }
    public void setLocation_X(String location_X) {
        Location_X = location_X;
    }
    public String getLocation_Y() {
        return Location_Y;
    }
    public void setLocation_Y(String location_Y) {
        Location_Y = location_Y;
    }
    public String getScale() {
        return Scale;
    }
    public void setScale(String scale) {
        Scale = scale;
    }
    public String getLabel() {
        return Label;
    }
    public void setLabel(String label) {
        Label = label;
    }
    public String getContent() {
        return Content;
    }
    public void setContent(String content) {
        Content = content;
    }
    public String getFormat() {
        return Format;
    }
    public void setFormat(String format) {
        Format = format;
    }
    public String getRecognition() {
        return Recognition;
    }
    public void setRecognition(String recognition) {
        Recognition = recognition;
    } 
    
}

解析代码,用到泛型,节省代码量:

package com.sniper.weixin.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.sniper.weixin.model.ReceiveXmlModel;

public class ReceiveXmlProcess {
    /** 
     * 解析微信xml消息 
     * @param strXml 
     * @return 
     */ 
    public static ReceiveXmlModel getMsgEntity(String strXml) {  
        ReceiveXmlModel msg = null;  
        try {  
            if (strXml.length() <= 0 || strXml == null)  
                return null;  
            
            // 将字符串转化为XML文档对象  
            Document document = DocumentHelper.parseText(strXml);  
            // 获得文档的根节点  
            Element root = document.getRootElement();  
            // 遍历根节点下所有子节点  
            Iterator<?> iter = root.elementIterator();  

            // 遍历所有结点  
            msg = new ReceiveXmlModel();  
            //利用反射机制,调用set方法  
            //获取该实体的元类型  
            Class<?> c = Class.forName("com.sniper.weixin.model.ReceiveXmlModel");  
            msg = (ReceiveXmlModel)c.newInstance();//创建这个实体的对象  
            
            while(iter.hasNext()){  
                Element ele = (Element)iter.next();  
                //获取set方法中的参数字段(实体类的属性)  
                Field field = c.getDeclaredField(ele.getName());  
                //获取set方法,field.getType())获取它的参数数据类型  
                Method method = c.getDeclaredMethod("set"+ele.getName(), field.getType());  
                //调用set方法  
                method.invoke(msg, ele.getText());  
            }  
        } catch (Exception e) {  
            System.out.println("xml 格式异常: "+ strXml);  
            e.printStackTrace();  
        }  
        return msg;  
    }  

}


© 著作权归作者所有

共有 人打赏支持
Zero零_度
粉丝 69
博文 1246
码字总数 252959
作品 0
程序员
Java微信公众平台开发_03_消息管理之被动回复消息

GitHub源码:https://github.com/shirayner/weixin_gz 一、本节要点 1.回调url 上一节,我们启用服务器配置的时候,填写了一个服务器地址(url),如下图,这个url就是回调url,是开发者用来...

rayner
2017/11/13
0
0
微信公众号开发者模式介绍及接入

Java公众号开发环境搭建 需要准备的东西: 一个微信公众号,参考:微信公众号申请及介绍 内网穿透工具,参考:使用natapp开启内网穿透之旅 数据交互 编辑模式和开发模式的关系: 编辑模式和开...

ZeroOne01
06/24
0
0
微信公众帐号开发教程第4篇-消息及消息处理工具的封装

工欲善其事必先利其器!本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用。这里需要明确的是消息其实是由用户发给你的公众帐号的,消息先被微信平...

bliver
2013/11/29
0
2
手把手教你入门微信公众号开发

缘起 近日腾讯发布2017年中报,报告中指出,腾讯二季度实现营业收入566.06亿元,经营盈利、期内盈利分别达到225.6亿元和182.54亿元。按照当前利润与员工数估算,腾讯员工的平均年薪达到80万....

郗南枫
2017/08/20
0
0
基于Django的微信公众号开发之实现消息的接收与发送

基于Django的微信公众号开发之实现消息的接收与发送 准备工作 在正式开始之前,需要做一些准备: a: 安装好wechat_sdk; b: 成功通过了微信公众号的开发者认证; c: 新建一个应用(不是必须的), ...

Django
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部