You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-user@jakarta.apache.org by Krishna Kankipati <kk...@baan.com> on 2004/08/02 19:45:36 UTC

Problem with "proppatchMethod" for property "group-member-set"

Hi,
	I am writing a wrapper on top of WebDav Client 2.1 M1 (with latest
CVS code for DOMUtils.java). I am having a problem executing
proppatchMethod() for the property "group-member-set". I am trying to assign
user "john" to role "root". If I try the same through DAVExplorer 0.9, it is
working fine. The group-member-set property value that my algorithm
generates before it calls proppatchMethod is:

The group-member-set property value that I am trying to set using
webdavResource.proppatchMethod
============================================================================
<![CDATA[<D:href xmlns:D='DAV:'>/Slide/users/root</D:href><D:href
xmlns:D='DAV:'>/Slide/users/john</D:href><D:href
xmlns:D='DAV:'>/Slide/users/guest</D:href>]]>
============================================================================

I get the following error:
============================================================================
<![CDATA[<D:href xmlns:D='DAV:'>/Slide/users/root</D:href><D:href
xmlns:D='DAV:'>/Slide/users/john</D:href><D:href
xmlns:D='DAV:'>/Slide/users/guest</D:href>]]>

Prop patch failed::Bad Request (400)
============================================================================

If I take this same string and add the property through DAVExplorer it works
fine. So I am sure that the string that I am generating for the property is
right. I guess there is a bug with the Slide2.1 M1 Webdav Client while
handling XML data.

Has anyone worked on this, any clues what could be wrong, or can anyone
validate that this is a bug with Webdav Client .....

any help is appreciated ...

thanks and regards,

Krishna

PS: Source code for the method that assigns user to role

	public boolean assignUserToRole(String sUserName, String sRoleName)
throws IOException
	{
		// URI pointing to the given role 
		String sURI = BASE_URL + "roles/" + sRoleName;
		String sNewUserURI = "/Slide/users/" + sUserName;
		
		boolean bSuccess = false;
		boolean bUserAlreadyBelongsToRole = false;
		
		try
		{
			// Connect to Slide resource
			if(connect(sURI))
			{
				write("Connected to slide successfully");
				
				// Try to set the group-member-set property
as follows
				/*
				 * 	proppatch /roles/role1 
				 * 	group-member-set = <![CDATA[<D:href
xmlns:D='DAV:'>/users/user1</D:href><D:href
xmlns:D='DAV:'>/users/user2</D:href>]]> 
				 * 	namespace = "DAV:"
				*/
				String sPropertyName = "group-member-set";
				Enumeration enumProperties =
webDavResource.propfindMethod("group-member-set");


				String sListOfUsersInRole =
(String)enumProperties.nextElement();
				
				// Split the output into the multiple user
URI's
				String[] saUsersInRole =
sListOfUsersInRole.split("\n");
				String sUserInRoleURI;
				
				// Build the new group-member-set property
including existing users and additionally the new user
				// Ex: <![CDATA[<D:href
xmlns:D='DAV:'>/users/user1</D:href><D:href
xmlns:D='DAV:'>/users/user2</D:href>]]>
				StringBuffer sbNewMemberSetProperty = new
StringBuffer();
				
				// Add the CDATA elemet header
				sbNewMemberSetProperty.append("<![CDATA[");
				
				// Loop through each exisitng user URI
belonging to the role
				for(int j = 0; j < saUsersInRole.length;
j++)
				{
					sUserInRoleURI = saUsersInRole[j];
					sUserInRoleURI =
sUserInRoleURI.trim();
					
					// Check if the user alrady belongs
to the role, if yes do not execute propPatch
	
if(sNewUserURI.equals(sUserInRoleURI))
						bUserAlreadyBelongsToRole =
true;
						
					write(sUserInRoleURI);
					
					if(sUserInRoleURI.length() > 0)
					{

						// Add the <href> element
with user URI for each existing user
	
sbNewMemberSetProperty.append("<D:href xmlns:D='DAV:'>");
	
sbNewMemberSetProperty.append(sUserInRoleURI);
	
sbNewMemberSetProperty.append("</D:href>");
					}
				} // end for() loop
								
				// Add the <href> element with new user URI
(this is where new user gets assigned to the role)
				if(bUserAlreadyBelongsToRole == false)
				{
	
sbNewMemberSetProperty.append("<D:href xmlns:D='DAV:'>");
	
sbNewMemberSetProperty.append(sNewUserURI);
	
sbNewMemberSetProperty.append("</D:href>");				
				}
				
				// Append the CDATA closing brackets
				sbNewMemberSetProperty.append("]]>");
				
				write(sbNewMemberSetProperty.toString());
				
				// Now that the xml property string is
build, it has to be set as new property for the given webresource
				Hashtable htProperties = new Hashtable();
				htProperties.put("group-member-set",
sbNewMemberSetProperty.toString());
//				String sProperty = "&lt;D:href
xmlns:D='DAV:'&gt;/users/kkankipa&lt;/D:href&gt;";
//				htProperties.put("group-member-set",
sProperty);

				
				// Set the new property value for the
