sunmingtao / sample-code

3 stars 4 forks source link

java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.lang3.time.DateFormatUtils #176

Closed sunmingtao closed 3 years ago

sunmingtao commented 3 years ago

Run a java 11 program First time:


15:15:02.130 java[13769]: java.lang.NullPointerException
15:15:02.130 java[13769]: at java.base/java.lang.String$CaseInsensitiveComparator.compare(String.java:1224)
15:15:02.130 java[13769]: at java.base/java.lang.String$CaseInsensitiveComparator.compare(String.java:1218)
15:15:02.130 java[13769]: at java.base/java.util.TreeMap.getEntryUsingComparator(TreeMap.java:374)
15:15:02.130 java[13769]: at java.base/java.util.TreeMap.getEntry(TreeMap.java:343)
15:15:02.130 java[13769]: at java.base/java.util.TreeMap.containsKey(TreeMap.java:231)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateParser$TimeZoneStrategy.<init>(FastDateParser.java:784)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateParser.getLocaleSpecificStrategy(FastDateParser.java:570)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateParser.getStrategy(FastDateParser.java:539)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateParser.init(FastDateParser.java:174)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateParser.<init>(FastDateParser.java:145)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:395)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateFormat.<init>(FastDateFormat.java:379)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateFormat$1.createInstance(FastDateFormat.java:101)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateFormat$1.createInstance(FastDateFormat.java:98)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FormatCache.getInstance(FormatCache.java:82)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.FastDateFormat.getInstance(FastDateFormat.java:158)
15:15:02.130 java[13769]: at org.apache.commons.lang3.time.DateFormatUtils.<clinit>(DateFormatUtils.java:109)
15:15:02.130 java[13769]: at au.gov.nla.dl.services.AcknowledgementService.toJson(AcknowledgementService.java:76)
15:15:02.130 java[13769]: at au.gov.nla.dl.services.AcknowledgementService.getJsonData(AcknowledgementService.java:61)
15:15:02.130 java[13769]: at au.gov.nla.dl.controllers.AcknowledgementController.getAcknowledgements(AcknowledgementController.java:31)
15:15:02.130 java[13769]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15:15:02.130 java[13769]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
15:15:02.130 java[13769]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
15:15:02.130 java[13769]: at java.base/java.lang.reflect.Method.invoke(Method.java:566)

Subsequent times

15:15:24.583 java[13769]: Caused by:
15:15:24.583 java[13769]: java.lang.NoClassDefFoundError: Could not initialize class org.apache.commons.lang3.time.DateFormatUtils
15:15:24.583 java[13769]: at au.gov.nla.dl.services.AcknowledgementService.toJson(AcknowledgementService.java:76)
15:15:24.583 java[13769]: at au.gov.nla.dl.services.AcknowledgementService.getJsonData(AcknowledgementService.java:61)
15:15:24.583 java[13769]: at au.gov.nla.dl.controllers.AcknowledgementController.getAcknowledgements(AcknowledgementController.java:31)
15:15:24.583 java[13769]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
15:15:24.583 java[13769]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
15:15:24.583 java[13769]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
15:15:24.583 java[13769]: at java.base/java.lang.reflect.Method.invoke(Method.java:566)
15:15:24.583 java[13769]: at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
15:15:24.583 java[13769]: at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
15:15:24.583 java[13769]: at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
15:15:24.583 java[13769]: at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)
15:15:24.583 java[13769]: at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapt 
sunmingtao commented 3 years ago

It fails on the static block in DateFormatUtils

public static final FastDateFormat SMTP_DATETIME_FORMAT = FastDateFormat.getInstance("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);

https://bugzilla.redhat.com/show_bug.cgi?id=1837376. There is a bug in OpenJDK

"Additional item on Fedora is "America/Nuuk", which is an existing timezone. Problem with that timezone is, it does not have short and long names. In result array, short and long name is null. Method SimpleDateFormat.matchZoneString() does not expect null for short and long name, there is no null-check. Because of that, NPE is the result of the call. According to JDK documentation, NPE should not happen in SimpleDateFormat.parse()"