2014-03-12 68 views
0

我想从请求的JSON正文中获取变量。目前,我在我的要求预流这种提取物变量政策:从请求正文中提取变量

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ExtractVariables async="false" continueOnError="true" enabled="true" name="extractvariables-grabrequestpayload"> 
<DisplayName>ExtractVariables-GrabRequestPayload</DisplayName> 
<Source clearPayload="false">request</Source> 
<FaultRules/> 
<Properties/> 
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
<JSONPayload> 
    <Variable name="payload"> 
     <JSONPath>$</JSONPath> 
    </Variable> 
    <Variable name="method"> 
     <JSONPath>$.method</JSONPath> 
    </Variable> 
</JSONPayload> 
<VariablePrefix>myprefix</VariablePrefix> 

样本请求正文如下:

{ “方法”: “取消”, “ PARAMS “:{ ”分区“:” 05" , “itemnumber”: “1”, “recipientnumber”: “1”, “SKU”: “0JAX330000” } }

但是,我没有看到跟踪中的变量,尽管我可以看到content.request正确使用上面的JSON填充并且正在执行策略。我看不到任何引用来从请求主体中抓取这个,只有响应。这不可能吗?

+0

我添加了一个脚本和政策来检查值。看起来最初的问题是内容类型头文件没有被设置为“application/json”。现在我看到负载变量正在被设置,但是没有使用上面包括的负载的方法变量。 – user3393335

回答

0

您是否在使用经典(旧版本)跟踪工具? 您可能想尝试单击右侧的“尝试新版BETA版TRACE”。 让我知道如果使用它显示你正在寻找你的变量。

+0

我已经尝试了两种 - 主要是BETA。无论哪种方式,变量甚至没有显示出来。 – user3393335

0

ExtractVariables策略将不会通过UI显示变量。您可以使用JavaScript策略来调试您的代码并显示这些变量。此策略应在ExtractVariables策略之后执行。然后跟踪工具应显示变量。

context.getVariable('myprefix.payload'); 
context.getVariable('myprefix.method'); 

您还可以设置另一个变量看到的实际值:

context.setVariable('method-in-JavaScript', context.getVariable('myprefix.method')) 
1

几件事情要尝试:

  1. 内容类型必须是application/json为apigee jsonpath提取工作
  2. 下载调试跟踪。在XML文件中查找<Point id="Execution"><Property name="stepDefinition-name">extractvariables-grabrequestpayload</Property>。这是您的抽取变量策略执行步骤。在这个Point id里面检查VariableAccess元素。如果有任何设置,它会显示在这里。像<Set name="extractvariables-1.invoked" success="true" value="true"/>。这表明策略已成功执行并且设置了任何变量。
  3. 也尝试使用$。''来选择整个有效载荷。 (两个带有空白内容的单引号。)
  4. 要确保提取了任何变量,您可以在此策略之后在该策略中使用该变量。这也应该打印出调试日志中的变量访问。

    https://github.com/apigee/api-platform-samples/tree/master/sample-proxies/variables

    它可以写变量为响应HTTP头有用,这样就可以立即看到的结果:

0

调试变量内联的另一种方式的变量样本代理显示例如,新的JSONPath迭代。