换个新的思路 代替解压jar包 例证:wechat4j 框架中的templateMsg类
很多朋友在写java的程序的时候都喜欢用第三方的jar包和框架,有可能遇到jar包中的内容已经跟不上官方开发者文档的更新,导致部分内容出错了,这个时候可能就要放弃这个jar的使用,但是这个jar中的其他的东西都很好,这个时候我们应该怎么办呢。
首先,肯定是利用jd_gui.exe去解压jar包,然后修改源文件,再重新编译。这个方法比较率直。听起来思路不错,但是中途会遇到很多问题,比如修改完源文件之后,再编译的过程中,有包的名字和结构的问题出现,类似不再复述。
其次有一个方案是拷贝源码使用,并修改,这种方法有个缺点,就是当框架其他东西都很完美的时候,如果用源码,会显得结构复杂,而且一旦这个类使用到了该jar中的其他类的东西,那就需要把所有的src都拷贝出来。
所以,我们选择另外一个方式去更新jar包中的内容——继承。通过继承并修改有问题的类去解决问题。举个例子,我正在用wechat4j中的模板消息的类和函数去解决问题,但是这个框架中的关于模板消息的属性有一个topcolor,而最新版的微信开发者文档中,topcolor这个属性已经没有了,加进去之后,构造的json字符串会出错,导致解析失败,通过源码分析,我们知道关键的问题在于topcolor这个属性在构造字符串的时候被写入,所以我们继承TemplateMsg这个类
package service; import org.apache.log4j.Logger;
import org.sword.lang.HttpUtils;
import org.sword.wechat4j.message.TemplateMsg;
import org.sword.wechat4j.message.template.TemplateMsgBody;
import org.sword.wechat4j.message.template.TemplateMsgData;
import org.sword.wechat4j.token.TokenProxy; import com.alibaba.fastjson.JSONObject; public class NewTemplateMsg extends TemplateMsg {
private static Logger logger = Logger.getLogger(TemplateMsg.class);
private String accessToken;
public NewTemplateMsg(){
accessToken=TokenProxy.accessToken();
}
public String send(TemplateMsgBody postData)
{
logger.info("send template message");
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + this.accessToken;
JSONObject json = new JSONObject();
json.put("touser", postData.getTouser());
json.put("template_id", postData.getTemplateId());
json.put("url", postData.getUrl());
JSONObject jsonData = new JSONObject();
for (TemplateMsgData data : postData.getData()) {
JSONObject keynote = new JSONObject();
keynote.put("value", data.getValue());
keynote.put("color", data.getColor());
jsonData.put(data.getName(), keynote);
}
json.put("data", jsonData);
String data = json.toJSONString();
String result = HttpUtils.post(url, data);
logger.info("post result:" + result);
JSONObject resultJson = JSONObject.parseObject(result);
if (resultJson.getString("errcode").equals("0")) {
return resultJson.getString("msgid");
}
logger.error("send template message error:" + resultJson.getString("errmsg"));
return null;
}
}
重写这个TempleMsg的函数,去掉json.put("topcolor",postData.getTopcolor()),上面是已经修改完的代码,然后用这个新的类去代替旧的类去使用,
需要强调的一点,父类中的private属性并不可以被子类所调用,因此有些关键信息需要自己去补齐。
结束。
换个新的思路 代替解压jar包 例证:wechat4j 框架中的templateMsg类的更多相关文章
- [Java] Java 打包成jar包 和 解压jar包
解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] ...
- jar 压缩 解压 war包
Win+R 输入cmd进入命令行,进入到源码所在目录.所用工具,jdk自带的jar.exe 打包命令:jar -cvf xxx.war * 解包命令: jar -xvf xxx.war * 参数 说明 ...
- linux解压war包的命令
网上很多人说用jar包解压,但jar命令解压时不能指定目录,推荐使用unzip解压war包. 一.命令名: unzip 功 能说明:解压缩zip文 件 语 法:unzip [-cflptuvz][-a ...
- redhat下安装mysql 5.6.20,解压zip包,查看已经安装过的mysql,卸载rpm安装包,安装mysqlserver端和client,改动mysqlusername,登陆mysql,启动关闭mysql
1 将相关的mysql rpm包上传到redhat上 2 我的电脑是Redhat 6.*版本号.所以这里使用上面一个 3 解压zip包 4 安装下面几个rpm MySQL-client-a ...
- tar 只解压tar包中某个文件
sh-4.1# ls test.tar sh-4.1# tar -tf test.tar ./ecs20161207.png ./ecs.png ./ecs.xml ./rds.png ./Scree ...
- linux 解压xz包
1.下载xz包 http://tukaani.org/xz/xz-4.999.9beta.tar.bz2 2.解压安装包 $tar -jxvf xz-4.999.9beta.tar.bz2 3 ...
- tomcat解压war包的一点例外
我在项目的开发过程中,发现Tomcat解压war 的一点例外. 现象如下: 使用ANT工具把web应用程序打包为war文件.然后把war文件放到tomcat的webapps,让tomca ...
- Unix系统解压tar包时出现@LongLink错误
Unix系统上使用tar命令解压tar包后,多了一个@LongLink的文件,并且原来的tar包解压后不完整.网上查了下,原因是AIX系统上tar命令自身的一个缺陷.解决办法:把该tar包上传到lin ...
- java 解压 zip 包并删除
需求是这样的, 在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip ...
随机推荐
- Appium环境搭建
早就想学习移动端的自动化测试:今天看了些资料@虫师,整理下环境搭建流程:标"1"为最佳流程: 文字版的流程可以参见虫师的博客:
- GPS部标平台的架构设计(九)-GPS监控客户端设计
交通部的部标过检,所有的测试都是从客户端发起的,也是在客户端体现的,在客户端承载了部标标准所要求的所有的功能,是整个部标平台当中工作量最大的部分,也是最繁琐的部分. 客户端设计面临两个问题: 1.基于 ...
- C#并行编程之数据并行
所谓的数据并行的条件是: 1.拥有大量的数据. 2.对数据的逻辑操作都是一致的. 3.数据之间没有顺序依赖. 运行并行编程可以充分的利用现在多核计算机的优势.记录代码如下: public class ...
- [pyqt4]mark
sip SIP must be installed before building and using PyQt4 必须安装sip首先 https://riverbankcomputing.com/s ...
- 论AVL树与红黑树
首先讲解一下AVL树: 例如,我们要输入这样一串数字,10,9,8,7,15,20这样一串数字来建立AVL树 1,首先输入10,得到一个根结点10 2,然后输入9, 得到10这个根结点一个左孩子结点9 ...
- 基于webpack使用ES6新特性(转载)
本文转载自: http://www.tuicool.com/articles/vye2ea6
- paper 123: SVM如何避免过拟合
过拟合(Overfitting)表现为在训练数据上模型的预测很准,在未知数据上预测很差.过拟合主要是因为训练数据中的异常点,这些点严重偏离正常位置.我们知道,决定SVM最优分类超平面的恰恰是那些占少数 ...
- mbed学习之Digital IO (一)
mbed的IO操作非常灵活,常见的关于Digital IO操作整理如下表 ,其中蓝色字体是构造函数,绿色字体的是操作符重载,使用时只要创建对象,就可以调用对应的方法来操作,并且每种都提供了操作符重载, ...
- Node.js中的Session,不要觉得简单哦。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .学习网站上有对应 ...
- [译]Dynamics AX 2012 R2 BI系列-规划分析的注意事项
https://msdn.microsoft.com/en-us/library/gg731898.aspx 在开始实施AX的分析特性前,有很多事情要考虑.本文描述了你必须考虑的事情,和在 ...