-1

The issue is that some pages can't be copied and pasted somewhere else in Studio, I select a page in any channel and then right-click -> copy and then find any other channel to right-click -> paste. I get a null pointer exception, I noted that the tag objectGroupId is not in the pages failing to be pasted, the pages with the tag have no problems. Can somebody provide a clue as to why this tag may not be included ? Is my understanding that the tag is automatically added by Crafter.

// groupIdNode will be Null since there is no objectGroupId node in document
Node groupIdNode = root.selectSingleNode("//" + DmXmlConstants.ELM_GROUP_ID);
if (groupIdNode != null) {
    // originalGroupId will be Null since groupIdNode is Null
    originalGroupId = ((Element)groupIdNode).getText();
    ((Element)groupIdNode).setText(params.get(DmConstants.KEY_PAGE_GROUP_ID));
}

List<Node> keys = root.selectNodes("//key");
if (keys != null) {
    for(Node keyNode : keys) {
        String keyValue = ((Element)keyNode).getText();
        keyValue = keyValue.replaceAll(originalPageId, params.get(DmConstants.KEY_PAGE_ID));

        // This line throws the NullPointerException since originalGroupId is Null
        keyValue = keyValue.replaceAll(originalGroupId, params.get(DmConstants.KEY_PAGE_GROUP_ID));

        if(keyValue.contains("/page")) {
            ((Element)keyNode).setText(keyValue);
        }
    }
}

The full stacktrace is:

[ERROR] 2018-06-13 15:23:33,147 [ajp-nio-7009-exec-3] [clipboard.ClipboardServiceImpl] | Paste operation failed for item {0} to dest path `{1}, isCut: {2} 
java.lang.NullPointerException
    at java.util.regex.Pattern.<init>(Pattern.java:1350)
    at java.util.regex.Pattern.compile(Pattern.java:1028)
    at java.lang.String.replaceAll(String.java:2223)
    at org.craftercms.studio.impl.v1.service.content.ContentServiceImpl.updateContentForCopy(ContentServiceImpl.java:1062)
    at org.craftercms.studio.impl.v1.service.content.ContentServiceImpl.copyContent(ContentServiceImpl.java:535)
    at org.craftercms.studio.impl.v1.service.content.ContentServiceImpl.copyContent(ContentServiceImpl.java:468)
    at org.craftercms.studio.impl.v1.service.clipboard.ClipboardServiceImpl.pasteItems(ClipboardServiceImpl.java:106)
    at org.craftercms.studio.impl.v1.service.clipboard.ClipboardServiceImpl.paste(ClipboardServiceImpl.java:89)
    at org.craftercms.studio.api.v1.service.clipboard.ClipboardService$paste$1.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:138)
    at scripts.api.impl.clipboard.SpringClipboardServices.paste(SpringClipboardServices.groovy:43)
    at scripts.api.impl.clipboard.SpringClipboardServices$paste$1.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
    at scripts.api.ClipboardServices.paste(ClipboardServices.groovy:31)
    at scripts.api.ClipboardServices$paste$3.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:110)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:138)
    at paste-item_get.run(paste-item.get.groovy:11)
    at groovy.util.GroovyScriptEngine.run(GroovyScriptEngine.java:589)
    at org.craftercms.engine.scripting.impl.GroovyScript.execute(GroovyScript.java:55)
    at org.craftercms.engine.controller.rest.RestScriptsController.executeScript(RestScriptsController.java:131)
    at org.craftercms.engine.controller.rest.RestScriptsController.handleRequestInternal(RestScriptsController.java:83)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:154)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.craftercms.studio.impl.v1.repository.cached.ResponseCacheFilter.doFilter(ResponseCacheFilter.java:44)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.craftercms.studio.impl.v1.web.filter.StudioSecurityFilter.doFilterInternal(StudioSecurityFilter.java:100)
    at org.craftercms.studio.impl.v1.web.filter.StudioSecurityFilter.doFilter(StudioSecurityFilter.java:56)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.craftercms.security.servlet.filters.RequestSecurityFilter$1.processRequest(RequestSecurityFilter.java:193)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.UrlAccessRestrictionCheckingProcessor.processRequest(UrlAccessRestrictionCheckingProcessor.java:147)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.SecurityExceptionProcessor.processRequest(SecurityExceptionProcessor.java:82)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.SavedRequestAwareProcessor.processRequest(SavedRequestAwareProcessor.java:70)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.MellonAutoLoginProcessor.processRequest(MellonAutoLoginProcessor.java:108)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.RememberMeAutoLoginProcessor.processRequest(RememberMeAutoLoginProcessor.java:38)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.LogoutProcessor.processRequest(LogoutProcessor.java:104)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.LoginProcessor.processRequest(LoginProcessor.java:168)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.ReturnCurrentAuthenticationProcessor.processRequest(ReturnCurrentAuthenticationProcessor.java:59)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.CurrentAuthenticationResolvingProcessor.processRequest(CurrentAuthenticationResolvingProcessor.java:86)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.processors.impl.AddSecurityCookiesProcessor.processRequest(AddSecurityCookiesProcessor.java:74)
    at org.craftercms.security.processors.impl.RequestSecurityProcessorChainImpl.processRequest(RequestSecurityProcessorChainImpl.java:59)
    at org.craftercms.security.servlet.filters.RequestSecurityFilter.doFilterInternal(RequestSecurityFilter.java:139)
    at org.craftercms.security.servlet.filters.RequestSecurityFilter.doFilter(RequestSecurityFilter.java:110)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.craftercms.engine.servlet.filter.SiteContextResolvingFilter.doFilter(SiteContextResolvingFilter.java:46)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.craftercms.engine.servlet.filter.ExceptionHandlingFilter.doFilter(ExceptionHandlingFilter.java:56)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.craftercms.commons.http.RequestContextBindingFilter.doFilter(RequestContextBindingFilter.java:78)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:478)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    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)

Thank you.

1 Answers1

0

Hi @Daniel this looks like a possible bug to me. My take on this is, for users of Crafter CMS still on the 2.5.x code line consider either upgrading to the latest 2.5.x release or if at all possible go to 3.x.

If you are on the latest patch release and still seeing this behavior, create a Github issue ticket https://github.com/craftercms/craftercms/issues with very clear instructions about how to reproduce the error.

Russ Danner
  • 693
  • 3
  • 11