關於WebLogic下應用使用URL.openConnection獲取鏈接返回 HttpsURLConnection與SOAPHttpsURLConnection的問題

在部署微信公衆號項目時,在本地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

注:SOAPHttpsURLConnectionHttpsURLConnection都是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

相關文章
相關標籤/搜索