Java中httpclient.jar和httpcore.jar版本差异带来的异常_不同版本的httpcore 不同的类库_loongshawn的博客-程序员秘密

技术标签: JAVA  exception  java  

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50590660

前言说明:当前我的工程中使用的httpclient-4.3.6.jar和httpcore-4.3.3.jar版本的包。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.3.3</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.3.6</version>
</dependency>   

今天执行阿里云的OSS相关操作时,首先提示以下异常:

java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy

详细如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
    at com.aliyun.oss.OSSClient.<init>(OSSClient.java:246)
    at com.aliyun.oss.OSSClient.<init>(OSSClient.java:206)
    at com.autonavi.oss.client.DefaultOSSClient.<clinit>(DefaultOSSClient.java:12)
    at com.autonavi.oss.put.Upload.put(Upload.java:20)
    at com.autonavi.oss.put.Upload.main(Upload.java:58)
Caused by: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 5 more

从上面报错提示可以看出,是org/apache/http/ssl/TrustStrategy下面找不到TrustStrategy这个类,我查了下依赖中的httpclient-4.3.6.jar和httpcore-4.3.3.jar两个包,均没有这个类。
这里写图片描述

而4.4版本中有ssl路径:
这里写图片描述
及对应org/apache/http/ssl/TrustStrategy方法。
这里写图片描述
很明显是版本不对,应该换成新版本。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4</version>
</dependency> 

重新执行代码,上面异常已经消失,不过出现新异常:

java.lang.NoClassDefFoundError: org/apache/http/conn/ssl/NoopHostnameVerifier

异常详细:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/conn/ssl/NoopHostnameVerifier
    at com.aliyun.oss.common.comm.DefaultServiceClient.createHttpClientConnectionManager(DefaultServiceClient.java:230)
    at com.aliyun.oss.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:78)
    at com.aliyun.oss.OSSClient.<init>(OSSClient.java:246)
    at com.aliyun.oss.OSSClient.<init>(OSSClient.java:206)
    at com.autonavi.oss.client.DefaultOSSClient.<clinit>(DefaultOSSClient.java:12)
    at com.autonavi.oss.put.Upload.put(Upload.java:20)
    at com.autonavi.oss.put.Upload.main(Upload.java:58)
Caused by: java.lang.ClassNotFoundException: org.apache.http.conn.ssl.NoopHostnameVerifier
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 7 more

很明显是版本不对,是由于httpclient-4.3.6.jar缺少NoopHostnameVerifier方法:
这里写图片描述

而4.4版本中有这个方法:
这里写图片描述
应该换成新版本,即换成httpclient-4.4.jar

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.4</version>
</dependency>   

查看下jar包中相应路径存在上面那个类。

最后再次执行,执行成功,无异常!

所以,下次碰到以下两个异常时:
1、

java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy

2、

java.lang.NoClassDefFoundError: org/apache/http/conn/ssl/NoopHostnameVerifier

需要升级httpclient.jar和httpcore.jar两个包的版本,4.3的版本中不含有上述两个类,需要同时升级到4.4版本。

即替换为httpclient-4.4.jar和httpcore-4.4.jar

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/loongshawn/article/details/50590660

智能推荐

对象遍历的几种方法_weixin_33858485的博客-程序员秘密

1.js对象 用for in遍历 如:for(let item in st){ console.log(item) } // 返回的是键也是就是属性名。 如果要返回的是键值,则 for(let item in st ) { console.log(st[item]) } // 此时依次输出键值let persons = {  120: { name: 'bob', age:...

Podfile_小海呢的博客-程序员秘密

use_frameworks!platform :ios, '8.0'pod 'AFNetworking'pod 'SDWebImage'pod 'SVProgressHUD'pod 'SnapKit'pod 'FMDB'

HashMap线程安全吗?为什么不安全?怎么解决不安全?_hashmap安全吗_「已注销」的博客-程序员秘密

