Track down classes preventing working native image
current state... not able to configure a hint to access the protected method that is invoked via jackson. tried a few things
com.oracle.svm.core.jdk.UnsupportedFeatureError: Runtime reflection is not supported for protected void org.kohsuke.github.GHObject.setResponseHeaderFields(org.kohsuke.github.connector.GitHubConnectorResponse)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:89) ~[na:na]
at [email protected]/java.lang.reflect.Method.acquireMethodAccessor(Method.java:76) ~[spring:na]
at [email protected]/java.lang.reflect.Method.invoke(Method.java:566) ~[spring:na]
at com.fasterxml.jackson.databind.introspect.AnnotatedMethod.setValue(AnnotatedMethod.java:167) ~[spring:2.14.1]
at com.fasterxml.jackson.databind.deser.impl.ValueInjector.inject(ValueInjector.java:51) ~[na:na]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.injectValues(BeanDeserializerBase.java:1633) ~[spring:2.14.1]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:377) ~[spring:2.14.1]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[spring:2.14.1]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[spring:2.14.1]
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105) ~[na:na]
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1546) ~[na:na]
at org.kohsuke.github.GitHubResponse.parseBody(GitHubResponse.java:88) ~[na:na]
at org.kohsuke.github.Requester.lambda$fetch$1(Requester.java:76) ~[spring:na]
The previous issue was fixed by adding MemberCategory.INVOKE_DECLARED_METHODS as a hint. The next blocker is shown below which happens even though the class EncodingDetectingInputStream was registered for hints.
java.lang.NoClassDefFoundError: Could not initialize class org.openrewrite.internal.EncodingDetectingInputStream
at org.openrewrite.Parser$Input.getSource(Parser.java:203) ~[spring:7.35.0-SNAPSHOT]
at org.openrewrite.tree.ParsingExecutionContextView.parseFailure(ParsingExecutionContextView.java:62) ~[na:na]
at org.openrewrite.xml.XmlParser.lambda$parseInputs$0(XmlParser.java:75) ~[spring:7.34.3]
at [email protected]/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[na:na]
at [email protected]/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[na:na]
at [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[spring:na]
at [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[spring:na]
at [email protected]/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[spring:na]
at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[spring:na]
at [email protected]/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[spring:na]
at org.openrewrite.xml.XmlParser.parseInputs(XmlParser.java:81) ~[spring:7.34.3]
at org.openrewrite.Parser.parse(Parser.java:41) ~[spring:7.35.0-SNAPSHOT]
current state can be found on the branch native-feb-2022
EncodingDetectingInputStream has a static field:
private static final Charset WINDOWS_1252 = Charset.forName("Windows-1252");
On default that charset(it throws error) is not bundled with linux so class is marked broken and then jdk always returns NoClassDefFoundError.
When I tried to manually use that class I got better error verifying that charset issue on linux:
Caused by: java.nio.charset.UnsupportedCharsetException: Windows-1252
at [email protected]/java.nio.charset.Charset.forName(Charset.java:528) ~[spring:na]
at org.openrewrite.internal.EncodingDetectingInputStream.<clinit>(EncodingDetectingInputStream.java:27) ~[spring:7.35.0-SNAPSHOT]
... 15 common frames omitted
Adding -H:+AddAllCharsets to native-image.properties fixes this error.