weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection

用支付宝的sdk第三方jar包alipay-sdk-java20161213173952.jar,测试当面付demo时,用tomcat启动没有问题,而在使用weblogic(我使用的是Oracle WebLogic Server 12c R2 (12.2.1.2)版本),报错结果如下:

Error 500--Internal Server Error

java.lang.ClassCastException: weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection
	at com.alipay.api.internal.util.WebUtils.getConnection(WebUtils.java:351)
	at com.alipay.api.internal.util.WebUtils.doPost(WebUtils.java:140)
	at com.alipay.api.internal.util.WebUtils.doPost(WebUtils.java:121)
	at com.alipay.api.DefaultAlipayClient.doPost(DefaultAlipayClient.java:479)
	at com.alipay.api.DefaultAlipayClient._execute(DefaultAlipayClient.java:412)
	at com.alipay.api.DefaultAlipayClient.execute(DefaultAlipayClient.java:123)
	at com.alipay.api.DefaultAlipayClient.execute(DefaultAlipayClient.java:110)
	at com.alipay.api.DefaultAlipayClient.execute(DefaultAlipayClient.java:104)
	at com.alipay.demo.trade.service.impl.AbsAlipayService.getResponse(AbsAlipayService.java:32)
	at com.alipay.demo.trade.service.impl.AbsAlipayTradeService.tradePrecreate(AbsAlipayTradeService.java:102)
	at com.alipay.demo.trade.service.impl.AlipayTradeServiceImpl.tradePrecreate(AlipayTradeServiceImpl.java:1)
	at jsp_servlet.__trade_precreate._jspService(__trade_precreate.java:189)
	at weblogic.servlet.jsp.JspBase.service(JspBase.java:35)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:286)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:260)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:247)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3679)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3649)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
	at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
	at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
	at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
	at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259)
	at weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1651)
	at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270)
	at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
	at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
	at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
	at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
	at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)

原因是weblogic默认是是返回SOAPHttpsURLConnection类型的对象,无法进行强转。

解决方法:在startWebLogic.cmd(windows系统)文件中添加

setJAVA_OPTIONS=%SAVE_JAVA_OPTIONS% -DUseSunHttpHandler=true,

即可

weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection