使用 Fileservice.updatefile 调用时 SBT 上下文错误

SBT context error while using Fileservice.updatefile call

我一直在构建一个客户端来替换我们拥有的社交网站上的一些内容。我按照 Github 存储库中的示例代码编写了一个 java 客户端:https://github.com/OpenNTF/SocialSDK/tree/master/sdk/com.ibm.sbt.core.test/src/test/java/com/ibm/sbt/services/client/connections/files

并且还使用本教程作为参考来创建端点,然后将其传递给不同的服务。 http://bastide.org/2014/01/28/how-to-develop-a-simple-java-integration-with-the-ibm-social-business-toolkit-sdk/

明确地说,我在社区上发布内容,因此我使用 CommunityService 上传内容并使用 FileService 更新社区文件。

这个方法工作正常:fileservice.updateCommunityFile(iStream, fileId, title, communityLibraryId, params) 这在服务器上创建了多个版本,这不是我想要的。

但是,我想使用这个 - fileservice.updateFile(inputStream, file, params) 如果我在我的代码中使用上面的代码,则会导致以下错误:

Error updating the file
com.ibm.sbt.services.client.connections.files.FileServiceException: Error updating the file
    at com.ibm.sbt.services.client.connections.files.FileService.updateFile(FileService.java:2686)
    at sbt.sample.standalone.java.StandaloneDemo.ReplacePhoto(StandaloneDemo.java:332)
    at sbt.sample.standalone.java.StandaloneDemo.main(StandaloneDemo.java:239)
Caused by: java.lang.IllegalStateException: SBT context is not initialized for the request
    at com.ibm.commons.runtime.Context.get(Context.java:57)
    at com.ibm.sbt.services.endpoints.BasicEndpoint.authenticate(BasicEndpoint.java:151)
    at com.ibm.sbt.services.client.ClientService.forceAuthentication(ClientService.java:296)
    at com.ibm.sbt.services.client.ClientService.processResponse(ClientService.java:1154)
    at com.ibm.sbt.services.client.ClientService._xhr(ClientService.java:1072)
    at com.ibm.sbt.services.client.ClientService.execRequest(ClientService.java:1037)
    at com.ibm.sbt.services.client.ClientService.xhr(ClientService.java:1003)
    at com.ibm.sbt.services.client.ClientService.put(ClientService.java:937)
    at com.ibm.sbt.services.client.ClientService.put(ClientService.java:933)
    at com.ibm.sbt.services.client.base.BaseService.updateData(BaseService.java:439)
    at com.ibm.sbt.services.client.connections.files.FileService.updateFile(FileService.java:2683)

注意:我在程序中使用的用户是发布内容的社区的管理员。 此外,有什么方法可以在 sbtsdk api 中指定以替换其他文件而不创建其他版本?

我发现这很相似 - Liferay Portal & IBM SBT SDK: SBT context is not initialized for the request 但是不知道有没有解决办法

谢谢。

首先,很难理解为什么您会看到 "SBT context is not initialized for the request",因为您可以 运行 一个文件服务 API 而不是另一个。

fileservice.updateCommunityFile(iStream, fileId, title, communityLibraryId, params)fileservice.updateFile(inputStream, file, params) 都创建了新版本。它们不会替换最新版本。这个API有一个参数控制是否创建新版本

这是你需要做的:

使用值为 "false" 的参数 createVersion。像这样:

Map<String, String> paramsMap = new HashMap<String, String>(); 
paramsMap.put("createVersion", "false");

现在像这样在 updateCommunityFile API 中使用这个 paramsMap:

fileservice.updateCommunityFile(iStream, fileId, title, communityLibraryId, paramsMap)