换个新的思路 代替解压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属性并不可以被子类所调用,因此有些关键信息需要自己去补齐。

结束。

时间: 2024-10-31 21:37:23

换个新的思路 代替解压jar包 例证:wechat4j 框架中的templateMsg类的相关文章

[Java] Java 打包成jar包 和 解压jar包

解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ... 选项包括:     -c  创建新的归档文件     -t  列出归档目录     -x  解压缩已归档的指定(或所有)文件     -u  更新现有的归档文件     -v  在标准输出中生成详细输

Tomcat 何时解压war包

将war包拷贝到tomcat ?webapps目录下时,如果不存在同名工程,则启动tomcat时会解压war包,从而生成一同名工程. ? ? 然而,如果webapps下已经存在与war包同名的工程目录,则即使重启tomcat,也不会重新解压此war包,也就是说,运行的仍是之前同名工程目录下的代码,而不是war包中的新代码. ? ? 基于这种现状,采用了以下方式: copy target\*.war D:\java_tools\tomcat6\webapps cd D:\java_tools\to

linux解压war包的命令

网上很多人说用jar包解压,但jar命令解压时不能指定目录,推荐使用unzip解压war包. unzip -d 指定目录 [[email protected] upload]# unzip -oq common.war -d common 命令名: unzip 功 能说明:解压缩zip文 件 语 法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密 码>][.zip文 件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]

redhat下安装mysql 5.6.20,解压zip包,查看已经安装过的mysql,卸载rpm安装包,安装mysql服务器端和客户端,修改mysql用户名,登陆mysql,启动关闭mysql

 1 将相关的mysql rpm包上传到redhat上 2  我的电脑是Redhat 6.*版本,所以这里使用上面一个 3  解压zip包 4  安装以下几个rpm MySQL-client-advanced-5.6.20-1.el6.x86_64.rpm MySQL-server-advanced-5.6.20-1.el6.x86_64.rpm 5  查看已经安装过的mysql rpm –aq | grep mysql 结果: mysql-libs-5.1.66-2.el6_3.x86_6

工具类-解压zip包和压缩照片

    由于目前系统在服务器上的资料占用空间太大.查了原因之后发现时因为照片没有经过压缩.但是所有照片都在zip包里,比较犯愁.于是写了如下的工具类.主要实现的功能是:扫描一个文件夹下的所有zip包,然后把zip包进行解压.拿到所有的照片.如果照片大于300KB就进行等比例压缩.压缩之后重新打包成zip包.替换掉原来的zip包.     并且可以可有选择是否等比压缩,压缩比例等.代码如下: filetest类: package daoimpl; import java.io.BufferedIn

如何解压RPM包

有时我们需要RPM包中的某个文件,如何解压RPM包呢? RPM包括是使用cpio格式打包的,因此可以先转成cpio然后解压,如下所示: rpm2cpio xxx.rpm | cpio -div 例如: [[email protected] tmp]# rpm2cpio rpm-4.8.0-32.el6.x86_64.rpm |cpio -div./bin/rpm./etc/rpm./usr/bin/rpm2cpio./usr/bin/rpmdb./usr/bin/rpmquery./usr/bi

java 解压 zip 包并删除

需求是这样的,  在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip 包,以及 解压后的文件. 之前在网上找的解压的文件的代码,都存在同一个问题,就是解压之后,无法删除 zip 包.查百度说是 资源占用,可是我已经把所有的流都关闭了哇. 我把解压和删除分成两部分用 jUnit  测试:   第一次测试解压,并不删除包:第二次只删除包.我发现,解压方法和删除方法在同一个

linux 解压xz包

1.下载xz包 http://tukaani.org/xz/xz-4.999.9beta.tar.bz2 2.解压安装包 $tar -jxvf xz-4.999.9beta.tar.bz2 3.配置&安装 $./configure --prefix=/opt/gnu/xz $make $sudo make install $ln -s /opt/gnu/xz/bin/xz /bin/xz 4.解压xz包 $xz -d ***.tar.xz 5.解压tar包 $tar -xvf  ***.tar

java,压缩jar,查看jar,解压jar

1.压缩jar 新建文件Mymoon.mf. 内容: Manifest-Version: 1.0Main-Class: TestCreate-By: 1.4(Sun Microsystems Inc.) 命令行在输入:jar cfm Test.jar Mymoon.mf A.java B.java. 2.查看jar 命令行在输入:jar tf Test.jar. 3.解压jar 命令行在输入:jar xf Test.jar.