dotCMS / core

Headless/Hybrid Content Management System for Enterprises
http://dotcms.com
Other
846 stars 465 forks source link

Unable to deploy portlet plugins #29276

Closed wezell closed 1 month ago

wezell commented 2 months ago

dotCMS trunk is unable to load plugins that include Portlets- this is because the portlet pathing has changed somehow.

Our customers have a number of plugins that also include portlets and this would have broken their screens.

Update

The error message initially reported is probably over logging by the jersey framework caused by the servlet engine being restarted. It has no impact on the running of the system, this may go away if we update jersey to use CDI.

The cause of the issue was found to be the the fact that DotPortlet had the initParams field added so it could be annotated with JAXB annotations and DotPortlet extends Portlet that has the same field. In this case the object has two versions of the field one on the parent class and one on the super class. The effect of this and the design of how DotPortlet is being used and serialized meant that when a portlet is installed, its jsp-view init param should be updated with the path to where the plugin files are installed. The object was being updated but due to the shadowing when the update was being made to the Database the original old value was being used. When trying to load the CDN portlet page for example the jsp files cannot be located due to the path being incorrect.

The way that JAXB was being used here was fragile and confusing between the use of Portlet and DotPortlet specifically in the way it was extending the main Portlet object. Instead the main XML serialization objects have been refactored using Jackson and Immutables framework to be self contained classes that can self serialize and deserialize as well as providing a builder to allow mapping between Portlet and DotPortlet without a direct inheritance that could be liable for change. Even though we have used immutables with Jackson already in the system for json mapping, this refactor provides a good self-contained example of using it for XML as well ensuring we have separation of these DTO type objects from the functionality they serve. An interface has been used on the Immutable and its builder to provide a generic mechanism to provide .toXML and fromXML methods directly on the object class, that provide an abstraction layer. One area we could later consider if we need more mappings between these objects and others e.g. DotPortlet <-> Portlet is to add a mapping framework like MapStruct, this is especially helpful if we need to modify and support different versions of XML as the internal code changes.

In changing DotPortlet, DotPortletList and InitParam types we can clean up the underlying PortletAPIImpl and PortletFactoryImpl and ensure that it is both thread-safe and more clear on when converting between Portlet and DotPortlet without implicit casting

Steps to Reproduce

Try to install the dotCDN plugin into dotCMS. The portlet will fail to load.

Acceptance Criteria

We should be able to get to the portlet.

dotCMS Version

24.07.x

Proposed Objective

Application Performance

Proposed Priority

Priority 1 - Show Stopper

