Spring学习笔记(二十一):使用阿里云OSS的javaSDK时遇到的问题(附:测试代码)

原创 2016年08月31日 15:47:48
  • 2017-4-25更新:
  • 今天用OSS上传文件又遇到了问题
    • 问题描述:unknown host:jalon-test.oss-cn-beijing.aliyuncs.com/;以前都是好好的,今天却出错了;
    • 原因:在官网检查了好久,原来是https的缘故;因为oss在北京区域的请求头从http更新到了https,导致访问主机一直错误;
    • 解决办法:将OSSClient的endpoint配置从http://oss-cn-beijing.aliyuncs.com改成https://oss-cn-beijing.aliyuncs.com

之前的问题:

摘自:阿里云官网 https://help.aliyun.com/document_detail/32024.html
当时出现了如下的错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy
        at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268)
        at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193)
        at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:77)
    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)
        ... 3 more

原因是包依赖出现了问题,阿里云的oss SDK引用了apache httpclient 4.4.1,而我项目里也引入了,但是版本不同,所以才会出问题。可以在工程目录下运行“mvn dependency:tree”,就可以看到相互之间的依赖
这里写图片描述
下面是解决包依赖的两种方法:

  1. 使用统一版本。如果您的工程里使用与Apache httpclient
    4.4.1冲突的版本,请您也使用4.4.1版本。在pom.xml去掉其它版本的Apache httpclient依赖。如果您的工程使用了commons-httpclient也可能存在冲突,请去除commons-httpclient。
  2. 解除依赖冲突。如果您的工程依赖与多个第三方包,而第三方包又依赖不同版本的Apache
    httpclient,您的工程里会有依赖冲突,请使用exclusion解除。详细请参考maven guides

我的项目中用到了httpclient4.3.6,代码如下所示,只能用第一种方法,将版本提高为4.4.1;如果用第二种,将阿里云SDK中依赖的httpclient去掉,那么还是会有错,因为我项目中的httpclient版本低

<!-- Apache Http client -->
        <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>

        <dependency>  
            <groupId>org.apache.httpcomponents</groupId>  
            <artifactId>httpclient-cache</artifactId>  
            <version>4.3.6</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.httpcomponents</groupId>  
            <artifactId>httpmime</artifactId>  
            <version>4.3.6</version>  
        </dependency>
        <!-- Apache Http client END-->

下面是测试代码:

    public static void main(String[] args)
    {
        // endpoint以北京为例,其它region请按实际情况填写
        String endpoint = "http://oss-cn-beijing.aliyuncs.com";
        // accessKey请登录https://ak-console.aliyun.com/#/查看
        String accessKeyId = "*****************";
        String accessKeySecret = "********************";
        // 创建OSSClient实例
        OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);
        //获取项目的根路径:user.dir意思就是获取项目的根路径,不是说获取user.dir这个目录;但是到了Linux服务器上,获取到的是/java/apache-tomcat-8.0.24/bin/,不知道为啥
        String dir = System.getProperty("user.dir");
        System.out.println(dir);
        //上传文件
        client.putObject("jalon-test", "1.jpg", new File("E:\\1.jpg"));
        //下载文件
        client.getObject(new GetObjectRequest("jalon-test","1.jpg"),new File(dir+"\\1.jpg"));
    }

下面是运行结果:E:\SVN_WorkSpace\shoes_src,然后1.jpg已经成功上传到oss,且下载到项目根目录下

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java中httpclient.jar和httpcore.jar版本差异带来的异常

碰到以下两个异常时: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy、 java.lang.NoClassDef...
  • loongshawn
  • loongshawn
  • 2016年01月27日 00:31
  • 16462

java.lang.ClassNotFoundException: org.apache.http.util.Args

java.lang.ClassNotFoundException: org.apache.http.util.Args昨天在用HttpClient做接口调用时,发现请求没有响应,也没有任何提示信息,但...
  • Shan_mei
  • Shan_mei
  • 2016年10月09日 14:29
  • 2892

解决maven工程下java.lang.ClassNotFoundException: org.apache.http.ssl.SSLContexts问题

maven工程中,发现使用tomcat插件启动web工程时,控制台报如下错误: Caused by: org.springframework.beans.BeanInstantiationExcept...
  • farYang
  • farYang
  • 2016年11月14日 10:11
  • 10405

java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy

maven项目中启动web报:java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy 问题复现: 1.maven项目中引...
  • u014079773
  • u014079773
  • 2017年03月27日 17:14
  • 4099

Java.lang.NoClassDefFoundError:com/aliyuncs/exceptions/ClientException

前两天开通了阿里云的短信服务,发现单独能够运行;可是,添加到web工程中编译没有问题,到了运行的时候报错:Java.lang.NoClassDefFoundError:com/aliyuncs/exc...
  • qq_32431037
  • qq_32431037
  • 2017年08月11日 09:56
  • 1339

开发中碰到的问题:java.lang.NoClassDefFoundError: com.baidu.location.LocationClient的解决办法

java.lang.NoClassDefFoundError: com.baidu.location.LocationClient 这个问题困扰了我很久,今晚终于弄好了,解决办法就是在order a...
  • qq_24852599
  • qq_24852599
  • 2016年03月11日 15:32
  • 1762

关于java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream解决办法

在编写邮件发送相关程序时,会报错!主要原因是 javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的ma...
  • 5iasp
  • 5iasp
  • 2010年10月12日 13:07
  • 27298

阿里云OSS实例运行报错

在研究阿里云OSS的实例时编译没有报错,但运行时总是会报如下错误, Exception in thread "main" java.lang.NoClassDefFoundError: org/ap...
  • hiram
  • hiram
  • 2016年07月20日 16:44
  • 651

阿里云服务(一)——OSS

阿里电子商务迄今是中国最大的电商网站,各个厂商都在去模仿。就像google的大数据处理,hadoop的思想等等,只有做出了一些成绩,起了带头羊,那么将会是非常吃香的。从今天开始简单学习了解一下阿里的各...
  • liujiahan629629
  • liujiahan629629
  • 2015年04月26日 18:03
  • 41708

Maven依赖冲突之httpclient.jar包冲突异常分析

pom中指定httpclient-4.4.jar,但实际打包后加载的是httpclient-4.3.6.jar,后来发现是pom中配置的打包插件maven-assembly-plugin版本过低导致的...
  • loongshawn
  • loongshawn
  • 2016年03月08日 23:57
  • 14285
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring学习笔记(二十一):使用阿里云OSS的javaSDK时遇到的问题(附:测试代码)
举报原因:
原因补充:

(最多只允许输入30个字)