-
1. 踩坑经历最近做了个需求,需要调用第三方接口获取数据,在联调时一直失败,代码抛出javax.net.ssl.SSLHandshakeException异常,具体错误信息如下所示:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target2.原因分析因为调用第三方接口的代码是复用项目中原有的工具类(基于httpclient封装),所以在确认完传参没问题后,第一时间排除了编码问题。然后开始怀疑第三方提供的接口地址(因为竟然是IP+端口访问),在和第三方确认没有域名访问后,在浏览器里输入第三方的接口地址,发现证书有问题:又使用Postman调用第三方接口,也是失败,提示自签名证书:通过以上分析,可以发现出现该问题的根本原因是Java客户端不信任目标服务器的SSL证书,比如这个第三方使用的自签名证书。3.解决方案解决方案一般有2种,第1种方案是将服务器证书导入Java信任库,第2种方案是绕过SSL验证,这里采用第2种方案。首先,新建HttpClient工具类:import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; public class HttpClientUtils { public static CloseableHttpClient createIgnoreCertClient() throws NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, new TrustManager[]{new X509TrustManager() { @Override public X509Certificate[] getAcceptedIssuers() { return null; } @Override public void checkClientTrusted(X509Certificate[] certs, String authType) { } @Override public void checkServerTrusted(X509Certificate[] certs, String authType) { } }}, new java.security.SecureRandom()); SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE); return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build(); } }然后将原来声明httpClient的代码改为如下所示:CloseableHttpClient httpClient = HttpClientUtils.createIgnoreCertClient();注意事项:确保项目中引入了httpclient依赖:<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency>转载自https://www.cnblogs.com/zwwhnly/p/18795523
-
这种情况是不是因为代码内部逻辑卡死,偶尔崩溃偶尔超时的原因呀?
-
在本地判题器跑没有问题,提交代码后就出现runtime_error问题,好难排bug
-
本地的三个样例都没问题
-
我的代码在控制台手打样例可以正常跑,但本地编译卡在预编译,连ok都出不来,甚至用样例代码跑了也是这个问题
-
建立websocket连接,进入到集群内部,通过下发自定义指令在集群内部执行
-
本地正常运行,提交后报错编译错误 compile_error
-
本地可以正常运行,提交系统后报编译错误,能否帮忙排查~
-
请问如何得知unexpected_elon出现的报错是内存超了还是程序超时了?
-
命令"SmartAssist: Java智能助手设置"导致错误 (command 'java-smart-assist.settings.open' not found)
-
本地跑过数据不知道几次了,限制内存也能跑过,但是交上去就会 runtime_error。这是 debug 大赛吗 ?
-
为什么本地的两个数据都可以跑过,但是一交上去就runtime_error?
-
在 Java 中,线程是程序执行的最小单元。Java 提供了多线程编程的支持,允许你同时运行多个线程,从而提高程序的并发性和效率。每个线程都有自己的执行路径,可以独立执行任务。Java 中创建线程有两种主要方式:继承 Thread 类:通过继承 Thread 类并重写 run() 方法来定义线程的执行逻辑。实现 Runnable 接口:通过实现 Runnable 接口并将其传递给 Thread 类的构造函数来创建线程。实践示例1. 继承 Thread 类java复制class MyThread extends Thread { @Override public void run() { // 线程执行的代码 for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " - " + i); } }}public class ThreadExample { public static void main(String[] args) { MyThread thread1 = new MyThread(); MyThread thread2 = new MyThread(); // 启动线程 thread1.start(); thread2.start(); }}解释:MyThread 类继承了 Thread 类,并重写了 run() 方法。在 main 方法中,创建了两个 MyThread 对象 thread1 和 thread2,并调用 start() 方法启动线程。start() 方法会调用 run() 方法,线程开始执行。2. 实现 Runnable 接口java复制class MyRunnable implements Runnable { @Override public void run() { // 线程执行的代码 for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " - " + i); } }}public class RunnableExample { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread1 = new Thread(myRunnable); Thread thread2 = new Thread(myRunnable); // 启动线程 thread1.start(); thread2.start(); }}解释:MyRunnable 类实现了 Runnable 接口,并实现了 run() 方法。在 main 方法中,创建了一个 MyRunnable 对象 myRunnable,然后将其传递给 Thread 类的构造函数,创建了两个线程 thread1 和 thread2。调用 start() 方法启动线程。线程的生命周期线程的生命周期包括以下几个状态:新建(New):线程对象被创建,但尚未启动。就绪(Runnable):线程已经启动,等待 CPU 调度执行。运行(Running):线程正在执行 run() 方法中的代码。阻塞(Blocked):线程因为某些原因(如等待资源)暂时停止执行。终止(Terminated):线程执行完毕或异常退出。线程的常用方法start():启动线程,使其进入就绪状态。run():线程执行的主体方法。sleep(long millis):使当前线程暂停执行指定的毫秒数。join():等待该线程终止。interrupt():中断线程。isAlive():检查线程是否处于活动状态。线程同步在多线程环境中,可能会出现多个线程同时访问共享资源的情况,导致数据不一致的问题。Java 提供了同步机制来解决这个问题,常用的同步方式有:synchronized 关键字:用于修饰方法或代码块,确保同一时间只有一个线程执行该代码。Lock 接口:提供了更灵活的锁机制。总结Java 线程是实现并发编程的基础。通过继承 Thread 类或实现 Runnable 接口,你可以创建并启动线程。理解线程的生命周期和同步机制对于编写高效、安全的多线程程序至关重要
-
在本地跑两个样例都能过不报错,但是提交上去就报错。
-
CodeArts IDE For Java 什么时候才能更新下一个版本呢?现在已经停留在2.3.0很久了,现在如果只运行一个工程的话问题不大,只不过单元测试那里有点问题。但是我们公司是那种一个总的模块,然后下面一堆子模块来一起开发的,然后这些模块的最上级都是同一个父工程的。但是因为每个人的负责的模块不同,像我是负责几个模块开发的。但是我们是没有最上级模块的代码权限的。如果我要用这个IDE来进行开发的话,那么我要开很多个窗口,然后同时如果我是有引用另外模块的api的话,那么我要将那个模块用maven进行打包,然后我当前模块也要重新install才能用到那个模块api里面的内容。这样的话会大大的降低开发的效率。这种情况有没有办法解决的?我试过将这些模块都拉到同一个窗口里面,但是这样的话他就无法正确的识别我的工程了。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签