[Building Sakai] New web service for site membership status

Nicola Monat-Jacobs nicola at longsight.com
Tue Apr 13 13:18:40 PDT 2010


Hi -

I'm working on a new simple sakai web service that would allow me to remotely get and set the status of a user's enrollment in a site - active or inactive. The get method works great, however the set method doesn't seem to be working - the status of the user's enrollment doesn't change. I'd love to know if anyone has any thoughts on why this might not be working. Oh, this is a sakai 2-6-x install. Thanks!

Here's my jws code:

/** 
 * Get the status (active vs inactive) of a user's enrollment (membership) in a site
 *
 * @param	sessionid	the id of a valid session
 * @param	siteId		the id of the site you want to check 
 * @param	eid			the userid of the person you want to check
 * @return		        active, inactive, blank or error
 * @throws	AxisFault		
 *
 */
public String getMemberStatus(String sessionid, String siteid, String eid) throws AxisFault { 
	
	Session s = establishSession(sessionid); 
	
	String status = "";
	
	try {
		Site site = SiteService.getSite(siteid);

		String userid = UserDirectoryService.getUserByEid(eid).getId();
		Member membership = site.getMember(userid);

		if (membership.isActive()) {
			status = "active";
		} else {
			status = "inactive";
		}
		
	} catch (Exception e) {
		LOG.error("WS getMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
		return "";
	}
	
	return status;
}


/** 
 * Set the status of a user's enrollment (membership) in a site to either active or inactive
 *
 * @param	sessionid	the id of a valid session
 * @param	siteId		the id of the site 
 * @param	eid			the userid of the person whose status you want to set
 * @param	active		true = active, false = inactive
 * @return		        success or exception
 * @throws	AxisFault		
 *
 */
public String setMemberStatus(String sessionid, String siteid, String eid, boolean active) throws AxisFault { 
	
	Session s = establishSession(sessionid); 
	
	try {
		Site site = SiteService.getSite(siteid);

		String userid = UserDirectoryService.getUserByEid(eid).getId();
		Member membership = site.getMember(userid);

		if (membership.isActive() && !active) {
			LOG.error("membership is active but we want it to be inactive");
			membership.setActive(false);
		} else if (!membership.isActive() && active) {
			LOG.error("membership is inactive, but we want it to be active");
			membership.setActive(true);
		}
		
	} catch (Exception e) {
		LOG.error("WS setMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
		return "";
	}
	
	return "success";
}


And here's the demo perl script that I'm using to test it:

!/usr/bin/perl
use SOAP::Lite;
my $host='http://localhost:8080';

my $soap = SOAP::Lite -> proxy("$host/sakai-axis/SakaiLogin.jws?wsdl");
my $result =$soap->login("admin","admin");
my $session=$result->result();
print $session."\n\n";

my $true = SOAP::Data->value('true')->type('boolean');
my $false = SOAP::Data->value('')->type('boolean');

my $soap2 = SOAP::Lite -> proxy("$host/sakai-axis/WSLongsight.jws?wsdl");

my $result2 = $soap2->setMemberStatus($session,
	"39760797-6184-4b84-892f-e93041e2bcf1",
	"joe",
	$true);
	
print $result2->result();


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20100413/215446d2/attachment.html 


More information about the sakai-dev mailing list