更新20141120:
我始終對修改生產上weblogic上的配置文件這一方法心存擔憂(生產上的服務器不允許隨便修改,可能會影響到其他應用),所以想使用代碼的方式解決此問題,在對方法一失敗原因進行了進一步查看,日志打出來的的異常信息為如下:
com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl cannot be cast to javax.net.ssl.HttpsURLConnection
在網上搜索之后,並經過自己的判斷,發現我在new URL時傳的是com.sun.net.ssl.internal.www.protocol.https.Handler這個handler,而報錯信息是javax.net.ssl這個包下面的,再看我的代碼:
package java.net.HttpURLConnection; httpURLConnection = (HttpURLConnection) this.url.openConnection();
這就說明了這兩個類不在一個包下面,仔細看了別人的回復,不難發現,這兩個類(HttpsURLConnectionOldImpl、HttpsURLConnection)屬於不同的包,看到這個貼子最下面(http://bbs.csdn.net/topics/380110416)有一個說明,Handler使用錯誤,我一看就知道這是問題的關鍵點,果斷修改前面方法一使用的handler: com.sun.net.ssl.internal.www.protocol.https.Handler,改為:sun.net.www.protocol.https.Handler,完整代碼如下:
this.url = new URL(null, url, new sun.net.www.protocol.https.Handler());
重新啟動后再次進行調試成功,自此證明,方法一也是有效的,不過對於使用別人的API jar包的不是很方便,我現在使用的辦法是將別人的代碼進行重寫,再調用自己寫的類解決問題,修改weblogic的配置文件生產上不好修改,只能用代碼實現了。
--------------------------------------分割線20141119------------------------------------------
Weblogic問題解決:
在進行調試時,本地(TOMCAT)開發完成,並本地測試通過,但是部署至Weblogic上時,出現以下異常信息:
weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection
在網上搜索之后,發現是由於在weblogic上使用HttpsURLConniection時,會默認使用weblogic自己的類weblogic.net.http.SOAPHttpsURLConnection,導致出現問題:
http://bbs.csdn.net/topics/380076374
http://luanxiyuan.iteye.com/blog/1808097
http://www.xuebuyuan.com/593657.html
按照上面的貼子找到解決辦法:
- 1. 按照網上的辦法,可以修改代碼解決問題,但是由於我們使用的是別人的jar包,不能修改代碼,:
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();
- 2. 配置weblogic,在startWeblogic.sh文件中添加參數:-DUseSunHttpHandler=true,我最終添加了一行:MEM_ARGS="${MEM_ARGS} -DUseSunHttpHandler=true"
以上兩個方法,方法一嘗試了之后,直接導致weblogic有異常但是沒有報錯信息,在開發、測試環境無法調查,debug也沒用;無奈只能選用第二種方法,配置參數后,成功配置,並測試成功;
總結:方法一我嘗試過幾種方法,均失敗,有用的還是只有第二種方法,如有其他可以使用的方法,歡迎大家推薦