几周前,我开发了一款基于Alfresco 3.4.14的AMP。 在该模块中,我创建了一些自定义服务。其中一项服务用于管理用户,其方法是创建新用户:
public NodeRef createUser(<my_parameters>) {
..........................
..........................
HashMap<QName, Serializable> properties = new HashMap<QName, Serializable>();
properties.put(ContentModel.PROP_USERNAME, username);
properties.put(ContentModel.PROP_PASSWORD, password);
..........................
..........................
NodeRef person = personService.createPerson(properties);
return person;
}
所有服务都是在露天上下文文件中定义的:
<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="customUserService" class="com.mycustom.service.impl.CustomUsersServiceImpl">
<property name="personService" ref="PersonService"/>
<property name="nodeService" ref="NodeService"/>
</bean>
<bean id="customProjectsService" class="com.mycustom.service.impl.CustomProjectsServiceImpl">
<property name="searchService" ref="SearchService"/>
<property name="nodeService" ref="NodeService"/>
</bean>
</beans>
一切都运转正常。我能够创建用户,执行我的其他定制服务......直到这里完美!!!!!!!!该应用程序正常运行。
几天前,我们决定开始使用spring注释,而不是定义上下文中的所有bean:
package com.mycustom.service.impl;
@Service("customUsersService")
public class CustomUsersServiceImpl implements CustomUsersService {
@Override
public NodeRef createUser(<my_parameters>) {
}
}
在上下文文件中,使用spring component-scan:
<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.mycustom.service" />
</beans>
所有服务都正常运行,应用程序看起来也正常工作。我们很高兴,因为我们可以使用注释来解耦我们的应用程序。
BUTTTTTTTTTTTT,当我尝试创建用户时,通过资源管理器或通过应用程序我得到了同样的错误: 由于错误而无法创建Person:xxxxxxx beforeCreateNode:使用PersonService创建人员
答案 0 :(得分:0)
调试PersonServiceImpl类,我检测到错误在行中 beforeCreateNodeValidationBehaviour.enable();
public NodeRef createPerson(Map<QName, Serializable> properties, Set<String> zones) {
.....................
.....................
NodeRef personRef = null;
try
{
beforeCreateNodeValidationBehaviour.disable();
personRef = nodeService.createNode(
getPeopleContainer(),
ContentModel.ASSOC_CHILDREN,
getChildNameLower(userName), // Lowercase:
ContentModel.TYPE_PERSON, properties).getChildRef();
}
finally
{
//ERROR!!!!!!!!!!!!!!!!
beforeCreateNodeValidationBehaviour.enable();
}
.....................
.....................
}
经过一些调查,当我们恢复代码并删除spring组件扫描时,应用程序再次正常工作。
我们开了一张Alfresco支持的门票,他们告诉我们,这个问题已在露天4.1.4修复了
然后使用像我们这样的Alfresco的先前版本的人,要小心这个并删除组件扫描并用手动bean接线替换它。