使用spring component-scan时Alfresco personService.createPerson错误

时间:2014-07-25 21:40:07

标签: spring alfresco component-scan

几周前,我开发了一款基于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创建人员

enter image description here

1 个答案:

答案 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接线替换它。