序列中的第二个服务调用不传播 http headers

The second service call in a sequence does not propagate http headers

我正在 WSO2 中创建一个序列 Api 管理器需要接收请求 A,将此请求转换为 B 并将其发送到服务 S1。当响应到来时,我需要根据响应 body 更新原始请求的一些元素并将其发送到服务 S2。

我正在尝试构建这样的序列,我快完成了。我遇到的唯一问题是第二部分:我的 headers 丢失了,它们没有传递给 S2(但它们传递给了 S1)。如何在第二次调用中保留 headers,或者我做错了什么?

原始RQ -> 构建新的RQ -> 发送到S1 -> 丰富原始RQ -> 发送到S2

<sequence name="CustomSequence" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <property expression="json-eval($.)" name="Message" scope="default" type="STRING"/>
    <class description="MyCustomMediator" name="com.sample.MyCustomMediator"/>
    <payloadFactory description="MyRequestUpdater" media-type="json">
       <format></format>
       <args>
           <arg evaluator="xml" expression="get-property('MY_SECRET_DATA')"/>
       </args>
    </payloadFactory>
    <call>
       <endpoint>
           <http method="post" trace="disable" uri-template="https://<url to service S1>"/>
       </endpoint>
   </call>
   <property expression="json-eval($.)" name="ResponseFromS1" scope="default" type="STRING"/>
   <class description="MyCustomMediator2" name="com.sample.MyCustomMediator2"/>
   <send>
       <endpoint>
            <http trace="disable" uri-template="http://<url to service S2>"/>
       </endpoint>
   </send>
</sequence>

将你的Headers保存在属性中,并在S2之前重新设置。 S1 重写了您的 headers,您需要从 s1 中删除 headers 并重新设置您的 header。 例如:

<property name="header1" expression="get-property('transport','name-of-header')" type="STRING" /> 
<property name="header2" expression="get-property('transport','name-of-header2')" type="STRING" /> 
...
<S1>
<!-- this property remove all transport headers that S1 makes -->
<property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
<property name="name-of-header" scope="transport" expression="get-property('header1')" type="STRING" />
<property name="name-of-header" scope="transport" expression="get-property('header2')" type="STRING" />
<S2>