无法将Apigee Java Object响应转换为字符串

时间:2014-05-14 19:35:23

标签: java apigee

我正在使用GetAPIProduct政策(请参阅http://apigee.com/docs/gateway-services/content/retrieve-api-product-settings-using-getapiproduct 获取范围列表。然后在一个JavaScript标注中,我尝试引用该范围列表,但不是文本我得到这样的东西(最后的十六进制块随每次调用而变化):

 [Ljava.lang.String;@19baa7ed

似乎无法将其转换为我可以使用Javascript访问的数组。我是一个免费的组织,所以Java不是一个选择。我已经尝试了String(),myvar.toString(),甚至还没有看到在Apigee中存在的Rhino context.javaToJs。

如何将此转换为字符串的任何想法?

2 个答案:

答案 0 :(得分:1)

事实证明getapiproduct.{policyname}.apiproduct.scopes的值是一个从零开始的对象数组。但是,每个对象都可以转换为作为范围名称的字符串。

以下是访问范围数组的方法:

var scopeArray=context.getVariable("getapiproduct.RetrieveProductInfo.apiproduct.scopes");

// you can use either of these methods to convert the array elements
var firstElement = String(scopeArray[0]);
var secondElement = scopeArray[1]+'';

var scopeArrayLen = scopeArray.length;

答案 1 :(得分:1)

这不是问题的答案,但是一些可能有价值的附加信息。

GetAPIPRoductInfo获取产品的范围列表。相反,GetOAuthV2Info策略获取有关OAUthV2令牌的信息。假设你有一个令牌,你可以这样做:

<GetOAuthV2Info name='GetOAuthV2Info-TokenScopes'>
  <!-- use one of the following: a referenced variable or -->
  <!-- an explicitly passed access_token -->
  <AccessToken ref='access_token'/>

  <!--
      On Success, the following flow variables will be set.
      oauthv2accesstoken.{policy_name}.access_token
      oauthv2accesstoken.{policy_name}.scope
      oauthv2accesstoken.{policy_name}.refresh_token
      oauthv2accesstoken.{policy_name}.accesstoken.{custom_attribute_name}
      oauthv2accesstoken.{policy_name}.developer.id
      oauthv2accesstoken.{policy_name}.developer.app.name
      oauthv2accesstoken.{policy_name}.expires_in
      oauthv2accesstoken.{policy_name}.status
  -->
</GetOAuthV2Info>

然后,您可以在后续的JS标注中使用该信息,以根据您的要求检查令牌的范围:

// checkScope.js
// ------------------------------------------------------------------

var varname = 'oauthv2accesstoken.GetOAuthV2Info-TokenScopes.scope',
    approvedScopes = context.getVariable(varname),
    check = false;

approvedScopes = approvedScopes.split(' ');
// approvedScopes is now a JavaScript array of strings, that lists
// the scopes the user approved for the requesting client (app).
//
// You can now compare that list against the scopes required
// for an operation or resource, and then set a variable 
// determining whether the token is good for the request. 

context.setVariable('scopeCheck.ok', check);