resource property if the user is not already
				//	member of the role
				if(bUserAlreadyBelongsToRole == false)
				{
	
if(webDavResource.proppatchMethod(htProperties, true))
					{
						write("Prop patch worked");
						bSuccess = true;
					}
					else
					{
						String sStatus =
webDavResource.getStatusMessage();
						write("Prop patch failed::"
+ sStatus);
						bSuccess = false;
					}
				}
							
			}
			else
			{
				throw new IOException("Connection to Slide
failed");
			}
		}
		catch(IOException ex)
		{			
			write(ex.getMessage());
			throw ex;
		}	
		finally
		{
			disconnect();
		}		
		
		return bSuccess;
		
	}
	

end PS:

-----Original Message-----
From: James Mason [mailto:MasonJM@ah.org]
Sent: Friday, July 30, 2004 2:55 PM
To: kkankipa@baan.com
Subject: RE: Problem with propFind for property group-member-set


Good :).

>>> Krishna Kankipati <kk...@baan.com> 7/30/2004 1:51:33 PM >>>
James,
	It works .....

Krishna

-----Original Message-----
From: James Mason [mailto:MasonJM@ah.org] 
Sent: Friday, July 30, 2004 2:19 PM
To: kkankipa@baan.com 
Subject: RE: Problem with propFind for property group-member-set


Let me know how it goes.

-James

>>> Krishna Kankipati <kk...@baan.com> 7/30/2004 1:15:56 PM >>>
James,
	Please ignore my e-mail, I looked at the CVS web site and it
was
pretty clear how to download the latest and greatest source code, I
will try
with the latest code and get back to you .... thanks a bunch!

Krishna

-----Original Message-----
From: James Mason [mailto:MasonJM@ah.org] 
Sent: Friday, July 30, 2004 2:02 PM
To: kkankipa@baan.com 
Subject: Re: Problem with propFind for property group-member-set


You'll need to get it from CVS or wait until August 10 for the next
beta
release. The actual change was made to the DOMUtils class in
org.apache.util.

-James

>>> Krishna Kankipati <kk...@baan.com> 7/30/2004 12:59:31 PM >>>
Hi James,
	I am writing a wrapper on top of webdav client for our
application.
I am using Slide2.1M1. I found that the propfindMethod call on
property
"group-member-set" is always returning blank string. In the archived
discussion you had with Oliver
(http://www.mail-archive.com/slide-user@jakarta.apache.org/msg06713.html),
you were saying that you fixed this and that you had a patch that
solves
this problem, where can I find the patch?


Code
============================================================================
============
String sPropertyName = "group-member-set";
				Enumeration enumProperties =
webDavResource.propfindMethod("group-member-set");


				String str =
(String)enumProperties.nextElement();
				
				str = str.trim();
				
				write("Property = index of root = " +
str +
str.length());
============================================================================
============

kind regards,

Krishna

Krishna Kankipati
Software Engineer
SSA Global
*       1626 Cole Blvd. Golden, CO 80401, USA
*  303-274-3027
Fax:    303-274-3137
*  kkankipa@baan.com