Questa regola segnala l'uso dell'opzione
javax.xml.transform.Source
quando l'interfaccia
SourceHttpMessageConverter classe è non trovata.
In Spring Framework 6.0, il
SourceHttpMessageConverter classe è non è più non è più registrata per impostazione predefinita in Spring MVC o
RestTemplate.
Di conseguenza, le applicazioni web di Spring che utilizzano
javax.xml.transform.Source ora è necessario configurare
SourceHttpMessageConverter
esplicitamente. È importante notare che l'ordine di registrazione dei convertitori è importante.
Ad esempio,
SourceHttpMessageConverter dovrebbero dovrebbe essere registrato prima dei convertitori "catch-all" come
MappingJackson2HttpMessageConverter.
Il seguente frammento di codice mostra l'uso di
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();
}
}
In Spring Framework 6.0, il codice del controllore rimane invariato, ma sono necessari ulteriori passaggi di configurazione per assicurarne il corretto funzionamento per assicurarne il corretto funzionamento.
È possibile registrarsi
SourceHttpMessageConverter manualmente in Configuration il codice.
Di seguito è riportato un esempio di questo caso d'uso:
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new SourceHttpMessageConverter<>());
}
}
In alternativa, è possibile configurare l'opzione
SourceHttpMessageConverter all'interno di un
RestTemplate se lo si usa per recuperare XML da servizi esterni.
Ecco un esempio di questo caso d'uso:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
return restTemplate;
}
Per ulteriori informazioni, consultare le seguenti risorse: