#spring-integration
#весенняя интеграция
Вопрос:
Приведенный ниже код использует Spring Integration 3.0.1
Интеграция XML на стороне клиента:
<int:channel id="serviceTWeb"></int:channel>
<int:gateway id="serviceTGW" default-request-channel="serviceTWeb"
service-interface="com.test.ServiceTWeb">
</int:gateway>
<int-http:outbound-gateway
url="http://testserver:8080/service-webapp/service"
http-method="POST" id="RequestTNHTTP" reply-timeout="2000"
request-channel="serviceTWeb" message-converters="conv>
</int-http:outbound-gateway>
<bean id="conv" class="org.springframework.integration.http.converter.SerializingHttpMessageConverter">
</bean>
Интеграция на стороне веб-интерфейса XML:
<!-- The following uses a ServiceActivator on service -->
<bean id="stweb" class="test.poc.si.ServiceTWeb"></bean>
<bean id="conv" class="org.springframework.integration.http.converter.SerializingHttpMessageConverter">
</bean>
<int:channel id="requestChannel"></int:channel>
<int:channel id="replyChannel"></int:channel>
<int:service-activator input-channel="requestChannel" ref="stweb"
method="service" requires-reply="true" id="webserv"
output-channel="replyChannel">
</int:service-activator>
<int-http:inbound-gateway request-channel="requestChannel"
supported-methods="POST" path="/service" message-converters="conv"
reply-channel="replyChannel">
</int-http:inbound-gateway>
Клиент отправляет запрос на сервер, серверная сторона получает код
и обрабатывает объект запроса, но сервер выдает следующее при отправке
ответного сообщения:
СЕРЬЕЗНОЕ: Servlet.service() для сервлета [Multipart] в контексте с путем [/ service-webapp] выдал исключение [Ошибка обработки запроса; вложенным исключением является org.springframework.integration .Исключение MessagingException: не удалось преобразовать ответ: не найден подходящий HttpMessageConverter для типа [com.myobject.MReply] и принимает типы [[текст / html, изображение / gif, изображение / jpeg, /;q = .2, /; q = .2]]] с основной причиной org.springframework.integration.Исключение MessagingException: не удалось преобразовать ответ: не найден подходящий HttpMessageConverter для типа [com.myobject.MReply] и принимает типы [[текст / html, изображение / gif, изображение / jpeg, /;q = .2, /; q = .2]
Любая помощь будет приветствоваться!
Ответ №1:
Предполагая com.myobject.MReply
Serializable
, что это так, попробуйте настроить expected-response-type="com.myobject.MReply"
исходящий шлюз. Это должно привести к тому, что заголовок accept будет установлен на application/x-java-serialized-object
.
Редактировать:
Или установите expected-response-type="java.io.Serializable"
, если вы не хотите привязывать его к определенному типу.
Комментарии:
1. Есть ли другой способ сделать это, я бы предпочел не указывать ожидаемый тип.
2. Первый вариант сработал ожидаемый тип ответа =»com.myobject. MReply», но когда я попробовал заголовок accept в шлюзе, я получил следующее:
3. Первый сработал, но когда я попробовал заголовок accept, я получил: DEBUG org.springframework.beans. BeanUtils — не найден редактор свойств [com.my.ReplyEditor] для типа com.my.Reply в соответствии с соглашением о суффиксе ‘Editor’ org.springframework.beans. ConversionNotSupportedException: не удалось преобразовать значение типа ‘org.springframework.http.ResponseEntity’ в требуемый тип ‘com.my.Reply’; вложенным исключением является java.lang. Исключение IllegalStateException: не удается преобразовать значение типа [org.springframework.http.ResponseEntity] в требуемый тип [com.my.Reply]: не найдено подходящих редакторов или стратегии преобразования? Исправить?
4. Я не совсем уверен, почему это не сработало (но рассмотрю это); это подразумевает
entity.hasBody()
, что возвращает false (хотя ответ явно имеет тело). Однакоexpected-response-type="java.io.Serializable"
для меня все работает нормально (и вам не нужен заголовок accept), потому что ожидаемый тип ответаSerializable
установит его.5. Оказывается, так
RestTemplate
работает базовая схема — если вы не даете ему anexpected-response-type
, вы получаете aResponseEntity
только с заголовками и кодом состояния, без тела. Извините, я ввел вас в заблуждение. Такexpected-response-type
что требуется совместимость с ответомcontent-type
; мы исправим документы. jira.spring.io/browse/INT-3452