Skip to content

Utils throws IllegalAccessException in JDK 9 or higher #265

Closed
@kito99

Description

@kito99

If you run the app with java --illegal-access=deny in JDK 9 or higher, you get an IllegalAccessException because the Utils class uses a private API:

java.lang.IllegalAccessError: class com.coxautodev.graphql.tools.UtilsKt (in unnamed module @0x793138bd) cannot access class sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl (in module java.base) because module java.base does not export sun.reflect.generics.reflectiveObjects to unnamed module @0x793138bd
	at com.coxautodev.graphql.tools.UtilsKt.unwrap(Utils.kt:31)
	at com.coxautodev.graphql.tools.FieldResolverScanner$Companion.getAllMethods(FieldResolverScanner.kt:27)
	at com.coxautodev.graphql.tools.FieldResolverScanner.findResolverMethod(FieldResolverScanner.kt:85)
	at com.coxautodev.graphql.tools.FieldResolverScanner.findFieldResolver(FieldResolverScanner.kt:63)
	at com.coxautodev.graphql.tools.FieldResolverScanner.findFieldResolver(FieldResolverScanner.kt:43)
	at com.coxautodev.graphql.tools.SchemaClassScanner.scanResolverInfoForPotentialMatches(SchemaClassScanner.kt:251)
	at com.coxautodev.graphql.tools.SchemaClassScanner.handleRootType(SchemaClassScanner.kt:121)
	at com.coxautodev.graphql.tools.SchemaClassScanner.scanForClasses(SchemaClassScanner.kt:79)
	at com.coxautodev.graphql.tools.SchemaParserBuilder.scan(SchemaParserBuilder.kt:166)
	at com.coxautodev.graphql.tools.SchemaParserBuilder.build(SchemaParserBuilder.kt:207)

You can work around this by using explicity allowing access to this package:

java --add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --illegal-access=deny 

You also may need to use add-opens inside of Maven like so:

            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>**/*Test.java</include>
                    </includes>
                    <argLine>--add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED @{argLine}</argLine>
                </configuration>
            </plugin>

It'd be nice to have the illegal API removed, however...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions