自定义Http-Client的动态URL - Spring-XD

时间:2015-12-02 02:41:28

标签: spring spring-integration spring-xd

我们为spring XD编写了一个自定义Http-client,并计划使用这个自定义处理器来调用不同的API。但是,我们需要根据有效负载调用两个不同的API。除了使用动态路由器(写入命名通道)之外,还有一种方法可以动态设置URL以供http-client调用吗?这是当前的配置。

<header-filter input-channel="input" output-channel="inputX"
    header-names="x-death" />

<service-activator input-channel="inputX" ref="gw" />

<gateway id="gw" default-request-channel="toHttp"
    default-reply-timeout="0" error-channel="errors" />

<beans:bean id="inputfields"
    class="com.batch.httpclient.HTTPInputProperties">
    <beans:property name="nonRetryErrorCodes" value="${nonRetryErrorCodes}" />
</beans:bean>
<beans:bean id="responseInterceptor"
    class="com.batch.httpclient.ResponseInterceptor">
    <beans:property name="inputProperties" ref="inputfields" />
</beans:bean>

<chain input-channel="errors" output-channel="output">

    <transformer ref="responseInterceptor" />
</chain>


<int-http:outbound-gateway id='batch-http'
    header-mapper="headerMapper" request-channel='toHttp' url-expression="${url}"
    http-method="${httpMethod}" expected-response-type='java.lang.String'
    charset='${charset}' reply-timeout='${replyTimeout}' reply-channel='output'>
</int-http:outbound-gateway>

<beans:bean id="headerMapper"
    class="org.springframework.integration.http.support.DefaultHttpHeaderMapper"
    factory-method="outboundMapper">
    <beans:property name="outboundHeaderNames" value="*" />
    <beans:property name="userDefinedHeaderPrefix" value="" />
</beans:bean>

<channel id="output" />
<channel id="input" />
<channel id="inputX" />
<channel id="toHttp" />

1 个答案:

答案 0 :(得分:0)

如果它基于有效载荷类型,那么这样的东西应该有用......

url-expression="payload.getClass().getSimpleName().equals("Bar") ? 'http://foo/bar' : 'http://foo/baz'"

如果它是有效载荷上的属性,那么

url-expression="payload.foo.equals("bar") ? 'http://foo/bar' : 'http://foo/baz'"

修改

url-expression="payload.foo.equals("bar") ? '${url1}' : '${url2}'"

这需要更改属性元数据类以重命名url并添加url2