首先HashMap是线程不安全的。JDK1.7的时候采用头插法,多线程同时插入的时候,A线程在插入节点B,B线程也在插入,遇到容量不够开始扩容,重新hash,放置元素,采用头插法,后遍历到的B节点放入了头部,这样形成了环。JDK1.8采用尾插法,会造成两种情况两个线程同时插入只有一个成功插入,还有就是可能会造成两次resize(++size&gt;threshold) 。解决的方案:一、使用HashTable效率比较差。二、使用ConcurrentHashMap比较常用的。三、使用Collections.

基于深度优先搜索,判断一个无向图是否为一棵树_深度优先遍历判断图是不是树的代码怎么书写_华可乐的博客-程序员秘密

算法思想:map必须是无回路的连通图或者是n-1条边的连通图。采用深度优先搜索算法遍历途中可能访问到的顶点个数和边数,如果一次遍历能访问到n个顶点和n-1条边,则是一棵树。代码如下(以5*5的矩阵为例):#include&lt;iostream&gt;using namespace std;int map[5][5];int supMap[5][5] = { 0 };//辅助矩阵i...

IoT入口之争:创米在智能摄像机创造的2000万+背后的秘密_weixin_33695450的博客-程序员秘密

智能音箱大战余热尚在,智能摄像机的战场就已经开始排兵布阵,蠢蠢欲动。攻防之势,跃然纸面。 其实,摄像机产品由来已久,智能摄像机市场也走过了四个年头,但是由于前几年巨头厂商并没有真正发力,也没有IoT入口这个概念的加持,因而,专注做智能摄像机的企业一直都是在闷声发大财。 而随着IoT平台发展逐渐完善,IoT入口的概念逐渐被推到风口浪尖,再加上海康...

【今日CV 计算机视觉论文速览 第101期】Wed, 17 Apr 2019_hitrjj的博客-程序员秘密

第101期 视觉论文速览图像修复 超分辨 去噪 单点目标检测

随便推点

poj3468 A Simple Problem with Integers-线段树区间查询,区间修改_poj线段树_唐火的博客-程序员秘密

DescriptionYou have N integers, A1, A2, … , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is to ask for the sum of numbers in a given interval.InputThe

最小路劲覆盖 最小点覆盖 最大独立集_Cambridge的博客-程序员秘密

最小路劲覆盖一个不含圈的有向图G 中,G的一个路径覆盖是一个其结点不相交的路径集合P,图中的每一个结点仅包含于P中的某一条路径。路径可以从任意结点开始和结束,且长度也为任意值,包括0。在有向无环图中    最小路径覆盖数 = 顶点总数—最大匹配数POJ-1422-Air Raidhttp://poj.org/problem?id=1422#include#include

Java异常处理详解(全文干货,写得非常全,值得收藏)_MrYuShiwen的博客-程序员秘密

一.初始Java异常对异常的理解:异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生对异常事件可分为两类:Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError和OOM。一般不编写针对性 的代码进行处理。Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问试图读

MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询_z93f37fj的博客-程序员秘密

本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避短。声明:本人使用的数据库版本为MySql 5.1 一、基本原则:优化数据访问查询性能低下的最基本原因就是访问了太多数据,一些查询要不可避免地筛选大量的数据,大部分性能欠佳的查询都可以

关于Popupwindow在Activity加载中显示报错问题_android studio popupwindow 加载activity_Daisuki_ch的博客-程序员秘密

比如在跳转的时候要加载数据,加载数据的时候给个提示框,数据加载中...等等。开始我放在Activity的前3个生命周期里,每个里面都会报错,于是网上搜集了几个方法,基本都可以解决这种问题。1、使用handler去延迟显示这个popupwindow,代码如下new Handler().postDelayed(new Runnable() { @Override

尚硅谷谷粒学院SSO单点登录+整合JWT总结+微信登录(后端)_向天再借500年的博客-程序员秘密

这里写目录标题传统用户身份验证什么是单点登录单点登录三种常见方式session广播机制实现使用redis+cookie实现使用token实现JWTJWT的组成JWT头有效载荷签名哈希JWT的原则JWT的用法JWT问题和趋势JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。生成jwt引入依赖JWT工具类传统用户身份验证Internet服务无法与用户身份验证分开。一般过程如下:用户向服务器发送用户名和密码。验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会

推荐文章

热门文章

相关标签