wezell commented 2 months ago
[18/07/24 17:48:21:855 GMT]  WARN struts.MultiMessageResources: Duplicate resource property definition (key=was ==> is now): locale.id.hint=Locale is determined by the Language used, or generated by combining Language and Country 2-letter ISO codes. ==> Locales should generally be concise. Many sites use ISO codes, such as 'en' for English or 'es-cr' for Español in Costa Rica.
[18/07/24 17:48:21:869 GMT]  INFO osgi.Activator: Added actionlet: dotCDN Purge
[18/07/24 17:48:21:869 GMT]  WARN mapper.RuntimeExceptionMapper: ServiceLocatorImpl(__HK2_Generated_46,47,1198896597) has been shut down
java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_46,47,1198896597) has been shut down
    at org.jvnet.hk2.internal.ServiceLocatorImpl.checkState(ServiceLocatorImpl.java:2270) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetInjecteeDescriptor(ServiceLocatorImpl.java:545) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getInjecteeDescriptor(ServiceLocatorImpl.java:594) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.IterableProviderImpl.justInTime(IterableProviderImpl.java:99) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:108) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.glassfish.jersey.internal.JaxrsProviders.getContextResolver(JaxrsProviders.java:111) ~[jersey-common-2.22.1.jar:?]
    at com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider._locateMapperViaProvider(JacksonJsonProvider.java:198) ~[jackson-jaxrs-json-provider-2.16.1.jar:2.16.1]
    at com.fasterxml.jackson.jaxrs.base.ProviderBase.locateMapper(ProviderBase.java:910) ~[jackson-jaxrs-base-2.16.1.jar:2.16.1]
    at com.fasterxml.jackson.jaxrs.base.ProviderBase._endpointForWriting(ProviderBase.java:685) ~[jackson-jaxrs-base-2.16.1.jar:2.16.1]
    at com.fasterxml.jackson.jaxrs.base.ProviderBase.writeTo(ProviderBase.java:560) ~[jackson-jaxrs-base-2.16.1.jar:2.16.1]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-websocket.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CMSFilter.doFilterInternal(CMSFilter.java:181) ~[classes/:?]
    at com.dotmarketing.filters.CMSFilter.doFilter(CMSFilter.java:61) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.visitor.filter.servlet.VisitorFilter.doFilter(VisitorFilter.java:81) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.vanityurl.filters.VanityURLFilter.doFilter(VanityURLFilter.java:107) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.TimeMachineFilter.doFilter(TimeMachineFilter.java:137) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.ThreadNameFilter.doFilter(ThreadNameFilter.java:88) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CookiesFilter.doFilter(CookiesFilter.java:53) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:99) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.NormalizationFilter.doFilter(NormalizationFilter.java:89) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[catalina.jar:9.0.85]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[catalina.jar:9.0.85]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670) ~[catalina.jar:9.0.85]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[catalina.jar:9.0.85]
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:765) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.85]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[catalina.jar:9.0.85]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1732) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1295) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint.setSocketOptions(Nio2Endpoint.java:339) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint$Nio2Acceptor.completed(Nio2Endpoint.java:479) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint$Nio2Acceptor.completed(Nio2Endpoint.java:415) ~[tomcat-coyote.jar:9.0.85]
    at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127) ~[?:?]
    at sun.nio.ch.Invoker.invokeDirect(Invoker.java:158) ~[?:?]
    at sun.nio.ch.Invoker.invoke(Invoker.java:186) ~[?:?]
    at sun.nio.ch.UnixAsynchronousServerSocketChannelImpl.onEvent(UnixAsynchronousServerSocketChannelImpl.java:193) ~[?:?]
    at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:306) ~[?:?]
    at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
    at java.lang.Thread.run(Thread.java:829) [?:?]
[18/07/24 17:48:21:871 GMT] ERROR servlet.VisitorFilter: A MultiException has 1 exceptions.  They are:
1. java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_46,47,1198896597) has been shut down

javax.servlet.ServletException: A MultiException has 1 exceptions.  They are:
1. java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_46,47,1198896597) has been shut down

    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:487) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-websocket.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CMSFilter.doFilterInternal(CMSFilter.java:181) ~[classes/:?]
    at com.dotmarketing.filters.CMSFilter.doFilter(CMSFilter.java:61) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.visitor.filter.servlet.VisitorFilter.doFilter(VisitorFilter.java:81) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.vanityurl.filters.VanityURLFilter.doFilter(VanityURLFilter.java:107) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.TimeMachineFilter.doFilter(TimeMachineFilter.java:137) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.ThreadNameFilter.doFilter(ThreadNameFilter.java:88) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CookiesFilter.doFilter(CookiesFilter.java:53) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:99) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.NormalizationFilter.doFilter(NormalizationFilter.java:89) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[catalina.jar:9.0.85]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[catalina.jar:9.0.85]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670) ~[catalina.jar:9.0.85]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[catalina.jar:9.0.85]
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:765) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.85]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[catalina.jar:9.0.85]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1732) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1295) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint.setSocketOptions(Nio2Endpoint.java:339) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint$Nio2Acceptor.completed(Nio2Endpoint.java:479) ~[tomcat-coyote.jar:9.0.85]
    at org.apache.tomcat.util.net.Nio2Endpoint$Nio2Acceptor.completed(Nio2Endpoint.java:415) ~[tomcat-coyote.jar:9.0.85]
    at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127) ~[?:?]
    at sun.nio.ch.Invoker.invokeDirect(Invoker.java:158) ~[?:?]
    at sun.nio.ch.Invoker.invoke(Invoker.java:186) ~[?:?]
    at sun.nio.ch.UnixAsynchronousServerSocketChannelImpl.onEvent(UnixAsynchronousServerSocketChannelImpl.java:193) ~[?:?]
    at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:306) ~[?:?]
    at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
    at java.lang.Thread.run(Thread.java:829) [?:?]
