问题是某些页面无法在 Studio 中的其他位置复制和粘贴,我在任何频道中选择一个页面,然后右键单击 -> 复制,然后找到任何其他频道以右键单击 -> 粘贴。我得到一个空指针异常,我注意到标签objectGroupId不在粘贴失败的页面中,带有标签的页面没有问题。有人可以提供关于为什么不包含此标签的线索吗?我的理解是标签是由 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);
}
}
}
完整的堆栈跟踪是:
[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)
谢谢你。