本文介绍了轮询HTTP服务(出站网关)&在Spring Integration中使用Transformer的过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我想要实现的目标。每15分钟轮询一次HTTP API并处理从中检索的数据。我们计划使用Spring Integration。我是新手。所以几乎没有理解,我已经创建了一个出站网关并添加了相同的轮询,但得到以下错误。

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

我的int-config.xml文件是

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!

推荐答案

第一次更新:对于轮询,添加入站通道适配器工作

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>

第二次更新:为了转换对bean的响应,添加了此代码

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

最后,我可以轮询HTTP服务,获取数据并进行处理!感谢@JensKrogsboell的所有帮助!

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

这篇关于轮询HTTP服务(出站网关)&amp;在Spring Integration中使用Transformer的过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-23 17:05