Caused by: org.glassfish.hk2.api.MultiException: A MultiException has 1 exceptions.  They are:
1. java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_46,47,1198896597) has been shut down

    at org.jvnet.hk2.internal.FactoryCreator.getFactoryHandle(FactoryCreator.java:106) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:173) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:319) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) ~[jersey-container-servlet-core-2.22.1.jar:?]
    ... 79 more
Caused by: java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_46,47,1198896597) has been shut down
    at org.jvnet.hk2.internal.ServiceLocatorImpl.checkState(ServiceLocatorImpl.java:2270) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getServiceHandleImpl(ServiceLocatorImpl.java:639) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getServiceHandle(ServiceLocatorImpl.java:632) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getServiceHandle(ServiceLocatorImpl.java:650) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.FactoryCreator.getFactoryHandle(FactoryCreator.java:103) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.FactoryCreator.dispose(FactoryCreator.java:173) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.SystemDescriptor.dispose(SystemDescriptor.java:526) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope$Instance.remove(RequestScope.java:532) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope$Instance.release(RequestScope.java:549) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:319) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) ~[jersey-container-servlet-core-2.22.1.jar:?]
    ... 79 more
[18/07/24 17:48:21:872 GMT]  WARN error.custom_002derror_002dpage_jsp: Request failed. on /html/error/custom-error-page.jsp
[18/07/24 17:48:26:972 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:26:972 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:26:976 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:26:977 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:27:001 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:27:001 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:27:004 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:48:27:008 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:50:41:598 GMT]  INFO maintenance.MaintenanceResource: User 'Will Ezell [ID: dotcms.org.5][email:will@dotcms.com]' is shutting down dotCMS Cluster with a rolling delay of 60
[18/07/24 17:50:41:598 GMT]  INFO util.SecurityLogger: class com.dotcms.rest.api.v1.maintenance.MaintenanceResource : User 'Will Ezell [ID: dotcms.org.5][email:will@dotcms.com]' is shutting down dotCMS Cluster with a rolling delay of 60 -- ip:209.134.33.209,user:Will Ezell [ID: dotcms.org.5][email:will@dotcms.com]
[18/07/24 17:50:41:714 GMT]  INFO maintenance.ClusterManagementTopic: Got DOTCMS_CLUSTER_RESTART from server:5b1044a37d.
[18/07/24 17:50:41:717 GMT]  INFO maintenance.ClusterManagementTopic: Restarting  2024-07-18T17:50:41.715490Zs, serverOrder:0, rollingDelay:60
[18/07/24 17:50:41:727 GMT]  INFO maintenance.ClusterManagementTopic: Running restart in: 0 seconds
[18/07/24 17:50:41:728 GMT]  INFO job.ShutdownHookThread: Running dotCMS shutdown cleanup sequence.
[18/07/24 17:50:41:744 GMT]  INFO core.QuartzScheduler: Scheduler dotCMSQuartz_$_NON_CLUSTERED started.
[18/07/24 17:50:41:744 GMT]  INFO core.QuartzScheduler: Scheduler dotCMSQuartz_$_NON_CLUSTERED shutting down.
[18/07/24 17:50:41:744 GMT]  INFO core.QuartzScheduler: Scheduler dotCMSQuartz_$_NON_CLUSTERED paused.
[18/07/24 17:50:41:753 GMT]  INFO core.QuartzScheduler: Scheduler dotCMSQuartz_$_NON_CLUSTERED shutdown complete.
[18/07/24 17:50:41:764 GMT]  INFO servlets.InitServlet: dotCMS shutting down OSGI
[18/07/24 17:50:41:777 GMT]  WARN reindex.ReindexThread: ---  ReindexThread is stopping, background indexing will not take place
[18/07/24 17:50:41:790 GMT]  INFO job.Activator: Stopping Content Unlock Job
[18/07/24 17:50:41:790 GMT]  INFO rest.Activator: Removing new Restful OSGI INFO Service:OSGIInfoResource
[18/07/24 17:50:41:791 GMT]  INFO encoder.Activator: Removed View Tool: owasp
[18/07/24 17:50:41:791 GMT]  INFO flexmark.Activator: Removed View Tool: flexmark
[18/07/24 17:50:41:791 GMT]  INFO osgi.Activator: Stopping dotZapier Plugin
[18/07/24 17:50:41:791 GMT]  INFO osgi.Activator: Removed View Tool: zapier
[18/07/24 17:50:41:792 GMT]  INFO osgi.Activator: Removed View Tool: dotcdn
[18/07/24 17:50:41:805 GMT]  INFO servlets.InitServlet: dotCMS shutting down Elastic Search
[18/07/24 17:50:41:805 GMT]  INFO servlets.InitServlet: dotCMS shutting down
[18/07/24 17:50:41:815 GMT]  INFO filters.CharsetEncodingFilter: Destroying character encoding filter...
[18/07/24 17:50:41:816 GMT]  INFO servlet.VisitorFilter: VisitorLogger Filter Destroyed
[18/07/24 17:50:41:912 GMT]  INFO listeners.ContextLifecycleListener: Shutdown : Started, executing a clean shutdown.
[18/07/24 17:50:41:915 GMT]  INFO enterprise.LicenseUtil: Setting up default license
[18/07/24 17:50:41:917 GMT]  INFO timedcache.TimedCacheProvider: ===== Calling shutdown [Timed Cache Provider].
[18/07/24 17:50:41:917 GMT]  INFO caffine.CaffineCache: ===== Calling shutdown [Caffine Memory Cache].
[18/07/24 17:50:41:917 GMT]  INFO h22.H22Cache: Building new H22 Cache, db:0
[18/07/24 17:50:41:917 GMT]  INFO h22.H22HikariPool: H22 on disk cache:jdbc:h2:/data/local/dotsecure/h22cache/0/2024-07-18_13-50-41/cache;DB_CLOSE_ON_EXIT=FALSE
[18/07/24 17:50:41:931 GMT]  INFO h22.H22Cache: Building new H22 Cache, db:1
[18/07/24 17:50:41:932 GMT]  INFO h22.H22HikariPool: H22 on disk cache:jdbc:h2:/data/local/dotsecure/h22cache/1/2024-07-18_13-50-41/cache;DB_CLOSE_ON_EXIT=FALSE
[18/07/24 17:50:41:946 GMT]  INFO listeners.ContextLifecycleListener: Shutdown : Finished.
command terminated with exit code 137
(base) ➜  plugin-dotcms-license git:(main) ✗ k exec -c dotcms -it dotcms-corpsites-auth-0 -n corpsites bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
dotcms@dotcms-corpsites-auth-0:/$ tail -f /srv/
00-config-defaults.sh        30-override-config-props.sh  50-load-dump-sql.sh          config/                      entrypoint.sh                templates/
20-copy-overriden-files.sh   40-custom-starter-zip.sh     OVERRIDE/                    dotserver/                   home/                        utils/
dotcms@dotcms-corpsites-auth-0:/$ tail -f /srv/dotserver/tomcat/
.cargo           CONTRIBUTING.md  NOTICE           RELEASE-NOTES    bin/             conf/            logs/            temp/            work/
BUILDING.txt     LICENSE          README.md        RUNNING.txt      common/          lib/             shared/          webapps/
dotcms@dotcms-corpsites-auth-0:/$ tail -f /srv/dotserver/tomcat/logs/
catalina.2024-07-18.log       dotcms.log                    dotcms_access.2024-07-18.log
dotcms@dotcms-corpsites-auth-0:/$ tail -f /srv/dotserver/tomcat/logs/dotcms.log
    at org.apache.tomcat.util.net.Nio2Endpoint$Nio2SocketWrapper$2.completed(Nio2Endpoint.java:619) ~[tomcat-coyote.jar:9.0.85]
    at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127) ~[?:?]
    at sun.nio.ch.Invoker$2.run(Invoker.java:219) ~[?:?]
    at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
    at java.lang.Thread.run(Thread.java:829) [?:?]
