2016-10-26 28 views
1

我們試圖將負載傳遞給使用HttpOutboundGateway進行的POST調用。讀取文件並將內容存儲在通道中。爲了檢索頻道的內容,我們將extractPayload設置爲true。我們正在使用Spring-Integration和DSL,而不是XML方法。任何指導將不勝感激。如何在Spring集成中使用HttpOutboundAdapter傳遞負載

return IntegrationFlows.from("FileContentChannel") 
       .channel("FileContentChannel") 
       .enrichHeaders(h -> h.header("xxx", "xxx") 
         .header("xxx", "xxx")) 
       .handle(Http.outboundGateway("http://payment/gateway") 
         .charset("UTF-8") 
         .httpMethod(HttpMethod.POST) 
         .extractPayload(true) 
         .mappedRequestHeaders("pay*") 
         .headerMapper(headerMapper()) 
         .expectedResponseType(String.class)) 
       .channel(MessageChannels.queue("paymentResponseChannel")) 
       .get(); 

錯誤日誌:

2016-10-26 16:34:22.343 ERROR 1584 --- [ask-scheduler-6] o.s.integration.handler.LoggingHandler : org.springframework.messaging.MessageHandlingException: HTTP request execution failed for URI [http://payment/gateway]; nested exception is org.springframework.web.client.HttpClientErrorException: 404 Not Found 
at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:409) 
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109) 
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) 
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116) 
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:148) 
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:121) 
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77) 
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) 
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373) 
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) 
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) 
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) 
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:292) 
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:212) 
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:129) 
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115) 
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127) 
at org.springframework.integration.endpoint.PollingConsumer.handleMessage(PollingConsumer.java:129) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353) 
at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) 
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 
at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344) 
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) 
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) 
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: org.springframework.web.client.HttpClientErrorException: 404 Not Found 
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91) 
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:667) 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:620) 
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:595) 
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:516) 
at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:382) 
... 35 more 

回答

0

.handle()爲服務激活EI圖案。並且完全有責任從input渠道向目標服務提供​​。在你的情況下,它下面是RestTemplate,HTTP體是從​​構建的。

您的配置看起來完全正確。我不明白問題出在哪裏?

編輯

Caused by: org.springframework.web.client.HttpClientErrorException: 404 Not Found 

不,肯定是什麼讓你覺得有什麼問題​​。看起來你錯過了一些HTTP頭或者使用了錯誤的值。

您應該諮詢服務器以確定應該做些什麼。 StackTrace中沒有任何線索存在有效負載的問題。

OTOH,因爲我們得到404 Not Found,這意味着​​從頻道傳遞到Http.outboundGateway()

+0

那是對的。我有一個通道,當打印出來的打印效果很好時,它將文件內容作爲有效內容返回。但是,當使用** extractPayload **方法時,我不認爲有效內容從通道傳遞到API調用。 –

+0

請在我的回答中看看編輯。 –

+0

我確信它的有效載荷是因爲我已經在獨立的休息客戶端上測試了API,並且還與其他GET調用一起測試了API,唯一的區別是沒有與它相關的負載,並且工作正常。是否有任何其他方法可用於將負載顯式傳遞給HttpOutboundGateway? –