【问题标题】:WSO2 inline prototyping: How to get variables different that "path type"?WSO2 内联原型:如何获得与“路径类型”不同的变量?
【发布时间】:2018-10-01 00:29:22
【问题描述】:

我正在使用 WSO2 2.1.0 内联原型功能,如图所示 Create a Prototyped API with an Inline Script

此示例使用 Synapse ScriptMessageContext 获取变量。 但如果这是一个“路径”变量,我只能获取变量值。

如何获取其他类型(查询、正文)变量?

注意:我的代码与示例相同,但我已将 API 中的变量定义为查询

swagger: '2.0'
paths:
  '/inlineTest/{pathParameter}':
    get:
      responses:
        '200':
          description: ''
      parameters:
        - name: pathParameter
          in: path
          required: true
          type: string
          description: Parameter in path
        - name: queryArrayParameter
          in: query
          required: false
          type: array
          items:
            type: string
          uniqueItems: true
          description: >-
            Parameter to test comma separated arrays in URL/Query. Items has to
            be unique
        - name: queryParameter
          in: query
          required: true
          type: string
          description: Parameter in the query
        - name: headerParameter
          in: header
          required: false
          type: string
          description: Parameter in header
        - name: responseCode
          in: query
          required: false
          type: integer
          format: int32
          minimum: 100
          maximum: 599
          default: 200
          description: Expected response code (see inline js)
      produces:
        - application/json
      summary: Test of synapse mediator script
      description: >-
        This is a test for checking inline prototype capabilities (using
        javascript)
      x-mediation-script: "var log = mc.getServiceLog();\nvar properties = [];\nvar propertyKeySet = mc.getPropertyKeySet();\nif (propertyKeySet !== null) {\n    log.info('propertyKeySet is not null');\n\tfor(var item = propertyKeySet.iterator(); item.hasNext();) {\n      var key=item.next();\n      log.info('Item Key='+key);\n      var property={\n        key : key,\n        value : mc.getProperty(key)\n      };\n      log.info('Item Value='+property.value);\n      properties.push(property);\n    }\n}\nvar pathParameter = mc.getProperty('uri.var.pathParameter');\nvar queryParameter = mc.getProperty('query.param.queryParameter');\nvar queryArrayParameter = mc.getProperty('query.param.queryArrayParameter');\n// IMPORTANT: To use header parameters, you have to enable CORS configuration and declare the header there\nvar headerParameter = mc.getProperty('uri.var.headerParameter');\nvar formParameter = mc.getProperty('uri.var.formParameter');\nvar responseCode = mc.getProperty('query.param.responseCode');\nvar response  = {\n\tpathParameter : pathParameter,\n\tqueryParameter : queryParameter,\n        queryArrayParameter : queryArrayParameter,\n\theaderParameter : headerParameter,\n  formParameter : 'PENDING: Not implemented yet',\n\tproperties : properties\n};\n// Set the response type\nmc.setProperty('CONTENT_TYPE', 'application/json');\n// Set the response code\nmc.setProperty('HTTP_SC', responseCode);\nmc.setPayloadJSON(response);"
      x-auth-type: Application & Application User
      x-throttling-tier: Unlimited
info:
  title: Test
  version: v1
  description: Test API - In ITDEV

【问题讨论】:

    标签: wso2 prototype inline wso2-am synapse


    【解决方案1】:

    您可以使用 mc.getPayloadJSON() 获取 JSON 有效负载,并使用 mc.get-property('query.param.arg1') 读取查询参数。

    你可以像这样阅读标题。

    参考:

    https://docs.wso2.com/display/ESB500/Script+Mediator

    https://asitha.github.io/cs/programming/wso2/esb/mediators/2017/08/14/get-query-params-with-wso2-esb/

    【讨论】:

    • 您的回答解决了我的查询参数问题。你知道如何获取 header 参数(或事件 cookie 参数)
    • 您需要先在资源部分定义该标头。然后你可以访问为'uri.var.'
    • 嗨,它似乎不适合我。我在资源中有标题,并添加到 CORS(如果没有,网关拒绝)。但是 getProperty('uri.var.myHeader') 返回 null。我会再试一次,让你知道。谢谢!
    • 我创建了一个代码来转储所有属性,但我没有看到那里的标题 var log = mc.getServiceLog(); var 属性 = []; var propertyKeySet = mc.getPropertyKeySet(); if (propertyKeySet !== null) { log.info('propertyKeySet is not null'); for(var item = propertyKeySet.iterator(); item.hasNext();) { var key=item.next(); log.info('Item Key='+key); var property={ key : key, value : mc.getProperty(key) }; log.info('项目价值='+property.value); properties.push(property); } }
    • 这是swagger中的headerParameter定义` - name: headerParameter in: header required: false type: string description: Parameter in header`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2017-11-05
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多