如何获得有效的Alfresco应用程序上下文来创建文件夹?

时间:2015-08-01 16:01:07

标签: java spring email alfresco

我正在修改InboundSMTP以为新邮件创建文件夹。似乎需要fileFolderService.create,其中包含文件夹内容类型的参数。回过头来我需要一个ServiceRegistry,而ServiceRegistry又需要ApplicationContext。

这是我尝试做的事情:

["a", "b", "c"]

但是,这会导致入站电子邮件被拒绝。我可以注释掉最后3行但它仍然以同样的方式失败,所以我的ApplicationContext调用出了问题。即使只是调用,我也会收到以下错误(这对我没有意义):

ApplicationContext appContext = new ClassPathXmlApplicationContext("alfresco/application-context.xml");
ServiceRegistry serviceRegistry = (ServiceRegistry) appContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
FileFolderService fileFolderService=serviceRegistry.getFileFolderService();
FileInfo object = fileFolderService.create(nodeRef, messageSubject, ContentModel.TYPE_FOLDER);

在尝试获取ApplicationContext时,我做错了什么?或者,我应该尝试另一种方法/是否有更好的方式在Alfresco中以编程方式创建文件夹?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您不需要注入应用程序上下文。

修改电子邮件处理的最佳做法涉及创建自定义处理程序。以下是定义此内容的重要代码:

public class CustomFolderEmailMessageHandler extends AbstractEmailMessageHandler {

    public void processMessage(NodeRef nodeRef, EmailMessage message) {
        NodeService nodeService = getNodeService();
    }

}

抽象类有一个getNodeService()方法,它为您提供节点服务。这是FileFolderService的详细版本。

您应该使用FolderEmailMessageHandler作为指南:https://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root/projects/repository/source/java/org/alfresco/email/server/handler/FolderEmailMessageHandler.java

要注册您的消息处理程序,您需要覆盖emailService bean: https://wiki.alfresco.com/wiki/Inbound_SMTP_Email_Server_Configuration#Implementing_A_Custom_Node_Handler

答案 1 :(得分:2)

您几乎肯定不想获得您需要的应​​用程序上下文!

如果您想要"所有常见服务",请不要获取上下文。相反,请求Spring给你Alfresco ServiceRegistry。它可以作为ID为$('a.next-checkout').on('click', function () { var nextLi = $('.titles li.opened').next().length ? $('.titles li.opened').next() : $('.titles li:first'); $('.titles').find(nextLi).trigger('click'); return false; }); 的bean使用,并为您可能需要的主要服务提供方便的getter

在你的情况下,如果你知道你想要ServiceRegistry,请为你的bean问春天!如果您要覆盖FileFolderService bean(例如),那么您需要一个像bean这样的bean:

documentEmailMessageHandler

然后在您的自定义实现中,提供方法<bean id="documentEmailMessageHandler" parent="emailMessageHandlerBase" class="com.something.else.DocumentEmailMessageHandler"> <property name="fileFolderService" ref="FileFolderService"/> </bean> ,该方法可以保存服务以供以后使用。如果这对您来说是新闻,请遵循任何标准的春季教程!

如果你确实需要Spring Application Context,那么请遵循正常的Spring模式,让你的bean类实现ApplicationContextAware interface,spring将在初始化期间为你设置上下文