我正在修改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中以编程方式创建文件夹?
答案 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将在初始化期间为你设置上下文