Primavera RestTemplate - senza HttpMessageConverter adatto trovato per il tipo di risposta [..] e tipo di contenuto [application / xml]
-
25-10-2019 - |
Domanda
Ho un problema l'accesso a un servizio REST con l'RestTemplate. Ho già riuscito a all'utente la MarshallingConverter per accedere con un solo altro servizio, e tutto ha funzionato bene. Ho copiato questa funzionalità e classi del modello generate dallo schema XSD che ho ricevuto. Tuttavia ottengo un'eccezione che è stato trovato alcun convertitore adatto. Qui è la mia configurazione (sto usando Primavera 3.0.6 in relazione Vaadin se quello che conta):
<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>
Il RestTemplate è autowired nella mia implementazione del servizio di classe cliente. Che cosa mi manca qui? Ho controllato la risposta e il tipo di contenuto è impostato su application / xml e le classi modello fosse generata automaticamente, quindi la configurazione dovrebbe essere giusto. Grazie per qualsiasi aiuto.
Soluzione
Quindi ho fatto questo lavoro. La parte del problema è, che le classi generate mancavano XmlRootElement annotazione. Più su di esso qui . Così ho aggiunto l'annotazione XJC allo schema XSD e ha generato le classi di nuovo con:
xjc -extension /path/to/schema
Dopo che tutto ha funzionato (o almeno non ho avuto alcuna eccezione l'elaborazione XML), ma gli elementi da dentro l'elemento principale non erano unmarshallised e ho ottenuto solo l'implpementation XmlElement dal parser. Il problema era (questo era specifica per il mio progetto), che la definizione elemento xs utilizzato: anyType come il tipo di elemento, che non può essere analizzato. Dopo ho cambiato al tipo di elemento giusto, tutto ha funzionato come fascino.