[18/07/24 17:53:01:606 GMT]  INFO services.DotResourceCache: velocityMiss:VelocityResourceKey [path=/ext/license.vtl, language=1, id1=license, id2=null, type=VTL, mode=LIVE] @ url:GET//dotcms.com/c/portal/layout | lang:1 | ip:70.50.106.46 | Admin:true | start:07-18-2024 05:51:36 GMT  ref:https://authoring.dotcms.com/dotAdmin/  ?p_l_id=31d82c3e-b796-41c5-8e3d-63a62ac00480&p_p_id=EXT_DOTCMS_LICENSE_PORTLET&p_p_action=0&&dm_rlout=1&r=1721325176231&in_frame=true&frame=detailFrame&container=true&angularCurrentPortlet=EXT_DOTCMS_LICENSE_PORTLET
[18/07/24 17:53:01:606 GMT]  WARN resource.ResourceManagerImpl: ResourceManager : unable to find resource '/ext/license.vtl' in any resource loader. @ url:GET//dotcms.com/c/portal/layout | lang:1 | ip:70.50.106.46 | Admin:true | start:07-18-2024 05:51:36 GMT  ref:https://authoring.dotcms.com/dotAdmin/  ?p_l_id=31d82c3e-b796-41c5-8e3d-63a62ac00480&p_p_id=EXT_DOTCMS_LICENSE_PORTLET&p_p_action=0&&dm_rlout=1&r=1721325176231&in_frame=true&frame=detailFrame&container=true&angularCurrentPortlet=EXT_DOTCMS_LICENSE_PORTLET
[18/07/24 17:53:01:611 GMT] ERROR servlet.MainServlet: com.dotcms.repackage.javax.portlet.PortletException
[18/07/24 17:53:05:701 GMT]  INFO apps.SecretsKeyStoreHelper: KeyStore loaded successfully after `1` tries.
[18/07/24 17:53:06:452 GMT]  INFO osgi.OSGIResource: Portlets Removed: [EXT_DOTCMS_LICENSE_PORTLET]
[18/07/24 17:53:06:453 GMT]  INFO osgi.OSGIResource: Actionlets Removed: []
[18/07/24 17:53:06:458 GMT]  WARN mapper.RuntimeExceptionMapper: ServiceLocatorImpl(__HK2_Generated_5,6,763315407) has been shut down
java.lang.IllegalStateException: ServiceLocatorImpl(__HK2_Generated_5,6,763315407) has been shut down
    at org.jvnet.hk2.internal.ServiceLocatorImpl.checkState(ServiceLocatorImpl.java:2270) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetInjecteeDescriptor(ServiceLocatorImpl.java:545) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getInjecteeDescriptor(ServiceLocatorImpl.java:594) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.IterableProviderImpl.justInTime(IterableProviderImpl.java:99) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.jvnet.hk2.internal.IterableProviderImpl.get(IterableProviderImpl.java:108) ~[hk2-locator-2.4.0-b31.jar:?]
    at org.glassfish.jersey.internal.JaxrsProviders.getContextResolver(JaxrsProviders.java:111) ~[jersey-common-2.22.1.jar:?]
    at com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider._locateMapperViaProvider(JacksonJsonProvider.java:198) ~[jackson-jaxrs-json-provider-2.16.1.jar:2.16.1]
    at com.fasterxml.jackson.jaxrs.base.ProviderBase.locateMapper(ProviderBase.java:910) ~[jackson-jaxrs-base-2.16.1.jar:2.16.1]
    at com.fasterxml.jackson.jaxrs.base.ProviderBase._endpointForWriting(ProviderBase.java:685) ~[jackson-jaxrs-base-2.16.1.jar:2.16.1]
    at com.fasterxml.jackson.jaxrs.base.ProviderBase.writeTo(ProviderBase.java:560) ~[jackson-jaxrs-base-2.16.1.jar:2.16.1]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:86) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:711) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:444) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:434) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) ~[jersey-common-2.22.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) ~[jersey-server-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) ~[jersey-container-servlet-core-2.22.1.jar:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-websocket.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CMSFilter.doFilterInternal(CMSFilter.java:181) ~[classes/:?]
    at com.dotmarketing.filters.CMSFilter.doFilter(CMSFilter.java:61) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.visitor.filter.servlet.VisitorFilter.doFilter(VisitorFilter.java:81) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.vanityurl.filters.VanityURLFilter.doFilter(VanityURLFilter.java:107) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389) ~[urlrewritefilter-4.0.4.jar:4.0.4]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.TimeMachineFilter.doFilter(TimeMachineFilter.java:137) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.ThreadNameFilter.doFilter(ThreadNameFilter.java:88) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CookiesFilter.doFilter(CookiesFilter.java:53) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotmarketing.filters.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:99) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
    at com.dotcms.filters.NormalizationFilter.doFilter(NormalizationFilter.java:89) ~[classes/:?]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[catalina.jar:9.0.85]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[catalina.jar:9.0.85]
