javajava-11java-modulejavaagentsimperva

java module access issue: "Class in a module cannot access class in unnamed module because module x does not read unnamed module y"


My source code compiles on java 7 and runs on java 11.
I am trying to integrate imperva RASP as a java agent in tomcat. However, when I start the tomcat server, it is throwing following exception:

Caused by: java.lang.IllegalAccessError: class sun.security.ec.ECDSASignature (in module jdk.crypto.ec) cannot access class com.imperva.rasp.AgentBridge (in unnamed module @0x66c61024) because module jdk.crypto.ec does not read unnamed module @0x66c61024
        at jdk.crypto.ec/sun.security.ec.ECDSASignature.<init>(ECDSASignature.java:118)
        at jdk.crypto.ec/sun.security.ec.ECDSASignature.<init>(ECDSASignature.java:106)
        at jdk.crypto.ec/sun.security.ec.ECDSASignature$SHA1.<init>(ECDSASignature.java:214)
        at jdk.crypto.ec/sun.security.ec.SunEC$ProviderService.newInstance(SunEC.java:102)
        at java.base/java.security.Signature.isSpi(Signature.java:331)

The way I am passing java agent is:

JAVA_OPTS="-javaagent:$IMPERVA_JAR $JAVA_OPTS"

I went through multiple posts such as this one about --add-opens argument. Based on that, I am passing JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=jdk.crypto.ec/sun.security.ec=ALL-UNNAMED" I can see following statement in the logs:

Picked up JDK_JAVA_OPTIONS:  --add-opens=jdk.crypto.ec/sun.security.ec=ALL-UNNAMED

Am I missing something here or is there any syntax error in the arguments that I am passing?
There is no any other configuration is done.

Any help is appreciated. Thank you.


Solution

  • Managed to solve it by using --add-reads instead of --add-opens.

    JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-reads jdk.crypto.ec=ALL-UNNAMED"