2

我正在尝试从外部应用程序与 Sakai 交互,以获取只读课程信息(标识符、课程名称、描述、讲师等)。它看起来(/direct/site/describe)就像“站点”REST服务只公开需要您已经拥有课程ID的东西。我在浏览 Sakai 源代码时注意到有一个 SiteService 有一个名为 getSites() 的方法,它看起来很像我需要的,但是(免责声明)我对 Sakai 几乎一无所知。我只需要这些数据。

我的问题是:这似乎应该在那里我错过了什么?此外,通过自定义服务公开 SiteService getSites 是最好的方法吗?

4

3 回答 3

4

如果您只想获取 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 添加一个新的自定义方法(https://source.sakaiproject .org/svn/entitybroker/trunk/core-providers/src/java/org/sakaiproject/entitybroker/providers/SiteEntityProvider.java)像这样:

@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
于 2014-06-05T04:06:23.810 回答
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 或实体代理公开数据。

干杯。


更新:

你可以试试wsdl2java.bat带Apache Axis2。它将从 WSDL 服务生成 Java 类。然后就可以直接用它来消费Sakai提供的这些服务了。喜欢:

wsdl2java.bat -p org.sakai.wsdl -uri http://localhost:8080/sakai-axis/Assignments.jws?wsdl

我已经在使用它了,感觉真的很方便。

于 2014-04-09T12:24:46.350 回答
0

可以使用Sakai 中getAllSitesCollectionSize的方法列出所有 Sakai 站点contenthostingservice。应该叫它getAllSites。不要问我为什么叫这个名字!

例如,参见https://qa11-mysql.nightly.sakaiproject.org/sakai-ws

于 2018-09-13T15:45:49.580 回答