使用IBMSBT访问Smartcloud用户配置文件

时间:2015-02-11 14:54:51

标签: ibm-sbt

我们使用SBT作为代理,通过OAuth2访问Smartcloud内容。 我们需要使用Java检索服务器端登录用户的配置文件详细信息。为此,我们致电new com.ibm.sbt.services.client.smartcloud.profiles.ProfileService("smartcloudOA2").getMyProfile()。这工作正常,直到我意识到返回的配置文件对象包含已弃用的用户配置文件详细信息。

当我尝试使用new com.ibm.sbt.services.client.connections.profiles.ProfileService("smartcloudOA2").getMyProfile()获取个人资料详情时,我会遇到以下异常:

java.lang.IllegalArgumentException: Missing parameter: connections 
     at com.ibm.sbt.services.client.base.URLPattern.checkNoMissingParameters(URLPattern.java:67) 
     at com.ibm.sbt.services.client.base.URLPattern.format(URLPattern.java:58) 
     at com.ibm.sbt.services.client.base.URLBuilder.format(URLBuilder.java:82) 
     at com.ibm.sbt.services.client.connections.profiles.ProfileUrls.format(ProfileUrls.java:69) 
     at com.ibm.sbt.services.client.connections.profiles.ProfileService.getMyUserId(ProfileService.java:879) 
     at com.ibm.sbt.services.client.connections.profiles.ProfileService.getMyProfile(ProfileService.java:894) 
     at de.timetoact.xcc.conf.CloudServlet.doGet(CloudServlet.java:53) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:575) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
     at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1274) 
     at [internal classes] 
     at com.ibm.sbt.util.SBTFilter.doFilter(SBTFilter.java:53) 
     at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) 
     at [internal classes]

这是managed-beans.xml的样子:

...
<!-- Default Environment -->
    <managed-bean>
        <managed-bean-name>defaultEnvironment</managed-bean-name>
        <managed-bean-class>com.ibm.sbt.jslibrary.SBTEnvironment
        </managed-bean-class>
        <managed-bean-scope>application</managed-bean-scope>
        <managed-property>
            <property-name>endpoints</property-name>
            <value>smartcloudOA2</value>
        </managed-property>
    </managed-bean>
    <managed-bean>
        <managed-bean-name>smartcloudOA2</managed-bean-name>
        <managed-bean-class>com.ibm.sbt.services.endpoints.SmartCloudOAuth2Endpoint
        </managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
        <managed-property>
            <property-name>url</property-name>
            <value>%{smartcloud.url}</value>
        </managed-property>
        <managed-property>
            <property-name>appName</property-name>
            <value>%{smartcloud.appName}</value>
        </managed-property>
        <managed-property>
            <property-name>clientID</property-name>
            <value>%{smartcloud.clientID}</value>
        </managed-property>
        <managed-property>
            <property-name>clientSecret</property-name>
            <value>%{smartcloud.clientSecret}
            </value>
        </managed-property>
        <managed-property>
            <property-name>forceTrustSSLCertificate</property-name>
            <value>true</value>
        </managed-property>
        <managed-property>
            <property-name>credentialStore</property-name>
            <value>CredStore</value>
        </managed-property>
    </managed-bean>
... 

com.ibm.sbt.services.endpoints.SmartCloudOAuth2Endpoint是否与com.ibm.sbt.services.client.connections.profiles.ProfileService兼容?

使用SBT Java API在服务器端检索Smartcloud用户配置文件信息的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

感谢Paul解决这个问题 - 我们不再得到那个例外了。 但是我们仍然无法获取Profile对象 - 当我们调用com.ibm.sbt.services.client.connections.profiles.ProfileService("smartcloudOA2").getMyProfile()时它返回null。 在调试过程中,我们看到sbt在内部调用https://apps.na.collabserv.com/profiles/oauth/atom/profile.do?userid=[myid]以获取我的个人资料。 当我们仔细查看响应时,我们会看到不返回配置文件源,而是返回smartcloud登录页面的html。 当我们通过我们的网络应用程序(例如https://localhost/ctx-root/service/proxy/smartcloudOA2/profiles/oauth/atom/profile.do?userid=[myid])使用sbt代理调用相同的网址时,我们会获得相同的登录页面而不是个人资料Feed。 你能再次看一下这个问题吗?

答案 1 :(得分:0)

问题出在getMyUserId中,当它进入namedurlpart时。我已经合并了一个Fix。

NamedUrlPart commonPart = new NamedUrlPart("connections",ProfilesConstants.COMMON);
        String peopleApiUrl = ProfileUrls.MY_USER_ID.format(this,commonPart);

它将在我们的下一个版本中,您可以从github获取更改。