2013-04-30 51 views
2

我在創建javafx包後使用google map api獲取「peer not authenticated」。 它工作正常時,直接從代碼或可執行的JAR文件運行,以下是例外,我得到,在使用google map api的時候獲取「peer not authenticated」

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397) 
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:561) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732) 
    at com.precisionhawk.flightplanner.utils.LocationUtils.performAPICall(LocationUtils.java:109) 
    at com.precisionhawk.flightplanner.utils.LocationUtils.getAutocompleteResults(LocationUtils.java:74) 
    at com.precisionhawk.flightplanner.controls.AddressTextField$1$1.run(AddressTextField.java:103) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) 

我使用HTTP客戶端調用API。我曾試圖通過「創建JavaFX的包」繞過X509證書,但仍沒有運氣

下面

是我的代碼

SSLContext ctx = null; 
try { 

      SSLUtilities.trustAllHostnames(); 
      SSLUtilities.trustAllHttpsCertificates(); 

      HttpClient httpClient = new DefaultHttpClient(); 

      HttpGet getRequest = new HttpGet(url.toString()); 
      getRequest.addHeader("accept", "application/json"); 

      HttpResponse response = httpClient.execute(getRequest); 

      if (response.getStatusLine().getStatusCode() != 200) { 
       throw new RuntimeException("Failed : HTTP error code : " 
         + response.getStatusLine().getStatusCode()); 
      } 
      BufferedReader br = new BufferedReader(
        new InputStreamReader((response.getEntity().getContent()))); 
      String inputLine; 

      while ((inputLine = br.readLine()) != null) { 
       result = result + inputLine; 
      } 
      br.close(); 
      LOG.info("Autocomplete API call Response: " + result); 
      } 
      catch (Exception e) { 
       LOG.error("Autocomplete Exception: "+e.getMessage()); 
      } 

回答

0

如果你的意思是創建一個Self-Contained Application,再一個原因是,太陽加密擴展不包含在默認自包含應用程序包裝中,詳見JavaFX deployment blog

從部署博客引用,有關於包含sun jce提供程序和JavaFX 2.2自包含應用程序的說明。可能爲將來版本的JavaFX部署工具,將提供更方便的方法來執行此操作。

微調應用程序包

如果您正在使用的包裝工具有生產的可安裝包可能是一個需要調整應用圖像之前它被包裹成安裝程序。爲什麼?例如,您可能需要對應用程序進行簽名,因此它似乎對操作系統不可信(例如,請取消Mac OS X Gatekeeper)。

默認情況下,自包含應用程序不包含Java運行時的完整副本。我們只包含一組強制性組件。採取這種方法的部分原因是我們想要減小包裝尺寸。但是,在某些情況下,您的應用程序可能依賴於這些可選組件,在這種情況下,您需要一種方法將它們添加到專用運行時。例如,如果缺少jre/lib/ext/sunjce_provider.jar,https連接將不起作用。

目前這可以通過提供在填充應用程序映像後執行的自定義配置腳本來實現。就像上面帶有圖標的示例一樣,您需要啓用詳細輸出來查找腳本文件的名稱,然後將其放到打包工具可以找到它的位置。請注意,腳本語言也是平臺特定的。目前我們只在Windows上支持Mac/Linux和Windows Script的shell。

如何找出應用程序映像的位置?目前,自定義腳本運行在存儲配置文件的目錄中,但可以使用相對平臺特定的路徑訪問應用程序映像。您可以從詳細輸出或通過將環境變量JAVAFX_ANT_DEBUG設置爲true來派生此路徑以保留中間構建工件。

以下是示例腳本(由John Petersen提供),您可以使用它在Windows平臺上將MyApp的應用程序包添加jre/lib/ext/sunjce_provider.jar。腳本使用Javascript,但你也可以使用VBScript for Windows腳本。

<?xml version="1.0" ?> 
<package> 
    <job id="postImage"> 
    <script language="JScript"> 
    <![CDATA[ 
     var oFSO = new ActiveXObject("Scripting.FileSystemObject"); 
     var oFolder = oFSO.getFolder("."); 
     var from = oFolder.path + "\\MyApp\\app\\sunjce_provider.jar"; 
     var to = oFolder.path + "\\MyApp\\runtime\\jre\\lib\\ext"; 
     if (!oFSO.FolderExists(to)) { 
      oFSO.CreateFolder(to); 
     } 
     to += "\\"; 
     oFSO.CopyFile(from, to); 
    ]]> 
    </script> 
    </job> 
</package> 
我使用maven

。所以我應該如何從pom.xml中調用這個腳本來創建jre/lib/ext文件夾中的jar?

我不是Maven專家。上面的解決方案是針對apache螞蟻的。如果你想繼續使用maven,你將需要爲這個問題制定你自己的解決方案。

+0

我正在使用maven。所以我應該如何從pom.xml中調用這個腳本來創建jre/lib/ext文件夾中的jar? – PDP 2013-05-06 05:40:34

相關問題