jgambarios commented 1 month ago

Building the test plugin from the https://github.com/dotCMS/plugin-seeds/tree/master/com.dotcms.portlet example and installed in a docker run (just docker-ext-run) got the following error:

Installing bundle com.dotcms.osgi-portlets-example / 0.2.0
01:09:41.280  INFO  portlet.Activator - Injecting: com.dotmarketing.osgi.portlet.HelloWorldAction into classloader: ParallelWebappClassLoader
  context: ROOT
  delegate: true
----------> Parent Classloader:
java.net.URLClassLoader@dc24521

01:09:41.484  INFO  portlet.Activator - Added Struts Action Mapping: com.dotmarketing.osgi.portlet.HelloWorldAction
Error while starting bundle: file:/data/shared/felix/load/osgi-portlets-example-0.2.jar: org.osgi.framework.BundleException: Activator start error in bundle com.dotcms.osgi-portlets-example [6].
org.osgi.framework.BundleException: Activator start error in bundle com.dotcms.osgi-portlets-example [6].
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2479)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2335)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
Caused by: com.liferay.portal.SystemException: com.liferay.portal.SystemException: An error occurred when loading portlets from XML stream: Cannot construct instance of `com.dotmarketing.business.portal.DotPortlet$Builder`, problem: Cannot build DotPortlet, some of required attributes are not set [portletId, portletClass]
 at [Source: (ByteArrayInputStream); line: 5, column: 5] (through reference chain: com.dotmarketing.business.portal.PortletList$Builder["portlet"]->java.util.ArrayList[0])
    at com.liferay.portal.ejb.PortletManagerUtil.addPortlets(PortletManagerUtil.java:45)
    at com.dotmarketing.osgi.GenericBundleActivator.registerPortlets(GenericBundleActivator.java:356)
    at com.dotmarketing.osgi.portlet.Activator.start(Activator.java:51)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:849)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2429)
    ... 7 more
