2013-04-30 29 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

相关问题