cancel
Showing results for 
Search instead for 
Did you mean: 

again unable to create an user via Webservices. [solved]

adnuser
Champ in-the-making
Champ in-the-making
first my sample code:

   AdministrationServiceSoapBindingStub administrationService = WebServiceFactory.getAdministrationService();
        RepositoryServiceSoapBindingStub repositoryService= WebServiceFactory.getRepositoryService();

and few things to check the homefolder already exist and check if the users already exists.



         // Create the new users
             NewUserDetails[] newUsers = new NewUserDetails[1] ;
              NewUserDetails newUser = new NewUserDetails(
                       userLogin, userPassword,
                       createPersonProperties(homeFolder,
                       userName, userMiddlename, userSurname,
                       userMail, userOrg));
 
              UserDetails[] userDetails =
                  administrationService.createUsers(new NewUserDetails[]{newUser});

the createpersonprop function

   private static NamedValue[] createPersonProperties(
            String homeFolder,
            String firstName,
            String middleName,
            String lastName,
            String email,
            String orgId)
       {
          // Create the new user objects
          return new NamedValue[] {
             new NamedValue(Constants.PROP_USER_HOMEFOLDER, false, homeFolder, null),
             new NamedValue(Constants.PROP_USER_FIRSTNAME,  false, firstName, null),
             new NamedValue(Constants.PROP_USER_MIDDLENAME, false, middleName, null),
                new NamedValue(Constants.PROP_USER_LASTNAME,   false, lastName, null),
                new NamedValue(Constants.PROP_USER_EMAIL,      false, email, null),
                new NamedValue(Constants.PROP_USER_ORGID,      false, orgId, null)};
       }

and finally the error on client side.




AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: Premature end of file.


i have found the sample code in org.alfresco.webservice.test.AdministrationServiceSystemTest



/**
* Administration service system test
*
* @author Roy Wetherall
*/
public class AdministrationServiceSystemTest extends BaseWebServiceSystemTest
{
    private static Log logger = LogFactory.getLog(AdministrationServiceSystemTest.class);
   
