Polling HTTP Service(Outbound Gateway) & process using Transformer in Spring Integration

梦想与她 提交于 2019-12-08 02:15:32

问题


Here is what I'm trying to achieve. Poll an HTTP API once every 15 minutes and process the data retrieved from this. We plan to use Spring Integration. I'm new to this. So with little understanding, I've created an outbound gateway and added poller for the same, but getting the below error.

Also, can someone tell me how can I use transformer to process the data from the outbound gateway?

Error creating bean with name 'org.springframework.integration.config.ConsumerEndpointFactoryBean#0':
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 
A poller should not be specified for endpoint 'org.springframework.integration.config.ConsumerEndpointFactoryBean#0', 
since 'in' is a SubscribableChannel (not pollable).

My int-config.xml file is

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd
        http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd"
    xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:oxm="http://www.springframework.org/schema/oxm"
    xmlns:int-http="http://www.springframework.org/schema/integration/http">

    <int:annotation-config/>

    <!-- Inbound/Outbound Channels -->
    <int:channel id="employeeSearchRequest" />
    <int:channel id="employeeSearchResponse" />

    <int:channel id="userSearchRequest" />
    <int:channel id="userSearchResponse" />


    <int-http:inbound-gateway id="inboundEmployeeSearchRequestGateway"
        supported-methods="GET, POST"
        request-channel="employeeSearchRequest"
        reply-channel="employeeSearchResponse"      
        mapped-response-headers="Return-Status, Return-Status-Msg, HTTP_RESPONSE_HEADERS"
        view-name="/employee"
        path="/services/employee/{id}/search"
        reply-timeout="50000">

        <int-http:header name="employeeId" expression="#pathVariables.id"/>

    </int-http:inbound-gateway>

    <int-http:inbound-gateway id="inboundUserSearchRequestGateway"
        supported-methods="GET, POST"
        request-channel="userSearchRequest"
        reply-channel="userSearchResponse"      
        mapped-response-headers="Return-Status, Return-Status-Msg, HTTP_RESPONSE_HEADERS"
        view-name="/users"
        path="/users/{id}/search"
        reply-timeout="50000">

        <int-http:header name="userId" expression="#pathVariables.id"/>

    </int-http:inbound-gateway>

    <!-- Consume WS Sample -->
    <int:channel id="in" />
    <int:channel id="out" />

     <int-http:outbound-gateway request-channel="in" reply-channel="out"
        url="http://echo.jsontest.com/key/value/one/two" http-method="GET" 
        expected-response-type="java.lang.String">
        <int:poller fixed-rate="20000"/>
    </int-http:outbound-gateway>

    <int:transformer input-channel="in"
    output-channel="out" ref="hTTPTransformer" />

    <!-- Consume WS Sample Ends -->


    <!-- Note: The default parameter name for favorParameter is "format". For instance, when this flag is true, a request for /services/employee/{id}/search?format=json will result
            in an MappingJacksonJsonView being resolved, while the Accept header can be the browser-defined text/html,application/xhtml+xml  -->

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="contentNegotiationManager">
            <bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
                <property name="defaultContentType" value="application/json"/>
                <property name="favorParameter" value="true"/>
                <property name="ignoreAcceptHeader" value="true" />
                <property name="mediaTypes">
                    <map>
                        <entry key="json" value="application/json" />
                        <entry key="xml" value="application/xml" />
                    </map>
                </property>
            </bean>
        </property>
        <property name="defaultViews">
            <list>
                <bean
                    class="org.springframework.integration.samples.rest.json.view.ExtendedMappingJacksonJsonView" >
                    <property name="objectMapper" ref="jaxbJacksonObjectMapper"/>
                </bean>
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <constructor-arg ref="marshaller"/>
                </bean>
            </list>
        </property>
    </bean>

    <oxm:jaxb2-marshaller id="marshaller" context-path="org.springframework.integration.samples.rest.domain" />

    <int:service-activator id="employeeServiceActivator"
                    input-channel="employeeSearchRequest"
                    output-channel="employeeSearchResponse"
                    ref="employeeSearchService"
                    method="getEmployee"
                    requires-reply="true"
                    send-timeout="60000"/>

    <int:service-activator id="userServiceActivator"
                    input-channel="userSearchRequest"
                    output-channel="userSearchResponse"
                    ref="userSearchService"
                    method="getUsers"
                    requires-reply="true"
                    send-timeout="60000"/>                  

    <bean id="jaxbJacksonObjectMapper" class="org.springframework.integration.samples.rest.json.JaxbJacksonObjectMapper"/>

</beans>

Can someone tell me why am I getting this error? Thanks in advance guys!


回答1:


1st UPDATE : For Polling, adding inbound-channel-adapter worked

<int-http:outbound-gateway request-channel="in" reply-channel="out"
        url="http://echo.jsontest.com/key/value/one/two" http-method="GET" 
        expected-response-type="java.lang.String">
    </int-http:outbound-gateway>

<int:inbound-channel-adapter channel="in" expression="''">
        <int:poller fixed-delay="60000"></int:poller>
    </int:inbound-channel-adapter>

2nd UPDATE : For transforming response to bean, added this code

<int:json-to-object-transformer input-channel="out" 
output-channel="testChannel" type="org.springframework.integration.samples.rest.domain.PlaceholderBean"/>

<int:service-activator method="dummyMethod" input-channel="testChannel" ref="dummyService"/> 

Finally, I'm able to poll HTTP Service, get data and process it! Thanks @JensKrogsboell for all the help!



来源:https://stackoverflow.com/questions/36880566/polling-http-serviceoutbound-gateway-process-using-transformer-in-spring-int

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!