web-dev-qa-db-ja.com

weblogic.net.http.SOAPHttpsURLConnectionをjavax.net.ssl.HttpsURLConnectionにキャストできません

Javax.net.ssl.HttpsURLConnectionを使用してURLに接続しようとすると、「Java.lang.ClassCastException」が発生します。

Weblogic Server 10.3.4を使用しています。

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;



import Java.security.cert.X509Certificate;


import Java.io.BufferedReader;
import Java.io.InputStreamReader;

import Java.net.HttpURLConnection;
import Java.net.URL;

/**
 * @author kmrgtm
 *
 */
public class GatewayConnect {


public void ConnectURL()
{
    try
    {

        System.out.println("***** Inside Class File *****");
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
            public Java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }
            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        }
    };

    // Install the all-trusting trust manager
    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new Java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

    // Create all-trusting Host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    // Install the all-trusting Host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

    String urlstr="https://www.google.co.in";

    URL url = new URL(urlstr);

    HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();

    conn  = (HttpsURLConnection)url.openConnection();


        if (conn instanceof javax.net.ssl.HttpsURLConnection) {
        System.out.println("*** openConnection returns an instanceof javax.net.ssl.HttpsURLConnection");
        }
        if (conn instanceof HttpURLConnection) {
        System.out.println("*** openConnection returns an instnace of HttpURLConnection");
        }
    conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
    BufferedReader reader = null;
    reader = new BufferedReader(new InputStreamReader( conn.getInputStream()));
    for (String line; (line = reader.readLine()) != null;) {
        System.out.println("##### line iz :::"+line);
    }




}

catch(Exception e)
{
    e.printStackTrace();
}
}



}

私が得ている例外は:

**Java.lang.ClassCastException: weblogic.net.http.SOAPHttpsURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection
Inside the MessageSendingAction
***** Inside Class File *****
    at com.secureConnect.GatewayConnect.ConnectURL(GatewayConnect.Java:68)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
    at Java.lang.reflect.Method.invoke(Method.Java:597)
    at com.Sun.el.parser.AstValue.invoke(Unknown Source)
    at com.Sun.el.MethodExpressionImpl.invoke(Unknown Source)
    at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.Java:78)
    at org.Apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.Java:57)
    at javax.faces.component.UICommand.broadcast(UICommand.Java:127)
    at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.Java:329)
    at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.Java:304)
    at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.Java:261)
    at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.Java:474)
    at org.Apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.Java:32)
    at org.Apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.Java:103)
    at org.Apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.Java:76)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.Java:183)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.Java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.Java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.Java:300)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.Java:26)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.Java:56)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.Java:206)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.Java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.Java:388)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.Java:515)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.Java:56)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.Java:3715)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.Java:3681)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.Java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.Java:120)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.Java:2277)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.Java:2183)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.Java:1454)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.Java:207)
    at weblogic.work.ExecuteThread.run(ExecuteThread.Java:176)**

このエラーが発生する理由は何ですか?

13
KmrGtm

ようやく解決策を得ました。 Weblogicサーバーを使用している場合、以下を定義する必要があります。

set Java_OPTIONS=%Java_OPTIONS% -DUseSunHttpHandler=true

...サーバードメイン内のクラスパス内。

これにより、weblogicサーバーはSun Http Handlerを使用し、独自にインストールしないようになります。

33
KmrGtm

プロトコルハンドラを明示的に定義することもできます。別のコンストラクタを使用してURLを作成するだけです。

URL url = new URL(null, urlstr, new Sun.net.www.protocol.http.Handler());

または

URL url = new URL(null, urlstr, new Sun.net.www.protocol.https.Handler());

そして、それはコードを-DUseSunHttpHandlerオプションから独立させます。

17
Naeel Maqsudov

@KmrGtmソリューションの詳細:

すべきことは、setDomainEnvスクリプトファイルのWebLogicドメイン設定を更新することだけです。

関連する設定は、setDomainEnvスクリプトファイル(Windowsの場合はsetDomainEnv.cmd、Linuxの場合はsetDomainEnv.sh)にあります。

このファイルは、ドメインディレクトリのbinサブディレクトリ(/ user_projects/domains // bin /)にあります。

  • webLogicをインストールしたディレクトリです。
  • studioをインストールするドメインの名前です。

ファイルで、ファイルの先頭近くにJava_OPTIONS引数を追加します。

  • SetDomainEnv.cmd(Windows)の場合:

set Java_OPTIONS =%Java_OPTIONS%-DUseSunHttpHandler = true

  • SetDomainEnv.sh(Linux)の場合:

Java_OPTIONS = "%Java_OPTIONS%-DUseSunHttpHandler = true"

Java_OPTIONSをエクスポート

2
Accollativo