我正在尝试从外部应用程序与Sakai接口,以获取只读课程信息(标识符,课程名称,描述,教师等)。它看起来(/ direct / site / describe)就像" site" REST服务仅公开需要您拥有课程ID的内容。我注意到在浏览Sakai源时有一个SiteService,它有一个名为getSites()的方法,看起来很像我需要的但是(免责声明)我对Sakai几乎一无所知。我只需要这些数据。
我的问题是:这似乎应该存在的东西我错过了什么?此外,是通过自定义服务公开SiteService getSites的最佳方法吗?
答案 0 :(得分:3)
如果您想获得Sakai安装中每个站点的列表,那么您将必须构建自定义的东西,因为所有站点的完整列表不是典型的用例。通常,应用程序对获取特定用户可访问的站点列表更感兴趣。例如:
http://nightly2.sakaiproject.org:8081/direct/site.json
将返回当前登录用户的完整列表(可能包含分页)。
{"entityPrefix": "site", "site_collection": [
{
"createdDate": 1401938965607,
"createdTime": {
"display": "Jun 4, 2014 11:29 pm",
"time": 1401938965607
},
"description": null,
"htmlDescription": "",
"htmlShortDescription": "",
"iconUrl": null,
"iconUrlFull": null,
"id": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"infoUrl": null,
"infoUrlFull": null,
"joinerRole": null,
"lastModified": 1401938965993,
"maintainRole": "maintain",
"modifiedDate": 1401938965993,
"modifiedTime": {
"display": "Jun 4, 2014 11:29 pm",
"time": 1401938965993
},
"owner": "admin",
"props": {
"contact-name": "Sakai Administrator"
},
"providerGroupId": null,
"reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"shortDescription": null,
"siteGroups": null,
"siteOwner": {
"userDisplayName": "Sakai Administrator",
"userEntityURL": "\/direct\/user\/admin",
"userId": "admin"
},
"sitePages": [
{
"id": "e051601e-2162-47c1-9e04-63a033f56cdf",
"layout": 0,
"layoutTitle": "Single Column Layout",
"position": 0,
"props": {
"is_home_page": "true"
},
"reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/e051601e-2162-47c1-9e04-63a033f56cdf",
"siteId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"skin": "neo-default",
"title": "Home",
"titleCustom": false,
"url": "http:\/\/nightly2.sakaiproject.org:8081\/portal\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/e051601e-2162-47c1-9e04-63a033f56cdf",
"activeEdit": false,
"popUp": false
},
{
"id": "2e7c2004-0dc2-47bc-8e55-ca1df8e58c33",
"layout": 0,
"layoutTitle": "Single Column Layout",
"position": 1,
"props": null,
"reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/2e7c2004-0dc2-47bc-8e55-ca1df8e58c33",
"siteId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"skin": "neo-default",
"title": "Assignments",
"titleCustom": false,
"url": "http:\/\/nightly2.sakaiproject.org:8081\/portal\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/2e7c2004-0dc2-47bc-8e55-ca1df8e58c33",
"activeEdit": false,
"popUp": false
},
{
"id": "332c52a8-89fe-45bb-9b1a-bf6bace3e88a",
"layout": 0,
"layoutTitle": "Single Column Layout",
"position": 2,
"props": null,
"reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/332c52a8-89fe-45bb-9b1a-bf6bace3e88a",
"siteId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"skin": "neo-default",
"title": "Site Info",
"titleCustom": false,
"url": "http:\/\/nightly2.sakaiproject.org:8081\/portal\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/332c52a8-89fe-45bb-9b1a-bf6bace3e88a",
"activeEdit": false,
"popUp": false
}
],
"skin": null,
"softlyDeletedDate": null,
"title": "AZ",
"type": "project",
"userRoles": [
"maintain",
"access"
],
"activeEdit": false,
"customPageOrdered": false,
"empty": false,
"joinable": false,
"pubView": true,
"published": true,
"softlyDeleted": false,
"entityReference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"entityURL": "http:\/\/nightly2.sakaiproject.org:8081\/direct\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"entityId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
"entityTitle": "AZ"
},{
...
由于您有一个非常具体的用例,我建议您使用SiteService(或者甚至可能是SQL)来检索您要查找的非常有限的数据,然后向SiteEntityProvider添加新的自定义方法({{3} })像这样:
@EntityCustomAction(action = "my_custom_method", viewKey = EntityView.VIEW_SHOW)
public boolean myCustomMethod(EntityView view) {
HashMap yourMap = new HashMap();
// put code here to get all the sites data you need from the SiteService or the DB and then put the parts you want to return into a Map and then return that map
return yourMap;
}
然后您可以这样调用该方法:
http://nightly2.sakaiproject.org:8081/direct/site/my_custom_method.json
答案 1 :(得分:2)
也许您可以尝试使用JWS获取一些信息。
sakai(ROOT_OF_TOMCAT \ webapps \ sakai-axis)中有一些默认服务,您可以通过以下方式访问:http://xxx.xxx/sakai-axis/xxx.jws?wsdl)。
服务" SakaiLogin.jws" 帮助您登录sakai:
public String login(String id,String pw) throws AxisFault
服务" SakaiScript.jws" 提供了一个名为的函数:
public String getAllSitesForUser(String sessionid) throws AxisFault
可以返回与此用户关联的所有网站的列表。
也许我没有正确回答你的问题(因为我使用的是SOAP)。我希望这对你有所帮助。
我也在编写一个程序来检索sakai的数据。但我不太了解如何通过REST或Entity Broker公开数据。
干杯。
<强>更新强>
您可以尝试使用Apache Axis2带来的wsdl2java.bat
。它将从WSDL服务生成Java类。然后,您可以直接使用它来使用Sakai提供的这些服务。像:
wsdl2java.bat -p org.sakai.wsdl -uri http://localhost:8080/sakai-axis/Assignments.jws?wsdl
我已经在使用它,感觉非常方便。
答案 2 :(得分:0)
可以使用Sakai的getAllSitesCollectionSize
中的contenthostingservice
方法列出所有Sakai网站。它应该称为getAllSites
。别问我为什么这样命名!