Lucee 4.x to 5.x upgrade error: key [ONLINEDOCSLINK] doesn't exist

I just migrated a Lucee 4.x server to the latest 5.x (and latest Tomcat 7.x) and after logging in to the server admin I get the below error.

Any ideas what could be up ? It’s like a missing piece of config somewhere ?

Full stack :

key [ONLINEDOCSLINK] doesn't exist


/admin/overview.cfm:445

/admin/web.cfm:433

/admin/server.cfm:2

Catch
additional	
Struct (ordered)
Detail	
string	
ErrNumber	
number	0
ErrorCode	
string	0
Extended_Info	
string	
ExtendedInfo	
string	
Message	
string	key [ONLINEDOCSLINK] doesn't exist
StackTrace	
string	lucee.runtime.exp.ExpressionException: key [ONLINEDOCSLINK] doesn't exist at lucee.runtime.type.util.StructSupport.invalidKey(StructSupport.java:69) at lucee.runtime.type.StructImpl.get(StructImpl.java:135) at lucee.runtime.type.util.StructSupport.get(StructSupport.java:244) at lucee.runtime.util.VariableUtilImpl.get(VariableUtilImpl.java:263) at lucee.runtime.PageContextImpl.get(PageContextImpl.java:1516) at overview_cfm$cf.call(/admin/overview.cfm:445) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:933) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:823) at lucee.runtime.PageContextImpl.doInclude(PageContextImpl.java:805) at web_cfm$cf.call(/admin/web.cfm:433) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:933) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:823) at lucee.runtime.PageContextImpl.doInclude(PageContextImpl.java:805) at server_cfm$cf.call(/admin/server.cfm:2) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:933) at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:823) at lucee.runtime.listener.ModernAppListener._onRequest(ModernAppListener.java:218) at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:43) at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2464) at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2454) at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2427) at lucee.runtime.engine.Request.exe(Request.java:44) at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1090) at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1038) at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:102) at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:51) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.filters.RemoteIpFilter.doFilter(RemoteIpFilter.java:866) at org.apache.catalina.filters.RemoteIpFilter.doFilter(RemoteIpFilter.java:902) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at sun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intergral.fusionreactor.j2ee.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:134) at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doNext(FusionReactorRequestHandler.java:764) at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doHttpServletRequest(FusionReactorRequestHandler.java:344) at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.doFusionRequest(FusionReactorRequestHandler.java:207) at com.intergral.fusionreactor.j2ee.filter.FusionReactorRequestHandler.handle(FusionReactorRequestHandler.java:801) at com.intergral.fusionreactor.j2ee.filter.FusionReactorCoreFilter.doFilter(FusionReactorCoreFilter.java:36) at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intergral.fusionreactor.j2ee.filterchain.WrappedFilterChain.doFilter(WrappedFilterChain.java:71) at sun.reflect.GeneratedMethodAccessor47.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intergral.fusionreactor.agent.filter.FusionReactorStaticFilter.doFilter(FusionReactorStaticFilter.java:54) at com.intergral.fusionreactor.agent.pointcuts.NewFilterChainPointCut$1.invoke(NewFilterChainPointCut.java:41) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)
TagContext	
Array
1	
Struct
codePrintHTML	
string	
codePrintPlain	
string	
column	
number	0
id	
string	??
line	
number	445
Raw_Trace	
string	overview_cfm$cf.call(/admin/overview.cfm:445)
template	
string	/admin/overview.cfm
type	
string	cfml
2	
Struct
codePrintHTML	
string	
codePrintPlain	
string	
column	
number	0
id	
string	??
line	
number	433
Raw_Trace	
string	web_cfm$cf.call(/admin/web.cfm:433)
template	
string	/admin/web.cfm
type	
string	cfml
3	
Struct
codePrintHTML	
string	
codePrintPlain	
string	
column	
number	0
id	
string	??
line	
number	2
Raw_Trace	
string	server_cfm$cf.call(/admin/server.cfm:2)
template	
string	/admin/server.cfm
type	
string	cfml
type	
string	expression

that error is because the translation text isn’t found, rather than calling a function which gracefully handles missing translations, the code just directly references the struct (usually stText in the admin code) containing all the translations directly which means things blow up when anything is missing.

ideally it would look at the default language, then in english (if not default) and then fallback to showing just the missing key ONLINEDOCSLINK instead of throwing an error. that would also make developing admin plugins easier… i.e. you could just provide the english text and then if somebody then wants to contribute a localisation, the could.

did you try restarting tomcat after the upgrade?

Yes.

I can see in catalina.out that lots of files were written e.g.

2018-10-30 11:22:41.883 write file:/opt/lucee/tomcat/lucee-server/context/library/tag/lucee/core/ajax/css/jquery/images/ui-bg_glass_75_dadada_1x400.png.cfm

the language stuff is loaded here if you want to dig a bit

So something may fail when the admin is starting up ?
Where can I find the files ?
find /opt/lucee -name server.cfm has no results.

Interestingly, if I login to a specific site’s web admin, then click “server” tab and log in it works OK. So maybe just the generic “default” host is broken some how.