2009-04-27 3 views
7

SSL 클라이언트 서버 프로그램에서 작업 중이며 다음 방법을 다시 사용해야합니다.java.lang.IllegalArgumentException을 어떻게 해결해야합니까? protocol = https host = null Exception?

private boolean postMessage(String message){ 
    try{ 
     String serverURLS = getRecipientURL(message); 

     serverURLS = "https:\\\\abc.my.domain.com:55555\\update"; 

     if (serverURLS != null){ 
      serverURL = new URL(serverURLS); 
     } 

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

     conn.setHostnameVerifier(new HostnameVerifier() { 
     public boolean verify(String arg0, SSLSession arg1) { 
      return true; 
     } 
     }); 

     conn.setDoOutput(true); 

     OutputStream os = conn.getOutputStream(); 

     OutputStreamWriter wr = new OutputStreamWriter(os); 

     wr.write(message); 

     wr.flush(); 

     if (conn.getResponseCode() != HttpsURLConnection.HTTP_OK) 
      return false; 
     else 
      return true; 

    } 

여기 SERVERURL는

private URL serverURL = null; 

난 줄 예외가이 방법을 실행하려고으로 초기화

의 OutputStream OS = conn.getOutputStream();

예외가

java.lang.IllegalArgumentException: protocol = https host = null 

그 이유는 무엇입니까

입니까?

답변

18

URL은 슬래시 (/)를 사용하고 역순 (Windows)은 사용하지 않습니다. 시도 :

serverURLS = "https://abc.my.domain.com:55555/update"; 

오류가 URL 클래스는 문자열의 호스트 부분을 구문 분석 할 수 있으므로, hostnull 때문이다받을 이유.

3

이 코드는 전혀 필요 보인다

String serverURLS = getRecipientURL(message); 

serverURLS = "https:\\\\abc.my.domain.com:55555\\update"; 

if (serverURLS != null){ 
    serverURL = new URL(serverURLS); 
} 
  1. serverURLS이 때문에하는 dead store
  2. 그리고 이전의 성명을 발표, 그 후 즉시 serverURLS의 값을 덮어 getRecipientURL(message)
  3. 의 결과를 할당 에 변수가 a 값이 지정되어 있으므로 if (serverURLS != null)true으로 평가됩니다. e를 사용하면 serverURL에 값을 할당합니다. if (serverURLS != null)false으로 평가할 수 없습니다!
  4. 변수 serverURLS을 이전 코드 행보다 실제로 사용하지 마십시오.

당신은 함께이 모든 것을 대체 할 수 :

serverURL = new URL("https:\\\\abc.my.domain.com:55555\\update"); 
+0

안녕, 그 선은 단지 오류의 원인을 확인하기 위해 내 옆에 추가됩니다. 실제로 URL은 메시지를 사용하여 필터링됩니다. ServerURL 할당은 Test 라인입니다. –

관련 문제