Spring Resttemplate - Нет подходящего httpmessageconverter для типа ответа [..] и типа содержимого [приложение/xml
-
25-10-2019 - |
Вопрос
У меня есть проблема с доступом к службе отдыха с Resttemplate. Мне уже удалось использовать MarshallingConverter, чтобы получить доступ к еще одной службе, и все работало нормально. Я скопировал эту функциональность и сгенерировал классы модели из схемы XSD, которую я получил. Однако я получаю исключение, что подходящего конвертера не было. Вот моя конфигурация (я использую Spring 3.0.6 в связи с Ваадином, если это важно):
<bean id="marshallingConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="jaxbMarshaller" />
<property name="unmarshaller" ref="jaxbMarshaller" />
</bean>
<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
... here are my model classes ...
</list>
</property>
</bean>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<ref bean="marshallingConverter" />
</list>
</property>
</bean>
Resttemplate является автоматическим внедрением в моей реализации клиента. Что мне здесь не хватает? Я проверил ответ, и тип контента устанавливается на Application/XML, и классы модели были автогенерированы, поэтому конфигурация должна быть правильной. Спасибо за помощь.
Решение
Итак, я сделал эту работу. Часть проблемы заключалась в том, что в сгенерированных классах отсутствовали аннотация XMLRootelement. Подробнее об этом здесь. Анкет Итак, я добавил аннотацию XJC в схему XSD и снова сгенерировал классы:
xjc -extension /path/to/schema
После этого все сработало (или, по крайней мере, у меня не было никакого исключения, обработка XML), но элементы изнутри корневого элемента не были Unmarshallised, и я получил только импланку Xmlelement от анализатора. Проблема была (это было специфичным для моего проекта), что определение элемента использовало XS: Anytype в качестве типа элемента, который не может быть проанализирован. После того, как я изменил его на правильный тип элемента, все работало как очарование.