我在WSO2 Api Manager中创建一个序列,需要接收请求A,将此请求转换为B并将其发送到服务S1。当响应到来时,我需要根据响应主体更新原始请求的一些元素,并将其发送到服务S2。
我试图建立这样的序列,而我几乎就在那里。我唯一的问题是第二部分:我的标题丢失了,它们没有传递给S2(但它们被传递给S1)。如何在第二次调用中保留标题,或者我可能做错了什么?
orignial 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>
答案 0 :(得分:0)
将标题保存在属性中并在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>