【问题标题】:How can I put an XML mocked payload into a POST request payload sended by a WSO2 ESB send mediator?如何将 XML 模拟有效负载放入 WSO2 ESB 发送调解器发送的 POST 请求有效负载中?
【发布时间】:2018-04-18 14:24:03
【问题描述】:

我是 WSO2 ESB 的新手,此时我必须完成第一个简单的任务,但我真的不知道从哪里开始。

我必须向外部 Web 服务执行 HTTP POST 请求。这个请求应该包含一个模拟的 XML 文档作为有效负载(此时 XML 必须只是模拟,所以我认为我必须在某处“写”它或类似的东西)。

所以从这个简约的官方教程开始:

https://docs.wso2.com/display/ESB500/Sending+a+Simple+Message

我做了以下操作:

1) 我创建了一个新的 ESB 解决方案项目。

2) 在名为 SampleServices 的“主”项目上(此时我使用的是与教程相同的名称)我已将 endpoint 注册到我的外部网络服务(新建 -> 端点)。

3) 然后在这个项目中,我添加了一个新的 RESP API(New -> REST API)。与教程不同,我在 API 资源属性 中启用了 POST 请求而不是 GET,因为我需要发送 POST 请求包含有效负载,而不是教程 GET 请求。这是我的设置:

4) 然后,正如教程中所做的那样,我设置了 send mediator,并在此 mediator 上设置了指向我的外部 Web 服务的 defined endpoint必须处理 POST 请求并检索其有效负载。

好的,现在我的问题是:如何将模拟的 XML 文档放入我的 *send mediator** 发送的 POST 请求的正文中?

阅读第二个教程: https://docs.wso2.com/display/ESB500/Routing+Requests+Based+on+Message+Content

我知道我可以从外部传递请求负载,例如在第二个教程中执行这个启动 ESB“进程”的 CURL 调用:

curl -v -X POST --data @request.json http://localhost:8280/healthcare/categories/surgery/reserve --header "Content-Type:application/json"

这会执行一个将 JSON 作为有效负载传递的调用。在前面的示例中运行良好,但对我不利。

我必须在我的 ESB API 流中模拟 XML 文档有效负载,而不是从 CURL 执行的外部请求中获取,因为在第二个实施步骤中它不会被模拟但 il 将来自链中的上一步。

所以我需要这样的流程:

当我的 API 被调用时,它会执行一个 POST 请求,发送一个模拟的 XML 有效负载。也许它必须放入 send mediator 但我不知道...

如何将此 XML 放入 send mediator 发送的请求者的负载中?我在哪里定义\写它?

【问题讨论】:

  • 你可以使用 PayloadFactory 调解器。
  • Andrea,最好发布您的 API 或代理 xml...正如 Ernesto 告诉您的那样,尝试在发送中介之前放置一个 payloadfactory 以及您想要的 xml

标签: wso2 wso2esb middleware wso2carbon


【解决方案1】:

检查此示例:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/services/users" name="ListUsersAPI" xmlns="http://ws.apache.org/ns/synapse">
  <resource methods="GET" protocol="http" url-mapping="/*">
    <inSequence>
      <payloadFactory media-type="json">
        <format>{ "persons":[{ "person": { "Id":"1", "givenName":"ajith", "lastName":"vitharana", "age":"25", "contactInfos":[ { "InfoId":"1", "department":"1", "contactType":"email", "value":"ajith@abc.org" }, { "InfoId":"2", "department":"1", "contactType":"mobile",
          "value":"111111111" }, { "InfoId":"3", "department":"1", "contactType":"home", "value":"Magic Dr,USA" } ] }}, {"person":{ "Id":"2", "givenName":"shammi", "lastName":"jagasingha", "age":"30", "contactInfos":[ { "InfoId":"1", "department":"1", "contactType":"email",
          "value":"shammi@abc.org" }, { "InfoId":"2", "department":"1", "contactType":"mobile", "value":"2222222222" }, { "InfoId":"3", "department":"1", "contactType":"home", "value":"Magic Dr,USA" } ] } }] }</format>
        <args/>
      </payloadFactory>
      <property action="remove" name="NO_ENTITY_BODY" scope="axis2"/>
      <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
      <respond/>
    </inSequence>
    <outSequence/>
    <faultSequence/>
  </resource>
</api>

【讨论】:

  • 嗨,现在我将尝试...我是 WSO2 ESB 的新手,我对我与此示例有什么关系有一些疑问。我应该把这个 XML 代码放在哪里?我创建了一个新的“ESB 解决方案项目”。然后?我和这个 XML 配置有什么关系?
  • 所以在我看来这有点像api配置文件,是吗?
  • 好的,我已将其导入 ESB API,现在我的疑问是:在这种情况下,流程以“响应调解器”结束,我认为将 JSON 返回给调用者...我有不要返回给调用者,但我必须将其发送到外部 Web 服务,而不是返回给调用者。我是否必须使用“发送调解器”设置“定义的端点”?我是否需要为此中介指定一些特定设置?
  • 另一个疑问是:为什么在“PayLoadFactory”中介(在我看来是用来创建 JSON 有效负载)之后有 2 个“Property”中介?这 2 位调解员是做什么的?
  • 如果您想将请求发送到外部端点,您可以使用:1. 如果您希望响应转到外序列,则发送中介,2. 如果您希望响应,则调用中介返回顺序...我使用的 XML 您可以放入 [ESB_HOME]\repository\deployment\server\synapse-configs\default\api\ListUsersAPI.xml 或使用 DevStudio 创建一个新的 API 并将其内容替换为xml.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多