【问题标题】:How to use Apache Synapse callout mediator to send a given transport header如何使用 Apache Synapse 标注调解器发送给定的传输标头
【发布时间】:2021-05-12 10:43:53
【问题描述】:

我正在尝试利用 callout 调解器来调用 REST 端点。

但我需要发送接收到的 HTTP 标头的内容。

我试过了:

    <callout passHeaders="false">
        <endpoint>
            <address uri="http://localhost:8888/test"></address>
        </endpoint>
        
        <source xpath="$trp:X-custom-header" />
    </callout>

但这失败了:

 ERROR - CalloutMediator The evaluation of the XPath expression : $trp:X-custom-header did not result in an OMElement

有可能吗?

【问题讨论】:

  • 不使用 中介的原因是什么?我之所以这么问是因为:“呼叫中介利用非阻塞传输来获得比标注中介更高的性能,因此在大多数情况下您应该使用呼叫中介。”
  • 我找不到有关此&lt;call/&gt; 调解员的任何信息。也许它在 WSO2 2.6(使用 Apache Synapse 2.1.7)中不可用。此外,性能现在并不是一个真正的问题。可行性是。此外,如果“非阻塞”意味着调用和剩余链并行进行,那么这不是我想要的......我实际上需要等待调用完成,并用它的答案来扩充原始消息.
  • 那么,为了澄清,你的意思是:“WSO2 2.6”? WSO2 API 管理器 2.6 ??本产品使用突触库:2.1.7-wso2v80(它是 WSO2 fork,而不是 Apache)。如果,是的,我在源代码CallMediator 中看到您也可以在wso2ei 文档中阅读一些内容。他们都使用 wso2-synapse
  • @tmoasz 看起来很有希望...感谢您指出CallMediator

标签: wso2 synapse


【解决方案1】:

如果您的标头已通过 $trp 范围可用,则应该将其发送到您的端点就好了。

如果尚未设置,您可以通过标头调解器或属性调解器进行设置,如下所示:

<property name="transportHeaderName" value="something" scope="transport"/>

如果您需要如下所述的表单数据,您将需要使用有效负载中介来创建有效负载并将消息类型设置为 multipart/form-data(您可能需要为此在axis2.xml 中启用额外的格式化程序)

有效载荷:

     <payloadFactory media-type="xml">
        <format>
           <root>
              <x-custom-field>text</x-custom-field>
           </root>
        </format>
        <args>
           <arg evaluator="xml" expression="$trp:x-custom-header"/>
        </args>
     </payloadFactory>


<property name="messageType" value="multipart/form-data" scope="axis2"/>

【讨论】:

  • 标头在$trp 范围内可用....但被调用的端点不能以这种方式理解它(我无法控制)。所以我必须将特定的标头转换为表单字段(被调用的端点需要表单数据)。
  • 添加了一些可能有帮助的附加信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2019-07-03
相关资源
最近更新 更多