Caused by: com.liferay.portal.SystemException: An error occurred when loading portlets from XML stream: Cannot construct instance of `com.dotmarketing.business.portal.DotPortlet$Builder`, problem: Cannot build DotPortlet, some of required attributes are not set [portletId, portletClass]
 at [Source: (ByteArrayInputStream); line: 5, column: 5] (through reference chain: com.dotmarketing.business.portal.PortletList$Builder["portlet"]->java.util.ArrayList[0])
    at com.dotmarketing.business.portal.PortletFactoryImpl.xmlToPortlets(PortletFactoryImpl.java:139)
    at com.liferay.portal.ejb.PortletManagerUtil.addPortlets(PortletManagerUtil.java:43)
    ... 11 more
Caused by: com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `com.dotmarketing.business.portal.DotPortlet$Builder`, problem: Cannot build DotPortlet, some of required attributes are not set [portletId, portletClass]
 at [Source: (ByteArrayInputStream); line: 5, column: 5] (through reference chain: com.dotmarketing.business.portal.PortletList$Builder["portlet"]->java.util.ArrayList[0])
    at com.fasterxml.jackson.databind.exc.ValueInstantiationException.from(ValueInstantiationException.java:47)
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:2014)
    at com.fasterxml.jackson.databind.DeserializationContext.handleInstantiationProblem(DeserializationContext.java:1426)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapInstantiationProblem(BeanDeserializerBase.java:1983)
    at com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.finishBuild(BuilderBasedDeserializer.java:203)
    at com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.deserialize(BuilderBasedDeserializer.java:218)
    at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:122)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer._deserializeFromArray(CollectionDeserializer.java:361)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:246)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeSetAndReturn(MethodProperty.java:158)
    at com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.vanillaDeserialize(BuilderBasedDeserializer.java:294)
    at com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.deserialize(BuilderBasedDeserializer.java:218)
    at com.fasterxml.jackson.dataformat.xml.deser.WrapperHandlingDeserializer.deserialize(WrapperHandlingDeserializer.java:122)
    at com.fasterxml.jackson.dataformat.xml.deser.XmlDeserializationContext.readRootValue(XmlDeserializationContext.java:104)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4905)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3885)
    at com.dotmarketing.business.portal.SerializationHelper.fromXml(SerializationHelper.java:63)
    at com.dotmarketing.business.portal.XMLEnabledBuilder.fromXml(XMLEnabledBuilder.java:43)
    at com.dotmarketing.business.portal.PortletFactoryImpl.xmlToPortlets(PortletFactoryImpl.java:96)
    at com.dotmarketing.business.portal.PortletFactoryImpl.xmlToPortlets(PortletFactoryImpl.java:137)
    ... 12 more
