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

Wso2 序列中的第二个服务调用不传播http头,wso2,wso2esb,wso2-am,synapse,Wso2,Wso2esb,Wso2 Am,Synapse,我正在WSO2 Api管理器中创建一个序列,该序列需要接收请求a,将该请求转换为B,并将其发送到服务S1。当响应到来时,我需要根据响应主体更新原始请求的一些元素,并将其发送到服务S2 我试图建立这样的序列,我几乎做到了。我唯一的问题是第二部分:我的头丢失了,它们没有被传递到S2(但它们被传递到S1)。如何在第二次调用中保留标题,或者可能我做得不正确 原始RQ->构建新RQ->发送到S1->丰富原始RQ->发送到S2 <sequence name="CustomSequence" trace

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

我试图建立这样的序列,我几乎做到了。我唯一的问题是第二部分:我的头丢失了,它们没有被传递到S2(但它们被传递到S1)。如何在第二次调用中保留标题,或者可能我做得不正确

原始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>$1</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>

$1

将标题保存在属性中,并在S2之前再次设置。S1重写标题,您需要从S1中删除标题并再次设置标题。 例如:

<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>

...

我可以做到这一点。听起来不太对劲,有点像黑客,但它确实有效。这里唯一的错误是“转换”——应该是“传输”吗?我也不太清楚为什么我需要删除任何东西,直到我注意到我的第二个请求被打包成gzip。还有一些我不想要的附加标题。