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 :