使用 sqlcontainer contentContainer 自定义非 JCR magnolia 内容应用程序,无法将 ContentConnector 或 EventBus 注入到操作定义中
Posted
技术标签:
【中文标题】使用 sqlcontainer contentContainer 自定义非 JCR magnolia 内容应用程序,无法将 ContentConnector 或 EventBus 注入到操作定义中【英文标题】:custom non-JCR magnolia content app with sqlcontainer contentContainer, can't inject ContentConnector or EventBus to the action definition 【发布时间】:2017-05-20 00:09:23 【问题描述】:我正在为 magnolia 5.5.4 开发一个非 JCR 自定义内容应用程序,我创建了一个这样的容器:
public class ArticlesContainer extends SQLContainer
public ArticlesContainer(QueryDelegate delegate) throws SQLException
super(delegate);
// TODO Auto-generated constructor stub
还有一个treePresenter,我在其中初始化容器:
public Container initializeContainer()
JDBCConnectionPool pool;
ArticlesContainer container = null;
try
pool = new SimpleJDBCConnectionPool("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/pfeapp", "admindxbIwZL", "HduX7BJJaBAD");
QueryDelegate tq = new TableQuery("articles", pool);
container = new ArticlesContainer(tq);
catch (SQLException e)
// TODO Auto-generated catch block
e.printStackTrace();
return container;
到目前为止一切都很好,它工作得很好。 问题是当我尝试创建一个动作时,例如,我添加了这样的动作 AddArticleAction:
public class AddArticleAction<T extends AddArticleActionDefinition> extends AbstractAction<T>
private ContentConnector contentConnector;
private EventBus eventBus;
@Inject
public AddArticleAction(T definition, @Named(AdmincentralEventBus.NAME)EventBus eventBus)
super(definition);
this.eventBus = eventBus;
// TODO Auto-generated constructor stub
@Override
public void execute() throws ActionExecutionException
// TODO Auto-generated method stub
当我点击浏览器操作栏中的添加文章链接时,我得到了这个异常:
2017-05-20 00:28:22,321 错误 fo.magnolia.ui.contentapp.browser.BrowserPresenter:发生错误 在执行动作时 [addArticle] info.magnolia.ui.api.action.ActionExecutionException:动作执行 行动失败:addArticle at info.magnolia.ui.api.action.AbstractActionExecutor.execute(AbstractActionExecutor.java:64) 在 info.magnolia.ui.contentapp.browser.BrowserPresenter.executeAction(BrowserPresenter.java:347) 在 info.magnolia.ui.contentapp.browser.BrowserPresenter.onActionbarItemClicked(BrowserPresenter.java:306) 在 info.magnolia.ui.actionbar.ActionbarPresenter.onActionbarItemClicked(ActionbarPresenter.java:205) 在 info.magnolia.ui.actionbar.ActionbarViewImpl$1.actionTrigger(ActionbarViewImpl.java:67) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) 在 com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) 在 com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) 在 com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1008) 在 info.magnolia.ui.vaadin.actionbar.Actionbar.access$000(Actionbar.java:59) 在 info.magnolia.ui.vaadin.actionbar.Actionbar$1.onActionTriggered(Actionbar.java:72) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158) 在 com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) 在 com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:437) 在 com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:408) 在 com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273) 在 com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90) 在 com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) 在 com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1414) 在 com.vaadin.server.VaadinServlet.service(VaadinServlet.java:365) 在 info.magnolia.ui.admincentral.AdmincentralVaadinServlet.service(AdmincentralVaadinServlet.java:131) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 在 info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:148) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:69) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58) 在 info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:67) 在 info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:220) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:74) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:77) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:84) 在 info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94) 在 info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.module.site.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:119) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:73) 在 info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:127) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) 在 info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:155) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:128) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) 在 info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) 在 info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) 在 info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107) 在 info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67) 在 info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:108) 在 info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:94) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1368) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source) 引起: java.lang.NullPointerException 在 info.magnolia.objectfactory.CandidateParameterResolver.resolveParameter(CandidateParameterResolver.java:78) 在 info.magnolia.objectfactory.ObjectManufacturer.resolveParameter(ObjectManufacturer.java:166) 在 info.magnolia.objectfactory.ObjectManufacturer.resolveParameters(ObjectManufacturer.java:143) 在 info.magnolia.objectfactory.ObjectManufacturer.newInstance(ObjectManufacturer.java:86) 在 info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstanceWithParameterResolvers(GuiceComponentProvider.java:121) 在 info.magnolia.objectfactory.guice.GuiceComponentProvider.newInstance(GuiceComponentProvider.java:107) 在 info.magnolia.ui.api.action.AbstractActionExecutor.createAction(AbstractActionExecutor.java:90) 在 info.magnolia.ui.api.action.AbstractActionExecutor.execute(AbstractActionExecutor.java:61) ... 107 更多
我真的不明白问题出在哪里。
【问题讨论】:
【参考方案1】:您在AddArticleActionDefinition
中将implementationClass
设置为什么?它需要指向AddArticleAction
。我怀疑它没有,因此Caused by: java.lang.NullPointerException
异常。 Executor 无法调用您的操作,因为它没有设置。
【讨论】:
以上是关于使用 sqlcontainer contentContainer 自定义非 JCR magnolia 内容应用程序,无法将 ContentConnector 或 EventBus 注入到操作定义中的主要内容,如果未能解决你的问题,请参考以下文章