    public void testGetUsersBatching() throws Exception
    {
        int batchSize = 5;
        QueryConfiguration queryCfg = new QueryConfiguration();
        queryCfg.setFetchSize(batchSize);
        WebServiceFactory.getAdministrationService().setHeader(
                new RepositoryServiceLocator().getServiceName().getNamespaceURI(),
                "QueryHeader",
                queryCfg);
       
        // Get the details of the new users
        String homeFolder = store.getScheme() + "://" + store.getAddress() + "/" + folderReference.getUuid();
        String one = Long.toString(System.currentTimeMillis());
        String two = one + "2";       
        NewUserDetails[] newUsers = new NewUserDetails[] {
                new NewUserDetails(
                        "user" + one,
                        "password" + one,
                        createPersonProperties(homeFolder, "first" + one, "middle" + one, "last" + one, "email" + one, "org" + one)),
                new NewUserDetails(
                        "user" + two,
                        "password2" + two,
                        createPersonProperties(homeFolder, "first" + two, "middle" + two, "last" + two, "email" + two, "org" + two)) };

        // Create the new users
        WebServiceFactory.getAdministrationService().createUsers(newUsers);
       
        UserQueryResults results = WebServiceFactory.getAdministrationService().queryUsers(null);
        assertNotNull(results);





and at least the server version 2.1 RC1
after all this problem the alfresco server working well.


vincent

ps : great Jobs …
1 REPLY 1

adnuser
Champ in-the-making
Champ in-the-making
ok a little sample code to create:
   public static void userAdd( String userLogin, String userPassword,
          String userName,String userMiddlename, String userSurname,
          String userMail, String userOrg) throws Exception {
       
        repositoryService     = WebServiceFactory.getRepositoryService();
        contentService         = WebServiceFactory.getContentService();
        administrationService = WebServiceFactory.getAdministrationService();

        int batchSize = 5;
        QueryConfiguration queryCfg = new QueryConfiguration();
        queryCfg.setFetchSize(batchSize);
        WebServiceFactory.getAdministrationService().setHeader(
                new RepositoryServiceLocator().getServiceName().getNamespaceURI(),
                "QueryHeader",
                queryCfg);

        // check the user
        boolean existUser=false;     
        try {
            // test before the user
           administrationService.getUser(userLogin);
           existUser=true;
       } catch (Exception e){
          existUser=false;
       }

       if (existUser) {
          throw new Exception("User " + userLogin + " Already exists.");
       }

        Store store = new Store(Constants.WORKSPACE_STORE,"SpacesStore");
        Reference folderReference = new Reference(store,null,"/app:company_home/app:user_homes/cm:"+userLogin);
        Node[] nodes=null;
       
        // try to create the folder
        try{
           nodes = repositoryService.get(new Predicate(new Reference[]{folderReference},store,null));
        }
        catch (Exception e) {
            // Create parent reference to company home
            ParentReference parentReference = new ParentReference(
                    store,
                    null,
                    "/app:company_home/app:user_homes",
                    Constants.ASSOC_CONTAINS,
                    Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, userLogin));
           
            // Create folder
            NamedValue[] properties = new NamedValue[]{Utils.createNamedValue(Constants.PROP_NAME, userLogin)};
            CMLCreate create = new CMLCreate("1", parentReference, null, null, null, Constants.TYPE_FOLDER, properties);
            CML cml = new CML();
            cml.setCreate(new CMLCreate[]{create});
            UpdateResult[] results = WebServiceFactory.getRepositoryService().update(cml);  
           
            // Create parent reference to sample folder
            Reference userFolder = results[0].getDestination();
            ParentReference parentReference2 = new ParentReference(
                    store,
                    userFolder.getUuid(),
                    null,
                    Constants.ASSOC_CONTAINS,
                    Constants.createQNameString(Constants.NAMESPACE_CONTENT_MODEL, userLogin));
        }

        // get the reference for the folder
        Reference userFolder =null;
       try {
           nodes = repositoryService.get(new Predicate(new Reference[]{folderReference},store,null));
           if (nodes.length == 1) {
              userFolder = nodes[0].getReference();
           }
        } catch (Exception e) {
           e.printStackTrace();
          throw new Exception("Unable to create the new folder for user "+userLogin+".");                      
        }
             
       try {
            String homeFolder = store.getScheme() + "://" + store.getAddress() + "/" + userFolder.getUuid();
           // Create the new users
            NewUserDetails[] newUsers = new NewUserDetails[1] ;
             NewUserDetails newUser = new NewUserDetails(
                      userLogin, userPassword,
                      createPersonProperties(homeFolder,
                      userName, userMiddlename, userSurname,
                      userMail, userOrg));
 
             UserDetails[] userDetails =
                 administrationService.createUsers(new NewUserDetails[]{newUser});
         }
         catch ( Exception e) {
            e.printStackTrace();
            throw new Exception("Unable to create the new user.");
         }
         
       System.out.println("the user "+userLogin+" has been created and her folder too.");
    }

/*
* create the property's
*/   
    private static NamedValue[] createPersonProperties(
            String homeFolder,
            String firstName,
            String middleName,
            String lastName,
            String email,
            String orgId)
       {
          // Create the new user objects
          return new NamedValue[] {
             new NamedValue(Constants.PROP_USER_HOMEFOLDER, false, homeFolder, null),
             new NamedValue(Constants.PROP_USER_FIRSTNAME,  false, firstName, null),
             new NamedValue(Constants.PROP_USER_MIDDLENAME, false, middleName, null),
                new NamedValue(Constants.PROP_USER_LASTNAME,   false, lastName, null),
                new NamedValue(Constants.PROP_USER_EMAIL,      false, email, null),
                new NamedValue(Constants.PROP_USER_ORGID,      false, orgId, null)};
       }

and if you want a little code to delete..

   public static void userDel( String userLogin, boolean userDeleteRepo ) throws Exception {
        repositoryService     = WebServiceFactory.getRepositoryService();
        contentService         = WebServiceFactory.getContentService();
        administrationService = WebServiceFactory.getAdministrationService();
        // check the user
        try {
            // test before the user
           administrationService.getUser(userLogin);
       } catch (Exception e){
          throw new Exception("User " + userLogin + " does not exists.");
       }
       
       administrationService.deleteUsers(new String[]{userLogin});
       System.out.println("The user "+userLogin+" has been deleted.");

        if (userDeleteRepo){
           Store store = new Store(Constants.WORKSPACE_STORE,"SpacesStore");
           Reference folderReference = new Reference(store,null,"/app:company_home/app:user_homes/cm:"+userLogin);
       
           // get the reference for the folder
           try {
              repositoryService.get(new Predicate(new Reference[]{folderReference},store,null));
           } catch (Exception e) {
              e.printStackTrace();
              throw new Exception("Unable to get the folder for user "+userLogin+".");                      
           }
       
           try {
              CML cml = new CML();
              CMLDelete cmlDelete = new CMLDelete();
              cmlDelete.setWhere(new Predicate(new Reference[]{folderReference},store,null));
              cml.setDelete(new CMLDelete[]{cmlDelete});
              UpdateResult[] results = repositoryService.update(cml);
           }
           catch (Exception e) {
              e.printStackTrace();
           }
           System.out.println("the folder "+userLogin+" has been deleted.");
        }
    }

have a nice day!
:lol: