WSO2 EI 6.6.0调用HTTPS接口时遇NullPointerException报错求助
解决WSO2 EI 6.6.0中PassThroughHttpSSLSender的NullPointerException问题
问题场景
使用WSO2 EI 6.6.0的Call Mediator调用HTTPS后端接口时,触发以下SSL相关空指针异常:
{org.apache.synapse.transport.passthru.PassThroughHttpSSLSender} - System may be unstable: HTTPS ConnectingIOReactor encountered a runtime exception : null java.lang.NullPointerException at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:193) at org.apache.synapse.transport.http.conn.ClientSSLSetupHandler$1.verify(ClientSSLSetupHandler.java:82) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:159) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:147) at org.apache.synapse.transport.http.conn.ClientSSLSetupHandler.verify(ClientSSLSetupHandler.java:181) at org.apache.http.nio.reactor.ssl.SSLIOSession.doHandshake(SSLIOSession.java:313) ...
调用逻辑配置:
<call> <endpoint name="GETToken"> <address uri="api.backend"/> </endpoint> </call>
已配置代理(Axis2.xml中注释了代理参数,同时在integrator.sh中添加了JVM级代理参数)。
解决方案
1. 补全Axis2.xml中不完整的SSL配置
你的axis2.xml里PassThroughHttpSSLSender的keystore参数未闭合,会导致SSL上下文初始化失败触发NPE,需补全完整配置:
<transportSender name="https" class="org.apache.synapse.transport.passthru.PassThroughHttpSSLSender"> <parameter name="non-blocking" locked="false">true</parameter> <!-- 若启用Axis2代理则取消以下注释 --> <!-- <parameter name="http.proxyHost" locked="false">proxy.com</parameter> <parameter name="http.proxyPort" locked="false">8080</parameter> --> <parameter name="http.nonProxyHosts" locked="false">.*.domain.com|localhost|10.*.*.*</parameter> <parameter name="keystore" locked="false"> <KeyStore> <Location>${carbon.home}/repository/resources/security/client-truststore.jks</Location> <Type>JKS</Type> <Password>wso2carbon</Password> <KeyPassword>wso2carbon</KeyPassword> </KeyStore> </parameter> </transportSender>
2. 统一代理配置,避免冲突
同时在Axis2.xml和JVM参数中配置代理会导致逻辑冲突,二选一即可:
- 选择Axis2.xml配置代理:取消
axis2.xml中http/https transport sender的代理参数注释,删除integrator.sh中的JVM代理参数。 - 选择JVM参数配置代理:保留
integrator.sh的代理参数,删除Axis2.xml中所有代理相关配置,确保http.nonProxyHosts格式与环境匹配(Linux用|分隔,Windows用;)。
3. 确保后端证书被信任
NPE发生在证书验证环节,需将后端服务的SSL证书导入WSO2 EI的客户端信任库:
keytool -importcert -alias backend-api -file /path/to/backend-cert.crt -keystore ${carbon.home}/repository/resources/security/client-truststore.jks -storepass wso2carbon
4. 修正Endpoint URI格式
确保Endpoint使用完整的HTTPS协议前缀:
<address uri="https://api.backend"/>
5. 启用SSL调试日志排查
添加JVM参数启用SSL握手调试日志,定位具体问题:
-Djavax.net.debug=ssl:handshake:verbose
重启EI后查看日志,确认证书链、代理握手是否正常。
内容的提问来源于stack exchange,提问作者Aprendiendo Siempre
相关产品推荐
相关产品推荐

