2015-02-11 4 views
1

Мы используем SBT в качестве прокси для доступа к содержимому Smartcloud через OAuth2. Нам нужно получить данные профиля для зарегистрированного пользователя на стороне сервера с помощью Java. Для этого позвоним new com.ibm.sbt.services.client.smartcloud.profiles.ProfileService("smartcloudOA2").getMyProfile(). Это работало нормально, пока я не понял, что возвращаемый объект профиля содержит устаревшие данные профиля пользователя.Доступ к профилю пользователя Smartcloud с использованием IBMSBT

Когда я пытаюсь получить данные его профиля с использованием 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] 

Это как управляемый-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?

Каков наилучший способ получить информацию о профиле пользователя Smartcloud на стороне сервера с использованием Java-API SBT?

+0

да совместимо. Мы смотрим на запись. спасибо Пол –

ответ

0

Вопрос находится в getMyUserId, когда он переходит в namedurlpart. Я объединился в Fix.

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

Это будет в нашей следующей сборке, вы можете вытащить изменение из github.

+1

Указанный Fix хорош для исключений. К сожалению, он еще не исправил поиск профиля, и вызов getMypRofile по-прежнему возвращает null. Во время дальнейших исследований мы увидели, что SBT выдает запрос на провод, но SmartCloud отвечает на страницу входа, а не на ожидаемый профиль (см. Сообщение ниже). –

1

Благодарим Павла за устранение этой проблемы - мы больше не получаем это исключение. Но мы все еще не можем получить объект 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], чтобы получить фид моего профиля. И когда мы посмотрим на ответ ближе, мы видим, что фид профиля не возвращается обратно, а html для страницы входа в smartcloud. Когда мы называем тот же URL-адрес, используя sbt proxy через наш веб-приложение smth, как: https://localhost/ctx-root/service/proxy/smartcloudOA2/profiles/oauth/atom/profile.do?userid=[myid], мы получаем ту же страницу входа, а не в фид. Не могли бы вы еще раз взглянуть на эту проблему?

Смежные вопросы