Java WebStart NPE occasionnel depuis 1.8 031


Nous avons une application Java signée qui est distribuée aux clients avec Java WebStart, mais depuis 1.8_031, nous voyons parfois un NPE. Avec Java 1.8_031 ou une version antérieure, l'application a toujours fonctionné. La même machine peut parfois exécuter l'application, parfois pas. Effacement du cache n'a pas d'incidence sur cette question.

Le fichier JNLP se présente comme suit:

    <?xml version="1.0" encoding="utf-8"?>

<!--
      Java Webstart JNLP File for ESKORT Clearance Workbench Application

      $Id: cwb.jnlp.template,v 1.26.2.9.2.1 2015/05/19 12:43:03 PB Exp $
-->
<jnlp codebase="http://T500-DASIM:6610/clearance" href="cwb.jnlp" spec="6.0+"> 
  <information> 
    <title>ESKORT Clearance Workbench 4.0.0.33</title>  
    <vendor>Copyright © 2014 Intrasoft International Scandinavia A/S. All rights reserved.</vendor>  
    <homepage href="http://www.intrasoft-intl.com/eskort"/>  
    <description>ESKORT Clearance Workbench 4.0.0.33</description>  
    <description kind="short">Client application for modifying the ESKORT Clearance Risk Analysis Configuration.</description>  
    <icon href="conf/ClearanceWorkbench64.jpg"/>  
    <icon href="conf/ClearanceWorkbenchSplash.jpg" kind="splash"/>  
    <related-content href="http://www.intrasoft-intl.com/eskort"/>
    <!--offline-allowed/--> 
  </information>  
  <update check="always"/>  
  <resources> 
    <j2se version="1.5+"/>  
    <jar download="eager" href="lib/clearance-workbench-4.0.jar" main="true"/>  
    <jar download="eager" href="lib/profiletestbed-client-4.0.jar" />  
    <jar download="eager" href="lib/profiletestbed-core-4.0.jar" />  
    <jar download="eager" href="lib/spring-richclient-core-1.1.0.jar" />  
    <jar download="eager" href="lib/spring-richclient-resources-1.1.0.jar" />  
    <jar download="eager" href="lib/spring-richclient-sandbox-1.1.0.jar" />  
    <jar download="eager" href="lib/spring-binding-1.0.5.jar" />  
    <jar download="eager" href="lib/looks-2.2.2.jar" />  
    <jar download="eager" href="lib/swingx-1.6.1.jar" />  
    <jar download="eager" href="lib/glazedlists_java15-1.8.0.jar" />  
    <jar download="eager" href="lib/forms-1.2.1.jar" />  
    <jar download="eager" href="lib/ebcj-4.0.jar" />  
    <jar download="eager" href="lib/all-i18n.jar" />  
    <jar download="eager" href="lib/jlfgr-1_0.jar" />  
    <jar download="eager" href="lib/swing-layout-1.0.jar" />  
    <jar download="eager" href="lib/jxlayer-3.0.4.jar" />  
    <jar download="eager" href="lib/spring.jar" />  
    <jar download="eager" href="lib/spring-webmvc.jar" />  
    <jar download="eager" href="lib/spring-security-core-2.0.4.jar" />  
    <jar download="eager" href="lib/commons-logging.jar" />  
    <jar download="eager" href="lib/commons-collections.jar" />  
    <jar download="eager" href="lib/commons-codec.jar" />  
    <!-- Setup configuration class -->  
    <property name="jnlp.com.wmdata.cscc.clearance.workbench.configuration_class" value="com.wmdata.cscc.clearance.workbench.core.ClearanceWorkbenchConfiguration_Standard"/>  
    <!-- Setup look and feel -->  
    <!-- Setup language etc... -->  
    <property name="jnlp.com.wmdata.cscc.i18n.language" value="en"/>  
    <property name="jnlp.com.wmdata.cscc.i18n.country" value="XX"/>  
    <property name="jnlp.com.wmdata.cscc.i18n.variant" value="imp_exp_man"/>  
    <!-- 
      Disable the default 3-attempts login dialog. 

      Only enable this proerty if you supply your own LoginModule-Logic which 
      do NOT use the Intracom LoginDialog!
      -->  
    <!--property name="cwb_standard.disable_login_dialog" value="yes please"/-->  
    <!-- Clear basic authentication header after login -->  
    <!--property name="cwb.service_manager.http_invoker.clearAuthenticationHeaderAfterLogin" value="true"/-->  
    <!-- 
      Disable WebStart http login dialogue 
      The javaws.cfg.jauthenticator property must be set to "true" or "all" to 
      disable the built-in javaws HTTP authentication dialogue. 
      -->  
    <property name="javaws.cfg.jauthenticator" value="true"/> 
  </resources>  
  <application-desc main-class="com.wmdata.cscc.clearance.workbench.launcher.MainWebStart"/>  
  <security> 
    <all-permissions/> 
  </security> 
