Spring RestTTemplate: no se encuentra httpmessageConverter adecuado para el tipo de respuesta [..] y el tipo de contenido [aplicación/xml

StackOverflow https://stackoverflow.com/questions/8802499

Pregunta

Tengo un problema para acceder a un servicio de descanso con la placa de descanso. Ya me las arreglé para usar el Convinter Marshalling para acceder a otro servicio, y todo funcionó bien. He copiado esta funcionalidad y generado clases de modelos del esquema XSD que he recibido. Sin embargo, obtengo una excepción de que no se encontró un convertidor adecuado. Aquí está mi configuración (estoy usando Spring 3.0.6 en relación con Vaadin si eso importa):

<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 se realiza automáticamente en la implementación de mi clase de cliente de servicio. ¿Que me estoy perdiendo aqui? He verificado la respuesta y el tipo de contenido está configurado en Application/XML y las clases de modelo se autogeneraron, por lo que la configuración debe ser correcta. Gracias por cualquier ayuda.

¿Fue útil?

Solución

Así que hice que esto funcione. La parte del problema era que a las clases generadas les faltaba la anotación XMLROOTELEMENT. Más sobre eso aquí. Así que agregué la anotación XJC al esquema XSD y generé las clases nuevamente con:

xjc -extension /path/to/schema

Después de eso, todo ha funcionado (o al menos no obtuve ninguna excepción procesando el XML), pero los elementos del interior del elemento raíz no estaban solteros y solo obtuve la implementación XMLELEMENT del analizador. El problema era (esto era específico para mi proyecto), que la definición de elemento usaba XS: cualquier tipo de elemento como tipo de elemento, que no se puede analizar. Después de haberlo cambiado al tipo de elemento correcto, todo funcionó como encanto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top