Caused by: java.lang.IllegalStateException: Cannot build DotPortlet, some of required attributes are not set [portletId, portletClass]
    at com.dotmarketing.business.portal.DotPortletBuilder.build(DotPortletBuilder.java:162)
    at com.dotmarketing.business.portal.DotPortlet$Builder.build(DotPortlet.java:104)
    at jdk.internal.reflect.GeneratedMethodAccessor211.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.fasterxml.jackson.databind.deser.BuilderBasedDeserializer.finishBuild(BuilderBasedDeserializer.java:201)
    ... 28 more

I got the same error in my local instance using the latest master.

spbolton commented 1 month ago

@jgambarios The issue was introduced in the previous commit when we changed from JaxB. The test plugin passes two files to xmlToPortlets The new code both JaxB and updated with Jackson expects there to be a portlet-name and portlet-class element. The old code was using jdom to process the contents of the portlets node and in the second file format would return an Optional.empty for each of the portlet elements it contains that did not have a portlet-name and portlet-class. It would be possible to make these elements on DotPortlet optional, but this breaks the checking this otherwise provides. I can update to process the files with regular Sax processing embedded in java and if the portlet has the required nodes we pass the individual xml for the portlet to DotPortlets .fromXml as before. I am not sure what the real cases are where we would have both these formats combined in the same file, but this change should return this existing logic.

<portlet>
        <portlet-name>EXT_HELLO_WORLD</portlet-name>
        <display-name>HELLO WORLD</display-name>
        <portlet-class>com.liferay.portlet.VelocityPortlet</portlet-class>
        <init-param>
            <name>view-template</name>
            <value>/ext/view.vtl</value>
        </init-param>
        <expiration-cache>0</expiration-cache>
        <supports>
            <mime-type>text/html</mime-type>
        </supports>
        <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle>
        <security-role-ref>
            <role-name>CMS User</role-name>
        </security-role-ref>
    </portlet>
    ...
<?xml version="1.0"?>
<!DOCTYPE portlets>

<portlets>
    <portlet id="EXT_HELLO_WORLD" narrow="true"/>
    <portlet id="EXT_STRUTS_HELLO_WORLD" struts-path="ext/strutshello" narrow="true"/>
    <portlet id="EXT_JSP_HELLO_WORLD" narrow="true"/>
</portlets>
jgambarios commented 1 month ago

Testing the https://github.com/dotCMS/plugin-seeds/tree/master/com.dotcms.portlet plugin example, installed in a docker run (just docker-ext-run trunk) I noticed the plugin was installed successfully, everything looks good on console, but when trying to add the new portlets in the admin "Roles & Tools" only the EXT_HELLO_WORLD and EXT_JSP_HELLO_WORLD portlets are visible, the struts portlet does not appears in the list.

EXT_HELLO_WORLD and EXT_JSP_HELLO_WORLD work as expected but EXT_STRUTS_HELLO_WORLD is missing.


Console successfully installation message:

18:31:10.258  INFO  portlet.Activator - Injecting: com.dotmarketing.osgi.portlet.HelloWorldAction into classloader: ParallelWebappClassLoader
  context: ROOT
  delegate: true
----------> Parent Classloader:
java.net.URLClassLoader@2d928643

18:31:10.287  INFO  portlet.Activator - Added Struts Action Mapping: com.dotmarketing.osgi.portlet.HelloWorldAction
18:31:10.289  INFO  portlet.Activator - Added Portlet: EXT_STRUTS_HELLO_WORLD
18:31:10.313  INFO  portlet.Activator - Added Portlet: EXT_HELLO_WORLD
18:31:10.315  INFO  portlet.Activator - Added Portlet: EXT_JSP_HELLO_WORLD
Started bundle: file:/data/shared/felix/load/osgi-portlets-example-0.2.jar

Missing portlet: image

bryanboza commented 1 month ago

Fixed, tested on the latest trunk // Docker // FF