</jnlp>

À partir du fichier de trace, la différence entre le chargement correct de l'application et son absence semble être liée à ces lignes:

basic: JREMatcher: 
  JREDesc:    JREDesc[version 1.5+, versionType=0, secure=false, heap=-1--1, args=null, href=http://java.sun.com/products/autodl/j2se, null, null]
  JREInfo:    JREInfo for index 0:
    platform is: 1.8
    product is: 1.8.0_65
    location is: http://java.sun.com/products/autodl/j2se
    path is: C:\Program Files (x86)\Java\jre1.8.0_65\bin\javaw.exe
    args is: 
    native platform is: Windows, x86 [ x86, 32bit ]
    JavaFX runtime is: JavaFX 8.0.65 found at C:\Program Files (x86)\Java\jre1.8.0_65\
    enabled is: true
    registered is: true
    system is: true

  Init Heap:  -1
  Max  Heap:  67108864
  Satisfying: false, false
  SatisfyingVersion: true
  SatisfyingJVMArgs: false, false
  SatisfyingSecure: false
  Selected JVMParam: [JVMParameters: isSecure: true, args: "-Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.ClearanceWorkbenchConfiguration_Standard" "-Djnlp.com.wmdata.cscc.i18n.language=en" "-Djnlp.com.wmdata.cscc.i18n.country=XX" "-Djnlp.com.wmdata.cscc.i18n.variant=imp_exp_man" "-Djavaws.cfg.jauthenticator=true"]
Running  JVMParam: [JVMParameters: isSecure: true, args: "-Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.Clearanc" "-Djnlp.com.wmdata.cscc.i18n.variant=imp_exp_man" "-Djavaws.cfg.jauthenticator=true" "&ref" ">ain" "#alse" "2ager" ";ref"]
..
cache: registerReference: com.sun.deploy.cache.MemoryCache$CachedResourceReference@99a51c64: 3
security: Rejecting argument with illegal chars:    t‡€
security: Rejecting argument with illegal chars:    w‡€
security: Rejecting argument with illegal chars: )@¨0Õ
security: Rejecting argument with illegal chars:    r‡€
security: Rejecting argument with illegal chars:    m‡€
security: Rejecting argument with illegal chars:    h‡€
security: Rejecting argument with illegal chars: !?`Õ
security: Rejecting argument with illegal chars:    k‡€
security: Rejecting argument with illegal chars:    f‡€
security: Rejecting argument with illegal chars: ,¨ÀÕ
security: Rejecting argument with illegal chars:    a‡€
security: Rejecting argument with illegal chars:    ‡€
security: Rejecting argument with illegal chars: 0)x¨ØÕ
..
network: Created version ID: 1.7
basic: Launching new JRE version: JREInfo for index 0:
    platform is: 1.8
    product is: 1.8.0_65
    location is: http://java.sun.com/products/autodl/j2se
    path is: C:\Program Files (x86)\Java\jre1.8.0_65\bin\javaw.exe
    args is: 
    native platform is: Windows, x86 [ x86, 32bit ]
    JavaFX runtime is: JavaFX 8.0.65 found at C:\Program Files (x86)\Java\jre1.8.0_65\
    enabled is: true
    registered is: true
    system is: true

basic:   jvmParams: [JVMParameters: isSecure: true, args: "-Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.ClearanceWorkbenchConfiguration_Standard" "-Djnlp.com.wmdata.cscc.i18n.language=en" "-Djnlp.com.wmdata.cscc.i18n.country=XX" "-Djnlp.com.wmdata.cscc.i18n.variant=imp_exp_man" "-Djavaws.cfg.jauthenticator=true"]
basic: cmd 0 : C:\Program Files (x86)\Java\jre1.8.0_65\bin\jp2launcher.exe
basic: cmd 1 : -Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.Clearanc
basic: cmd 2 : -Djnlp.com.wmdata.cscc.i18n.variant=imp_exp_man
basic: cmd 3 : -Djavaws.cfg.jauthenticator=true
basic: cmd 4 : &ref
basic: cmd 5 : >ain
basic: cmd 6 : #alse
basic: cmd 7 : 2ager
basic: cmd 8 : ;ref
basic: cmd 9 : -Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.ClearanceWorkbenchConfiguration_Standard
basic: cmd 10 : -Djnlp.com.wmdata.cscc.i18n.language=en
basic: cmd 11 : -Djnlp.com.wmdata.cscc.i18n.country=XX
basic: cmd 12 : -Xbootclasspath/a:C:\Program Files (x86)\Java\jre1.8.0_65\lib\javaws.jar;C:\Program Files (x86)\Java\jre1.8.0_65\lib\deploy.jar;C:\Program Files (x86)\Java\jre1.8.0_65\lib\plugin.jar
basic: cmd 13 : -classpath
basic: cmd 14 : C:\Program Files (x86)\Java\jre1.8.0_65\lib\deploy.jar
basic: cmd 15 : -Djnlpx.vmargs=LURqbmxwLmNvbS53bWRhdGEuY3NjYy5jbGVhcmFuY2Uud29ya2JlbmNoLmNvbmZpZ3VyYXRpb25fY2xhc3M9Y29tLndtZGF0YS5jc2NjLmNsZWFyYW5jZS53b3JrYmVuY2guY29yZS5DbGVhcmFuYwAtRGpubHAuY29tLndtZGF0YS5jc2NjLmkxOG4udmFyaWFudD1pbXBfZXhwX21hbgAtRGphdmF3cy5jZmcuamF1dGhlbnRpY2F0b3I9dHJ1ZQAmcmVmAD5haW4AI2Fsc2UAMmFnZXIAO3JlZgAtRGpubHAuY29tLndtZGF0YS5jc2NjLmNsZWFyYW5jZS53b3JrYmVuY2guY29uZmlndXJhdGlvbl9jbGFzcz1jb20ud21kYXRhLmNzY2MuY2xlYXJhbmNlLndvcmtiZW5jaC5jb3JlLkNsZWFyYW5jZVdvcmtiZW5jaENvbmZpZ3VyYXRpb25fU3RhbmRhcmQALURqbmxwLmNvbS53bWRhdGEuY3NjYy5pMThuLmxhbmd1YWdlPWVuAC1Eam5scC5jb20ud21kYXRhLmNzY2MuaTE4bi5jb3VudHJ5PVhYAA==
basic: cmd 16 : -Djnlpx.jvm=C:\Program Files (x86)\Java\jre1.8.0_65\bin\javaw.exe
basic: cmd 17 : -Djnlpx.splashport=49748
basic: cmd 18 : -Djnlpx.home=C:\Program Files (x86)\Java\jre1.8.0_65\bin
basic: cmd 19 : -Djnlpx.remove=false
basic: cmd 20 : -Djnlpx.offline=false
basic: cmd 21 : -Djnlpx.relaunch=true
basic: cmd 22 : -Djnlpx.session.data=C:\Users\dasim\AppData\Local\Temp\session5200992794202174532
basic: cmd 23 : -Djnlpx.heapsize=NULL,NULL
basic: cmd 24 : -Djava.security.policy=file:C:\Program Files (x86)\Java\jre1.8.0_65\lib\security\javaws.policy
basic: cmd 25 : -DtrustProxy=true
basic: cmd 26 : -Xverify:remote
basic: cmd 27 : -Djnlpx.origFilenameArg=C:\Users\dasim\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\9IOP4P8I\cwb.jnlp
basic: cmd 28 : -Dsun.awt.warmup=true
basic: cmd 29 : -Djava.security.manager
basic: cmd 30 : com.sun.javaws.Main
basic: cmd 31 : -secure
basic: cmd 32 : C:\Users\dasim\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\53\25f096b5-751b9e5c
preloader: Stop progressCheck thread queue.size()=0
network: Created version ID: 1.7
security: Main class is: &ref
Cannot use secure launcher with main class: &ref

Sur la console l'erreur ressemble à ceci:

java.lang.NullPointerException
    at com.sun.javaws.JnlpxArgs.execProgram(Unknown Source)
    at com.sun.javaws.Launcher.relaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

(Les arguments sont en effet brouillés, mais comment cela se produit n'est pas clair.)

Voici un extrait au niveau correspondant du fichier de trace lorsque l'application se lance correctement:

basic:   jvmParams: [JVMParameters: isSecure: true, args: "-Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.ClearanceWorkbenchConfiguration_Standard" "-Djnlp.com.wmdata.cscc.i18n.language=en" "-Djnlp.com.wmdata.cscc.i18n.country=XX" "-Djnlp.com.wmdata.cscc.i18n.variant=imp_exp_man" "-Djavaws.cfg.jauthenticator=true"]
basic: cmd 0 : C:\Program Files (x86)\Java\jre1.8.0_65\bin\jp2launcher.exe
basic: cmd 1 : -Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.Clearanc
basic: cmd 2 : -Djnlp.com.wmdata.cscc.i18n.variant=imp_exp_man
basic: cmd 3 : -Djavaws.cfg.jauthenticator=true
basic: cmd 4 : -Djnlp.com.wmdata.cscc.clearance.workbench.configuration_class=com.wmdata.cscc.clearance.workbench.core.ClearanceWorkbenchConfiguration_Standard
basic: cmd 5 : -Djnlp.com.wmdata.cscc.i18n.language=en
basic: cmd 6 : -Djnlp.com.wmdata.cscc.i18n.country=XX
basic: cmd 7 : -Xbootclasspath/a:C:\Program Files (x86)\Java\jre1.8.0_65\lib\javaws.jar;C:\Program Files (x86)\Java\jre1.8.0_65\lib\deploy.jar;C:\Program Files (x86)\Java\jre1.8.0_65\lib\plugin.jar
basic: cmd 8 : -classpath
basic: cmd 9 : C:\Program Files (x86)\Java\jre1.8.0_65\lib\deploy.jar
basic: cmd 10 : -Djnlpx.vmargs=LURqbmxwLmNvbS53bWRhdGEuY3NjYy5jbGVhcmFuY2Uud29ya2JlbmNoLmNvbmZpZ3VyYXRpb25fY2xhc3M9Y29tLndtZGF0YS5jc2NjLmNsZWFyYW5jZS53b3JrYmVuY2guY29yZS5DbGVhcmFuYwAtRGpubHAuY29tLndtZGF0YS5jc2NjLmkxOG4udmFyaWFudD1pbXBfZXhwX21hbgAtRGphdmF3cy5jZmcuamF1dGhlbnRpY2F0b3I9dHJ1ZQAtRGpubHAuY29tLndtZGF0YS5jc2NjLmNsZWFyYW5jZS53b3JrYmVuY2guY29uZmlndXJhdGlvbl9jbGFzcz1jb20ud21kYXRhLmNzY2MuY2xlYXJhbmNlLndvcmtiZW5jaC5jb3JlLkNsZWFyYW5jZVdvcmtiZW5jaENvbmZpZ3VyYXRpb25fU3RhbmRhcmQALURqbmxwLmNvbS53bWRhdGEuY3NjYy5pMThuLmxhbmd1YWdlPWVuAC1Eam5scC5jb20ud21kYXRhLmNzY2MuaTE4bi5jb3VudHJ5PVhYAA==
basic: cmd 11 : -Djnlpx.jvm=C:\Program Files (x86)\Java\jre1.8.0_65\bin\javaw.exe
basic: cmd 12 : -Djnlpx.splashport=57124
basic: cmd 13 : -Djnlpx.home=C:\Program Files (x86)\Java\jre1.8.0_65\bin
basic: cmd 14 : -Djnlpx.remove=false
basic: cmd 15 : -Djnlpx.offline=false
basic: cmd 16 : -Djnlpx.relaunch=true
basic: cmd 17 : -Djnlpx.session.data=C:\Users\dasim\AppData\Local\Temp\session6874989919459371828
basic: cmd 18 : -Djnlpx.heapsize=NULL,NULL
basic: cmd 19 : -Djava.security.policy=file:C:\Program Files (x86)\Java\jre1.8.0_65\lib\security\javaws.policy
basic: cmd 20 : -DtrustProxy=true
basic: cmd 21 : -Xverify:remote
basic: cmd 22 : -Djnlpx.origFilenameArg=C:\Users\dasim\AppData\Local\Temp\cwb-5.jnlp
basic: cmd 23 : -Dsun.awt.warmup=true
basic: cmd 24 : -Djava.security.manager
basic: cmd 25 : com.sun.javaws.Main
basic: cmd 26 : -secure
basic: cmd 27 : C:\Users\dasim\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\53\25f096b5-7062b012

J'ai essayé de reconditionner le fichier JNLP même s'il est déjà conforme à la norme car nous avons d'autres fichiers jnlp d'application qui fonctionnent sans erreur, mais sans succès.

Toute entrée appréciée.

Author: Bartłomiej Semańczyk, 2015-11-12