zoukankan      html  css  js  c++  java
  • Java微信开发_Exception_01_The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly referenced from required .class files

    一、源码:

    package com.souvc.weixin.util;
    
    import java.io.InputStream;
    import java.io.Writer;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    import com.souvc.weixin.message.resp.Article;
    import com.souvc.weixin.message.resp.ImageMessage;
    import com.souvc.weixin.message.resp.MusicMessage;
    import com.souvc.weixin.message.resp.NewsMessage;
    import com.souvc.weixin.message.resp.TextMessage;
    import com.souvc.weixin.message.resp.VideoMessage;
    import com.souvc.weixin.message.resp.VoiceMessage;
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.core.util.QuickWriter;
    import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
    import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
    import com.thoughtworks.xstream.io.xml.XppDriver;
    
    /**
    * 类名: MessageUtil </br>
    * 描述: 消息处理工具类</br>
    * 开发人员: souvc </br>
    * 创建时间:  2015-9-30 </br>
    * 发布版本:V1.0  </br>
     */
    public class MessageUtil {
        // 请求消息类型:文本
        public static final String REQ_MESSAGE_TYPE_TEXT = "text";
        // 请求消息类型:图片
        public static final String REQ_MESSAGE_TYPE_IMAGE = "image";
        // 请求消息类型:语音
        public static final String REQ_MESSAGE_TYPE_VOICE = "voice";
        // 请求消息类型:视频
        public static final String REQ_MESSAGE_TYPE_VIDEO = "video";
        // 请求消息类型:小视频
        public static final String REQ_MESSAGE_TYPE_SHORTVIDEO = "shortvideo";
        // 请求消息类型:地理位置
        public static final String REQ_MESSAGE_TYPE_LOCATION = "location";
        // 请求消息类型:链接
        public static final String REQ_MESSAGE_TYPE_LINK = "link";
    
        // 请求消息类型:事件推送
        public static final String REQ_MESSAGE_TYPE_EVENT = "event";
    
        // 事件类型:subscribe(订阅)
        public static final String EVENT_TYPE_SUBSCRIBE = "subscribe";
        // 事件类型:unsubscribe(取消订阅)
        public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe";
        // 事件类型:scan(用户已关注时的扫描带参数二维码)
        public static final String EVENT_TYPE_SCAN = "scan";
        // 事件类型:LOCATION(上报地理位置)
        public static final String EVENT_TYPE_LOCATION = "LOCATION";
        // 事件类型:CLICK(自定义菜单)
        public static final String EVENT_TYPE_CLICK = "CLICK";
    
        // 响应消息类型:文本
        public static final String RESP_MESSAGE_TYPE_TEXT = "text";
        // 响应消息类型:图片
        public static final String RESP_MESSAGE_TYPE_IMAGE = "image";
        // 响应消息类型:语音
        public static final String RESP_MESSAGE_TYPE_VOICE = "voice";
        // 响应消息类型:视频
        public static final String RESP_MESSAGE_TYPE_VIDEO = "video";
        // 响应消息类型:音乐
        public static final String RESP_MESSAGE_TYPE_MUSIC = "music";
        // 响应消息类型:图文
        public static final String RESP_MESSAGE_TYPE_NEWS = "news";
    
        /**
         * 解析微信发来的请求(XML)
         * 
         * @param request
         * @return Map<String, String>
         * @throws Exception
         */
        @SuppressWarnings("unchecked")
        public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {
            // 将解析结果存储在HashMap中
            Map<String, String> map = new HashMap<String, String>();
    
            // 从request中取得输入流
            InputStream inputStream = request.getInputStream();
            // 读取输入流
            SAXReader reader = new SAXReader();
            Document document = reader.read(inputStream);
            // 得到xml根元素
            Element root = document.getRootElement();
            // 得到根元素的所有子节点
            List<Element> elementList = root.elements();
    
            // 遍历所有子节点
            for (Element e : elementList)
                map.put(e.getName(), e.getText());
    
            // 释放资源
            inputStream.close();
            inputStream = null;
    
            return map;
        }
    
        /**
         * 扩展xstream使其支持CDATA
         */
        private static XStream xstream = new XStream(new XppDriver() {
            public HierarchicalStreamWriter createWriter(Writer out) {
                return new PrettyPrintWriter(out) {
                    // 对所有xml节点的转换都增加CDATA标记
                    boolean cdata = true;
    
                    @SuppressWarnings("unchecked")
                    public void startNode(String name, Class clazz) {
                        super.startNode(name, clazz);
                    }
    
                    protected void writeText(QuickWriter writer, String text) {
                        if (cdata) {
                            writer.write("<![CDATA[");
                            writer.write(text);
                            writer.write("]]>");
                        } else {
                            writer.write(text);
                        }
                    }
                };
            }
        });
    
        /**
         * 文本消息对象转换成xml
         * 
         * @param textMessage 文本消息对象
         * @return xml
         */
        public static String messageToXml(TextMessage textMessage) {
            xstream.alias("xml", textMessage.getClass());
            return xstream.toXML(textMessage);
        }
    
        /**
         * 图片消息对象转换成xml
         * 
         * @param imageMessage 图片消息对象
         * @return xml
         */
        public static String messageToXml(ImageMessage imageMessage) {
            xstream.alias("xml", imageMessage.getClass());
            return xstream.toXML(imageMessage);
        }
    
        /**
         * 语音消息对象转换成xml
         * 
         * @param voiceMessage 语音消息对象
         * @return xml
         */
        public static String messageToXml(VoiceMessage voiceMessage) {
            xstream.alias("xml", voiceMessage.getClass());
            return xstream.toXML(voiceMessage);
        }
    
        /**
         * 视频消息对象转换成xml
         * 
         * @param videoMessage 视频消息对象
         * @return xml
         */
        public static String messageToXml(VideoMessage videoMessage) {
            xstream.alias("xml", videoMessage.getClass());
            return xstream.toXML(videoMessage);
        }
    
        /**
         * 音乐消息对象转换成xml
         * 
         * @param musicMessage 音乐消息对象
         * @return xml
         */
        public static String messageToXml(MusicMessage musicMessage) {
            xstream.alias("xml", musicMessage.getClass());
            return xstream.toXML(musicMessage);
        }
    
        /**
         * 图文消息对象转换成xml
         * 
         * @param newsMessage 图文消息对象
         * @return xml
         */
        public static String messageToXml(NewsMessage newsMessage) {
            xstream.alias("xml", newsMessage.getClass());
            xstream.alias("item", new Article().getClass());
            return xstream.toXML(newsMessage);
        }
    }
    View Code

    二、异常

     

    这个异常是在做微信开发时出现的,在引入了XStream的jar包之后,还是出现了如下错误信息:

    1.鼠标移到带红叉的黄灯上时,

    Multiple markers at this line
        - The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly referenced from 
         required .class files
        - The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly referenced from 
         required .class files

    2.当鼠标移到第一行时,

    The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly referenced from required .class files

    三、原因

    The type org.xmlpull.v1.XmlPullParser cannot be resolved.告诉我们,是因为xmlpull的问题。

    原因在于,XStream只是一个jar文件,但是它里面会依赖一个jar包,依赖的jar包是:xmlpull_1_0_5.jar、只要把这个jar包引入之后,问题即可解决

  • 相关阅读:
    jQuery 动画之 添加商品到购物车
    <% %> 、 <%= %> 、<%# %> 的区别
    WebFrom模拟MVC
    MVC 基础
    LinQ to SQL 存储过程
    Leetcode练习(Python):数组类:第26题:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
    Leetcode练习(Python):数组类:第18题:给定一个包含&#160;n 个整数的数组&#160;nums&#160;和一个目标值&#160;target,判断&#160;nums&#160;中是否存在四个元素 a,b,c&#160;和 d&#160;,
    Leetcode练习(Python):数组类:第16题:给定一个包括&#160;n 个整数的数组&#160;nums&#160;和 一个目标值&#160;target。找出&#160;nums&#160;中的三个整数,使得它们的和与&#160;target&#160;最接近。返回这三个数的和。假定每组输入只存在唯一答案。
    Leetcode练习(Python):数组类:第15题:给你一个包含 n 个整数的数组&#160;nums,判断&#160;nums&#160;中是否存在三个元素 a,b,c ,使得&#160;a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。
    Leetcode练习(Python):数组类:第11题:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点&#160;(i,&#160;ai) 。在坐标内画 n 条垂直线,垂直线 i&#160;的两个端点分别为&#160;(i,&#160;ai) 和 (i, 0)。找出其中的两条线,使得它们与&#160;x&#160;轴共同构成的容器可以容纳最多的水。
  • 原文地址:https://www.cnblogs.com/shirui/p/7300910.html
Copyright © 2011-2022 走看看