How to make the following code in alfresco work pr

2019-09-04 15:46发布

问题:

I have created a class by the name CreateUserHandler in Alfresco in order to generate the username and random password for an email address. I am getting exception in this..Please someone help me with this...

public class CreateUserHandler {
     private static Logger logger = LoggerFactory.getLogger(CreateUserHandler.class);
     private NodeService nodeService = getServiceRegistry().getNodeService();
     private PersonService personService = getServiceRegistry()
                .getPersonService();
     private ActionService actionService = getServiceRegistry()
                .getActionService();
     private SearchService searchService = getServiceRegistry()
                .getSearchService();

        private PolicyComponent eventManager;
        private ServiceRegistry serviceRegistry;
        //private String userName;

        public void setServiceRegistry(ServiceRegistry serviceRegistry) {
            this.serviceRegistry = serviceRegistry;
        }

        private ServiceRegistry getServiceRegistry() {
            // TODO Auto-generated method stub
            return null;
        }

        public void setPolicyComponent(PolicyComponent policyComponent) {
            this.eventManager = policyComponent;
        }

        public void registerEventHandlers() {
            eventManager.bindClassBehaviour(
                    NodeServicePolicies.OnCreateNodePolicy.QNAME,
                    ContentModel.TYPE_USER,
                    new JavaBehaviour(this, "onaddUser",
                            Behaviour.NotificationFrequency.EVERY_EVENT));


        }
        protected String userName = null;
        protected String password = null;
        /**
         * Get user password
         * @return user password
         */
        public String getPassword() {
           return password;
        }

        /**
         * Set user password
         * @param password user password
         */
        public void setPassword(String password) {
           this.password = password;
        }


        public void onaddUser(ChildAssociationRef parentChildAssocRef) {
            //new PersonService().setPersonProperties(userName, properties);
            System.out.println("Creation of user successfully completed");

            //NodeRef userNodeRef;
            // String sTempUserName = this.userName;
            NodeRef person = null;
             String username = (String) serviceRegistry.getNodeService().getProperty(person,ContentModel.PROP_USERNAME);



                     System.out.println("Username got :" + username);

                      if (personService.personExists(username)) {

                            //NodeRef person = personService.getPerson(sTempUserName);
                          person = personService.getPerson(username);

                            String address = (String) nodeService.getProperty(person,

                                        ContentModel.PROP_EMAIL);

                            if (address != null && address.length() != 0) {

                                  // recipients.add(address);

                                  System.out.println("Email Address is :" + address);
                                  String newPassword = Password.generatePassword();

                                  char[] cadChars = new char[newPassword.length()];

                                  for (int i=0; i<newPassword.length(); i++) 
                                  {
                                     cadChars[i] = newPassword.charAt(i);
                                  }
                                  // Save new password 
                                  serviceRegistry.getAuthenticationService().setAuthentication(username, newPassword.toCharArray());
                                  // Save new password
                                   setPassword(newPassword);
                                   System.out.println("Password is :" + newPassword);

                            }

                      }
                }




}

I an also attaching the log stack-trace of null-pointer exception:

Nov 10, 2016 4:46:33 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.alfresco.repo.webdav.WebDAVSessionListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.eisenvault.autoMailgenerate.createUserHandler' defined in class path resource [alfresco/module/demoact1-repo/context/service-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.eisenvault.autoMailgenerate.CreateUserHandler]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1038)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:984)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:633)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.alfresco.web.app.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:63)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.eisenvault.autoMailgenerate.CreateUserHandler]: Constructor threw exception; nested exception is java.lang.NullPointerException
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1031)
    ... 23 more
Caused by: java.lang.NullPointerException
    at com.eisenvault.autoMailgenerate.CreateUserHandler.<init>(CreateUserHandler.java:30)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    ... 25 more

回答1:

This is probably because of

    private ServiceRegistry getServiceRegistry() {
        // TODO Auto-generated method stub
        return null;
    }

and

 private PersonService personService = getServiceRegistry()
            .getPersonService();

As a result NPE is thrown.



回答2:

This

private NodeService nodeService = getServiceRegistry().getNodeService();

will not work if getServiceRegistry() always returns null.

The easiest way is to remove the member nodeService and change lines like

String address = (String) nodeService.getProperty(person, ContentModel.PROP_EMAIL);

to

String address = (String) serviceRegistry.getNodeService().getProperty(person, ContentModel.PROP_EMAIL);

Do the same for personService, actionService, and searchService.



标签: java alfresco