使用 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)
我一直在构建一个客户端来替换我们拥有的社交网站上的一些内容。我按照 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)