Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(Content) fixes #23184 : Improve the field validation exception …
…log (#30100) ### Proposed Changes * Improving the amount of information printed by the Contentlet Validation process. * Some methods in the call stack were updated so they don't have to print the error message again. And now, we're also logging the name and ID of the Workflow Action that triggered the validation. * The error data was not reduced at all, but just improved they way it's printed to make it easier to read and take less space in the log. When validating a text field in a Contentlet, the error logging went from this: ```log [20/09/24 19:19:36:147 GMT] INFO util.ActivityLogger: class com.dotcms.content.elasticsearch.business.ESContentletAPIImpl: system : Contentlet to be saved: , StartDate: N/D; EndDate: N/D; User:dotcms.org.1; ContentIdentifier: [20/09/24 19:19:36:148 GMT] WARN business.ESContentletAPIImpl: Field [title] is required [20/09/24 19:19:36:149 GMT] WARN business.ESContentletAPIImpl: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title [20/09/24 19:19:36:149 GMT] WARN business.ESContentletAPIImpl: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title [20/09/24 19:19:36:149 GMT] WARN business.ESContentletAPIImpl: com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.validateContentlet(ESContentletAPIImpl.java:7376) [20/09/24 19:19:36:150 GMT] WARN business.ESContentletAPIImpl: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title com.dotmarketing.portlets.contentlet.business.DotContentletValidationException: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.validateContentlet(ESContentletAPIImpl.java:7376) ~[?:?] at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.validateContentlet(ESContentletAPIImpl.java:8115) ~[?:?] at com.dotmarketing.portlets.contentlet.business.ContentletAPIInterceptor.validateContentlet(ContentletAPIInterceptor.java:2271) ~[?:?] at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.internalCheckin(ESContentletAPIImpl.java:5382) ~[?:?] at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.lambda$checkin$59(ESContentletAPIImpl.java:5001) ~[?:?] at com.dotcms.concurrent.lock.StripedLockImpl.tryLock(StripedLockImpl.java:100) ~[?:?] at com.dotcms.concurrent.lock.StripedLockImpl.tryLock(StripedLockImpl.java:55) ~[?:?] at com.dotcms.concurrent.lock.IdentifierStripedLock.tryLock(IdentifierStripedLock.java:16) ~[?:?] at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.checkin(ESContentletAPIImpl.java:5000) ~[?:?] at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.checkin(ESContentletAPIImpl.java:9908) ~[?:?] at com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.checkin(ESContentletAPIImpl.java:9971) ~[?:?] at com.dotmarketing.portlets.contentlet.business.ContentletAPIInterceptor.checkin(ContentletAPIInterceptor.java:195) ~[?:?] at com.dotmarketing.portlets.workflows.actionlet.SaveContentActionlet.executeAction(SaveContentActionlet.java:79) ~[?:?] at com.dotmarketing.portlets.workflows.business.WorkflowAPIImpl.fireWorkflowPostCheckin(WorkflowAPIImpl.java:2424) ~[?:?] at com.dotmarketing.portlets.workflows.business.WorkflowAPIImpl.lambda$fireContentWorkflow$73(WorkflowAPIImpl.java:3382) ~[?:?] at com.dotcms.util.ThreadContextUtil.wrapVoidNoReindex(ThreadContextUtil.java:85) ~[?:?] at com.dotmarketing.portlets.workflows.business.WorkflowAPIImpl.fireContentWorkflow(WorkflowAPIImpl.java:3382) ~[?:?] at com.dotmarketing.portlets.contentlet.business.web.ContentletWebAPIImpl.saveWebAsset(ContentletWebAPIImpl.java:538) ~[?:?] at com.dotmarketing.portlets.contentlet.business.web.ContentletWebAPIImpl.saveContent(ContentletWebAPIImpl.java:161) ~[?:?] at com.dotmarketing.portlets.contentlet.ajax.ContentletAjax.saveContent(ContentletAjax.java:1987) ~[?:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] at com.dotcms.repackage.org.directwebremoting.impl.CreatorModule$1.doFilter(CreatorModule.java:229) ~[?:?] at com.dotcms.repackage.org.directwebremoting.impl.CreatorModule.executeMethod(CreatorModule.java:241) ~[?:?] at com.dotcms.repackage.org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:379) ~[?:?] at com.dotcms.repackage.org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:332) ~[?:?] at com.dotcms.repackage.org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:104) ~[?:?] at com.dotcms.repackage.org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120) ~[?:?] at com.dotcms.repackage.org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141) ~[?:?] at com.dotmarketing.servlets.DwrWrapperServlet.doPost(DwrWrapperServlet.java:60) ~[?:?] at javax.servlet.http.HttpServlet.service(HttpServlet.java:555) ~[?:?] at javax.servlet.http.HttpServlet.service(HttpServlet.java:623) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotmarketing.filters.CMSFilter.doFilterInternal(CMSFilter.java:181) ~[?:?] at com.dotmarketing.filters.CMSFilter.doFilter(CMSFilter.java:61) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotcms.visitor.filter.servlet.VisitorFilter.doFilter(VisitorFilter.java:81) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotcms.vanityurl.filters.VanityURLFilter.doFilter(VanityURLFilter.java:107) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) ~[?:?] at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) ~[?:?] at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) ~[?:?] at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:389) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotmarketing.filters.TimeMachineFilter.doFilter(TimeMachineFilter.java:137) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotmarketing.filters.ThreadNameFilter.doFilter(ThreadNameFilter.java:88) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotmarketing.filters.CookiesFilter.doFilter(CookiesFilter.java:53) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotmarketing.filters.CharsetEncodingFilter.doFilter(CharsetEncodingFilter.java:99) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotcms.filters.interceptor.AbstractWebInterceptorSupportFilter.doFilter(AbstractWebInterceptorSupportFilter.java:90) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:129) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at com.dotcms.filters.NormalizationFilter.doFilter(NormalizationFilter.java:89) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178) ~[?:?] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153) ~[?:?] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168) ~[?:?] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[?:?] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:481) ~[?:?] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130) ~[?:?] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670) ~[?:?] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[?:?] at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:765) ~[?:?] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[?:?] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) ~[?:?] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) ~[?:?] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[?:?] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928) ~[?:?] at org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1732) ~[?:?] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[?:?] at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1295) ~[?:?] at org.apache.tomcat.util.net.SecureNio2Channel$HandshakeWriteCompletionHandler.completed(SecureNio2Channel.java:121) ~[?:?] at org.apache.tomcat.util.net.SecureNio2Channel$HandshakeWriteCompletionHandler.completed(SecureNio2Channel.java:114) ~[?:?] at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127) ~[?:?] at java.base/sun.nio.ch.Invoker.invokeDirect(Invoker.java:158) ~[?:?] at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.implWrite(UnixAsynchronousSocketChannelImpl.java:746) ~[?:?] at java.base/sun.nio.ch.AsynchronousSocketChannelImpl.write(AsynchronousSocketChannelImpl.java:383) ~[?:?] at java.base/sun.nio.ch.AsynchronousSocketChannelImpl.write(AsynchronousSocketChannelImpl.java:400) ~[?:?] at org.apache.tomcat.util.net.SecureNio2Channel.handshakeInternal(SecureNio2Channel.java:302) ~[?:?] at org.apache.tomcat.util.net.SecureNio2Channel.handshake(SecureNio2Channel.java:222) ~[?:?] at org.apache.tomcat.util.net.Nio2Endpoint$SocketProcessor.doRun(Nio2Endpoint.java:1709) ~[?:?] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[?:?] at org.apache.tomcat.util.net.AbstractEndpoint.processSocket(AbstractEndpoint.java:1295) ~[?:?] at org.apache.tomcat.util.net.SecureNio2Channel$HandshakeReadCompletionHandler.completed(SecureNio2Channel.java:104) ~[?:?] at org.apache.tomcat.util.net.SecureNio2Channel$HandshakeReadCompletionHandler.completed(SecureNio2Channel.java:97) ~[?:?] at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:127) ~[?:?] at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishRead(UnixAsynchronousSocketChannelImpl.java:439) ~[?:?] at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:191) ~[?:?] at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) ~[?:?] at java.base/sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:306) ~[?:?] at java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[?:?] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?] at java.base/java.lang.Thread.run(Thread.java:829) [?:?] [20/09/24 19:19:36:150 GMT] WARN actionlet.SaveContentActionlet: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title [20/09/24 19:19:36:150 GMT] WARN actionlet.SaveContentActionlet: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title [20/09/24 19:19:36:150 GMT] WARN actionlet.SaveContentActionlet: com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.validateContentlet(ESContentletAPIImpl.java:7376) [20/09/24 19:19:36:151 GMT] ERROR business.WorkflowAPIImpl: There was an unexpected error: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title [20/09/24 19:19:36:151 GMT] WARN web.ContentletWebAPIImpl: com.dotmarketing.exception.DotRuntimeException: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title [20/09/24 19:19:36:151 GMT] WARN web.ContentletWebAPIImpl: Contentlet with id:`Unknown/New` and title:`` has invalid / missing field(s). List of non valid fields REQUIRED: title/Title ``` To this: ```log 13:27:43.015 INFO util.ActivityLogger - class com.dotcms.content.elasticsearch.business.ESContentletAPIImpl: system : Contentlet to be saved: , StartDate: N/D; EndDate: N/D; User:dotcms.org.1; ContentIdentifier: 13:27:43.016 WARN business.ESContentletAPIImpl - Field [title] is required 13:27:43.016 WARN business.ESContentletAPIImpl - Contentlet with ID 'Unknown/New' [''] has invalid/missing field(s). - Fields: [REQUIRED]: Title (title) 13:27:43.016 WARN business.ESContentletAPIImpl - com.dotcms.content.elasticsearch.business.ESContentletAPIImpl.validateContentlet(ESContentletAPIImpl.java:7382) 13:27:43.016 ERROR business.WorkflowAPIImpl - Failed to fire Workflow Action 'Publish' [b9d89c80-3d88-4311-8365-187323c96436]: Contentlet with ID 'Unknown/New' [''] has invalid/missing field(s). - Fields: [REQUIRED]: Title (title) ``` ```
- Loading branch information