spring-cli icon indicating copy to clipboard operation
spring-cli copied to clipboard

Track down classes preventing working native image

Open markpollack opened this issue 3 years ago • 4 comments

markpollack avatar Jan 19 '23 20:01 markpollack

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]

markpollack avatar Feb 03 '23 18:02 markpollack

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]

markpollack avatar Feb 03 '23 19:02 markpollack

current state can be found on the branch native-feb-2022

markpollack avatar Feb 03 '23 19:02 markpollack

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.

jvalkeal avatar Feb 15 '23 10:02 jvalkeal