2013-08-29 63 views
7

javax.net.ssl.HttpsURLConnection을 사용하여 URL에 연결하는 중 "java.lang.ClassCastException"이 표시됩니다.weblogic.net.http.SOAPHttpsURLConnection을 javax.net.ssl.HttpsURLConnection에 캐스팅 할 수 없습니다.

나는 웹 로직 서버 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)** 

이 오류를 얻기의 모든 가능한 이유?

+0

캐스팅 후에 'instanceof'테스트 *를 수행하는 데 많은 포인트가 없으며 사용하지 않는 클래스에 캐스팅 할 때 아무런 의미가 없습니다. URLConnection으로 사용하십시오. – EJP

+0

'instanceof'는 테스트 목적으로 만 사용되었습니다. HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 다음 줄에서 캐스팅 오류가 발생합니다. – KmrGtm

+0

코드 fine..here를 실행하면 출력에게 있습니다 http://sebsauvage.net/paste/?987346d13f71f550#800M7Vwk73Y5OOPpLhwIleZdktYk+vf0VAZKOtOoqfw= –

답변

29

나는 결국 해결책을 얻었다. 우리는 웹 로직 서버를 사용하는 경우, 우리는 정의해야합니다

set JAVA_OPTIONS=%JAVA_OPTIONS% -DUseSunHttpHandler=true

를 ... 서버 도메인 내부의 클래스 경로에.

는 Sun의 HTTP 처리기를 사용하여 자체를 설치하지 않도록 웹 로직 서버를 말할 것이다. @KmrGtm 솔루션에

+0

안녕하세요! 나도 같은 문제가 있었지만 정확히 어디서이 지시 사항을 넣을지 모르겠다 ... 관리 콘솔을 통해 서버 시작 탭에 어쩌면? – Aitor

+3

bin 폴더 안의 setDomainEnv 파일에서이를 설정해야합니다. – KmrGtm

+0

전체 경로와 전체 파일 이름을 게시 할 수 있습니까? – Accollativo

1

더 자세히 다음 setDomainEnv 스크립트 파일에 WebLogic 도메인 설정을 업데이트 할

만 것.

관련 설정은 setDomainEnv 스크립트 파일 (Linux 용 Windows 및 setDomainEnv.sh에 대한 setDomainEnv.cmd)에 있습니다.

파일은 도메인 디렉토리 (/ user_projects/도메인 // 빈 /)의 bin 서브 디렉토리에 있습니다은 여기서

  • 는 웹 로직을 설치 한 디렉토리입니다.
  • 은 Studio를 설치하려는 도메인의 이름입니다. 파일에서

파일의 정상에 가까운 JAVA_OPTIONS 인수 추가

  • setDomainEnv.cmd (윈도우)의 경우 :

세트 JAVA_OPTIONS = % JAVA_OPTIONS % -DUseSunHttpHandler을 = 사실 setDomainEnv.sh (Linux)의

  • :

JAVA_OPTIONS = "% JAVA_OPTIONS % -DUseSunHttpHandler = true"로

수출 JAVA_OPTIONS

2

당신은 명시 적으로 프로토콜 핸들러를 정의 할 수 있습니다. 다른 생성자를 사용하여 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 옵션에서 독립적 인 코드를 만들 것입니다.