序列中的第二个服务调用不传播 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>
我正在 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>