JDK-8173166 : New --add-opens VM option is not taken into account in WebStart app
  • Type: Bug
  • Component: deploy
  • Sub-Component: webstart
  • Affected Version: 9
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_7
  • CPU: x86_64
  • Submitted: 2017-01-18
  • Updated: 2017-06-20
  • Resolved: 2017-06-20
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+152)
Java HotSpot(TM) Server VM (build 9-ea+152, mixed mode)

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]

A DESCRIPTION OF THE PROBLEM :
The new option '--add-opens' is not handled in com.sun.deploy.config.Config, leading to run-time failure when reflective applications (using XStream, Hibernate, ...) are run

REGRESSION.  Last worked in version 9

ADDITIONAL REGRESSION INFORMATION: 
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+152)
Java HotSpot(TM) Server VM (build 9-ea+152, mixed mode)

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Compile the given source file and put in a JAR file
2. Sign JAR file
3. Deploy as a webstart app with the given (unsigned) JNLP file 
4. Run application

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
WebStart app should display "OK"
ACTUAL -
App crashes with an exception

ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module @1391280
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:207)
	at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:171)
	at java.base/java.lang.reflect.Field.setAccessible(Field.java:165)
	at OpenModuleTest.main(OpenModuleTest.java:11)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:543)
	at jdk.javaws@9-ea/com.sun.javaws.Launcher.executeApplication(Launcher.java:1738)
	at jdk.javaws@9-ea/com.sun.javaws.Launcher.executeMainClass(Launcher.java:1674)
	at jdk.javaws@9-ea/com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1522)
	at jdk.javaws@9-ea/com.sun.javaws.Launcher.run(Launcher.java:158)
	at java.base/java.lang.Thread.run(Thread.java:844)


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
OpenModuleTest.java
=================

package com.nexgenfs.core;

import java.lang.reflect.Field;
import java.util.Comparator;
import java.util.TreeMap;

public class OpenModuleTest {
    public static void main(String[] args) {
        for (Field field : TreeMap.class.getDeclaredFields()) {
            if (field.getType() == Comparator.class) {
                field.setAccessible(true);
                break;
            }

        }

        System.out.println("OK");
    }
}

test.jnlp
=======

<?xml version="1.0" encoding="utf-8"?> 
 <jnlp spec="6.0+" codebase="http://www.example.com/webstart" href="test.jnlp"> 
   <security> 
       <all-permissions/> 
   </security> 
   <resources> 
     <j2se version="1.8+" href="http://java.sun.com/products/autodl/j2se" initial-heap-size="64m" max-heap-size="384m" java-vm-args="-ea --add-modules=java.se.ee --add-opens=java.base/java.util=ALL-UNNAMED"/> 
     <jar href="test.jar" main="true"/> 
   </resources> 
   <application-desc main-class="OpenModuleTest"/> 
 </jnlp> 

---------- END SOURCE ----------


Comments
Closing this as duplicate of JDK-8172986 based upon submitter confirmation: "As of build 174 I can confirm: - JDK-8172986 is fixed - JDK-8160828 is fixed "
20-06-2017

Incomplete, pending confirmation of dup.
24-01-2017

This looks a duplicate of JDK-8172986. Need to confirm with the build which has fix.
23-01-2017