Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

When adding a ACL to a resource getting UMException: string length wrong

Avatar

Level 2

When I try to add an a ACL to a resource I get the following exception:

com.adobe.repository.bindings.dsc.client.ResourceRepositoryClientException: ALC-REP-101-000: Caught UMException: string length wrong
        at com.adobe.repository.bindings.dsc.client.ResourceRepositoryClient.writeAccessControlList(ResourceRepositoryClient.java:879)

The code that I am using is the following:

// Set up a new access control list to grant access to the
// given user.
AccessControlList acl = new AccessControlList();

// Create permissions for the user
List permissions = new ArrayList();
permissions.add(AccessControlEntry.READ_METADATA_USER_PERM);
permissions.add(AccessControlEntry.READ_CONTENT_USER_PERM);
permissions.add(AccessControlEntry.WRITE_ACL_USER_PERM);
permissions.add(AccessControlEntry.WRITE_USER_PERM);
acl.setPermissionsForUser(user,permissions);

// Set the access control list for the document
repositoryClient.writeAccessControlList(docUri, acl, true);

Can anyone help me find what I am doing wrong?

Thanks

1 Accepted Solution

Avatar

Correct answer by
Level 4

Instead of passing the username you have to pass the User oid.

You can find the user's oid by using the DirectoryManager API

View solution in original post

5 Replies

Avatar

Former Community Member

Could you post the source in its entirety or send it to stwalker.adobe@gmail.com?

Steve

Avatar

Level 2

Hi Steve,

Here is the source as you requested:

import javax.activation.MimetypesFileTypeMap;
import java.io.*;
import java.util.*;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;
import com.adobe.repository.bindings.dsc.client.ResourceRepositoryClient;
import com.adobe.repository.infomodel.*;
import com.adobe.repository.infomodel.bean.*;
import com.adobe.repository.RepositoryException;
import com.adobe.idp.Document;

public class LCRepository
{
    private ServiceClientFactory                     scFactory;
    private ResourceRepositoryClient              repositoryClient;
    private RepositoryInfomodelFactoryBean    infomodelFactory;
    private String                                           currUser;

    static public final String separator = "/";

    public LCfiles(String username,String password)
    {
        currUser = username;

//Set connection properties required to invoke LiveCycle ES2
Properties connectionProps = new Properties();
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://ift-6:1099");

connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL, ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, username);
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, password);

        // Create the service client factory
        scFactory = ServiceClientFactory.createInstance(connectionProps);

        // Create a ResourceRepositoryClient object using the service client factory
        repositoryClient = new ResourceRepositoryClient(scFactory);

        // Create a RepositoryInfomodelFactoryBean needed for creating resources
        infomodelFactory = new RepositoryInfomodelFactoryBean(null);
    }
   
   // ..
    // Methods for creating folders, adding documents (resources) to folders,
    // listing folder content, reading a document, etc.
    // ..

   
    /*------------------------------------------------------------------------*/
    public final void grantACL(String docUri,String user) throws RepositoryException
    {
        // Set up a new access control list to grant access to the given user.
        AccessControlList acl = new AccessControlList();

        // Create permissions for the user
        List permissions = new ArrayList();
        permissions.add(AccessControlEntry.READ_METADATA_USER_PERM);
        permissions.add(AccessControlEntry.READ_CONTENT_USER_PERM);
        permissions.add(AccessControlEntry.WRITE_ACL_USER_PERM);
        permissions.add(AccessControlEntry.WRITE_USER_PERM);
        acl.setPermissionsForUser(user,permissions);

        // Set the access control list for the document
        repositoryClient.writeAccessControlList(docUri, acl, true);
    }
}

The grantACL method call would be similar to the following:

lcRepHandle = new LCRepository(userName,password); 

try
{

     lcRepHandle.grantACL(document.getPath(), user);

}
catch (RepositoryException ex)
{
     Logger.getLogger(DocumentProperties.class.getName()).log(Level.SEVERE, null, ex);
}

Where "document" is a Resource and "user" is a string containing a userID.

Thanks

Avatar

Level 2

Anyone knows a solution to this problem. In addition to the code posted above, I try with running the "Quick Start (EJB mode): Managing access control lists using the Java API" and I get the same Exception.

Avatar

Correct answer by
Level 4

Instead of passing the username you have to pass the User oid.

You can find the user's oid by using the DirectoryManager API

Avatar

Level 2

Thanks Chetan.

That solved the problem. The documentation did not make this clear.