La classe SourceHttpMessageConverter n'est pas enregistrée par défaut

Cette règle signale l'utilisation de l'option javax.xml.transform.Source lorsque l'interface SourceHttpMessageConverter la classe n'est n'est trouvée. Dans le cadre de Spring 6.0, le SourceHttpMessageConverter la classe est n'est n'est plus enregistrée par défaut dans Spring MVC ou RestTemplate.

Par conséquent, les applications web Spring qui utilisent javax.xml.transform.Source il faut maintenant configurer SourceHttpMessageConverter explicitement. Il est important de noter que l'ordre d'enregistrement des convertisseurs est important. Exemple : SourceHttpMessageConverter devraient doivent être enregistrés avant les convertisseurs "fourre-tout" tels que MappingJackson2HttpMessageConverter.

L'extrait de code suivant montre l'utilisation de javax.xml.transform.Source:


                @RestController
                public class TransformController {
                    @GetMapping(value = "/transform", produces = MediaType.TEXT_HTML_VALUE)
                    public String transformXml() throws Exception{
                        Source xmlSource = new StreamSource(new ClassPathResource("sample.xml").getInputStream());
                        Source xsltSource = new StreamSource(new ClassPathResource("transform.xslt").getInputStream());
                        StringWriter writer = new StringWriter();
                        Result result = new StreamResult(writer);
                        TransformerFactory factory = TransformerFactory.newInstance();
                        Transformer transformer = factory.newTransformer(xsltSource);
                        transformer.transform(xmlSource, result);
                        return writer.toString();
                    }
                }  
             

Dans le cadre Spring 6.0, le code du contrôleur reste inchangé, mais des étapes de configuration supplémentaires sont nécessaires pour s'assurer qu'il fonctionne correctement de configuration supplémentaires sont nécessaires pour garantir son bon fonctionnement. Vous pouvez vous inscrire SourceHttpMessageConverter manuellement dans Configuration code. Voici un exemple de ce cas d'utilisation :

            @Configuration
            public class WebConfig implements WebMvcConfigurer{
                @Override
                public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
                    converters.add(new SourceHttpMessageConverter<>());
                }
            }
            

Vous pouvez également configurer le SourceHttpMessageConverter à l'intérieur d'un RestTemplate si vous l'utilisez pour récupérer du XML à partir de services externes. Voici un exemple de ce cas d'utilisation :

            @Bean
            public RestTemplate restTemplate() {
                RestTemplate restTemplate = new RestTemplate();
                restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
                return restTemplate;
            }       
            

Pour plus d'informations, voir les ressources suivantes :