我使用Spring与
的集成调用Spring数据Rest URL。
我的调用是对已知资源URL的简单HTTP GET(在我的例子中是“Examples”)。
<int-http:outbound-gateway id="internalGW" request-channel="dataRestChannel"
encode-uri="true" url-expression="payload"
http-method="GET" extract-request-payload="true"
header-mapper="headerMapper">
</int-http:outbound-gateway>
我想这是引用http-method=“get”extract-request-payload=“true”
配置,但我不知道这个警告是否与问题相关。
这是用包含要调用的REST url的消息调用该出站通道:
public Object invokeUrl(String url){
MessagingChannel messagingChannel = (MessagingChannel)ApplicationContextResolver.getApplicationContext().getBean("requestChannelBean");
MessageChannel dataRestChannel = messagingChannel.getDataRestChannel();
MessagingTemplate messagingTemplate = new MessagingTemplate();
Message<?> requestMessage = MessageBuilder.withPayload(url).build();
Message<?> response = messagingTemplate.sendAndReceive(dataRestChannel, requestMessage);
return response.getPayload();
}
调用很好,我有一个HTTP状态代码200;这是response.getPayload():
<200 OK,
{
Server=[Apache-Coyote/1.1],
Cache-Control=[no-cache,no-store,max-age=0,must-revalidate],
Pragma=[no-cache],
Expires=[0],
X-XSS-Protection=[1; mode=block],
X-Frame-Options=[DENY,DENY],
X-Content-Type-Options=[nosniff,nosniff],
Transfer-Encoding=[chunked],
Date=[Fri,22 Jul 2016 13:03:22 GMT],
Content-Type=[application/hal+json],
Content-Length=[0]
}>
response GenericMessage<T> (id=219)
headers MessageHeaders (id=221)
payload ResponseEntity<T> (id=222)
body null
headers HttpHeaders (id=224)
statusCode HttpStatus (id=159)
如果我在浏览器上使用GET直接转到该URL,则会收到以下响应:
{
"_embedded": {
"examples": []
},
"_links": {
"self": {
"href": "http://localhost:8080/restapp/api/examples"
},
"profile": {
"href": "http://localhost:8080/restapp/api/profile/examples"
}
}
}
我希望这是响应负载,而不是空负载。
似乎我收到的responseentity.body是空的。
以下是请求的详细信息:
Spring集成请求:
GET http://localhost:8080/restapp/api/examples HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
浏览器请求:
GET http://localhost:8080/restapp/api/examples HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: JSESSIONID=C966FB7DB6B172D530D7C1F4DC57C6B8
@Override
public ResponseEntity<T> extractData(ClientHttpResponse response) throws IOException {
if (this.delegate != null) { // this.delegate is null
T body = this.delegate.extractData(response);
return new ResponseEntity<T>(body, response.getHeaders(), response.getStatusCode());
}
else {
return new ResponseEntity<T>(response.getHeaders(), response.getStatusCode()); // <- it's executed this one
}
}
了解一下为什么This.Delegate被设置为NULL会很有趣。
您需要将expected-response-type=“java.lang.string”
添加到网关。
我正在尝试将spring集成配置为向队列发送消息,然后接收消息,即非常简单的事情: 我认为解耦所必需的是在流程的两端都有一个消息网关。因此,我的第一次尝试(有效)如下所示: 其中MessageReceiverHandler()是扩展AbstractMessageHandler的bean。 所以上面我们有一个用于出站消息的消息网关。我假设我们也应该有一个用于入站消息的网关,允许我们将传入消息处理与应
我有一个 FileUpload 事件,应该将其发送到 http:outbound upload URL。为此,我必须首先对登录 URL 进行身份验证并获取响应,并设置要执行的出站上传 URL 的会话 ID。在我的情况下,我有一个事件侦听器,它侦听应用程序以发布文件上传事件。发布后,我的侦听器可以拾取并执行流。我正在尝试了解如何实现这一点,因为文件上传对象需要保留,直到登录响应返回。谢谢!
我正在开发一个关于Spring集成的POC,使用如下。 从远程JMS队列订阅输入消息(A) 将输入消息(A)转换为(B) 使用(B)调用远程Web服务并接收响应 我的spring int-config-xml有以下内容 在我的Spring集成proj工作区中拥有所有jaxb生成的源代码。 在STS 3.8中执行此操作时。3,将抛出以下错误。 不确定我的代码中有什么错误。任何解决这一问题的帮助都是高
我正在开发一个Spring集成应用程序,我有一个地图列表,我需要将其插入到表格中。 我使用了jdbc: Outsport-网关或适配器将记录插入到表中。 但是如何使用jdbc:出站网关从我的地图列表中插入所有记录。
在带有Java配置的ftp出站网关的Spring集成文档示例(16.8.1)中,如何将应答通道的有效负载记录到控制台?
下面是配置了标头的出站http网关,但在添加轮询器时不会连续触发。它只会被触发一次,然后停止。