在部署微信公衆號項目時,在本地TOMCAT測試經過後部署到WEBLOGIC上。拋出了weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection這樣的錯誤。這段是第三方公司JAR包中代碼拋出的異常。溝通得知第三方公司jar包中存在相似以下的代碼:html
HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
這段代碼在TOMCAT下運行正常,可是在WEBLOGIC下url.openConnection()返回了SOAPHttpsURLConnection類型的對象,因此出現轉換異常的錯誤。java
注:SOAPHttpsURLConnection與HttpsURLConnection都是java.net.HttpURLConnection的子類。web
如上圖,在WEBLOGIC沒有對使用的SSL實現類進行配置的狀況下,在程序中若是正常使用java.net.URL的不帶 URLStreamHandler 參數的構造方法new 一個URL對象的話,url.openConnection()默認是返回SOAPHttpsURLConnection類型對象,若是咱們使用帶有URLStreamHandler參數的構造方法,以下:api
URL url = new URL(null,"https://www.etrade.com",new com.sun.net.ssl.internal.www.protocol.https.Handler()); // 指定了handler後openConnection()返回了HttpsURLConnection類型對象 HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
以上能夠在程序中解決返回的HttpURLConnection對象的具體類型。可是jar包是第三方提供的,咱們不能更改代碼,因此只能從Weblogic配置的層面上解決報錯的問題。微信
解決辦法:oracle
修改 startWblogic.sh 文件測試
找到 JAVA_OPTIONS="${JAVA_OPTIONS}」
JAVA_OPTIONS="${JAVA_OPTIONS} -DUseSunHttpHandler=true" 屏蔽weblogic自身的默認鏈接
千萬要注意 -DUseSunHttpHandler=true 是加在 JAVA_OPTION=""的裏面 !!!url
這個參數的目的就是告訴WebLogic使用Sun的HttpHandler而不要使用WebLogic本身的。這樣配置後使用url.openConnection()就會返回HttpsURLConnection類型對象了。.net