Esta regla marca el uso de
javax.xml.transform.Source
cuando el
SourceHttpMessageConverter clase es no encontrada.
En Spring Framework 6.0, el
SourceHttpMessageConverter clase es no registrada por defecto en Spring MVC o
RestTemplate.
En consecuencia, las aplicaciones web Spring que utilizan
javax.xml.transform.Source ahora necesita configurar
SourceHttpMessageConverter
explícitamente. Es importante señalar que el orden de registro de los convertidores es importante.
Por ejemplo:
SourceHttpMessageConverter debería antes que convertidores "comodín" como
MappingJackson2HttpMessageConverter.
El siguiente fragmento de código muestra el uso 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();
}
}
En Spring Framework 6.0, el código del controlador permanece inalterado, pero se requieren pasos adicionales de configuración para garantizar su correcto funcionamiento.
Puede registrarse
SourceHttpMessageConverter manualmente en Configuration código.
A continuación se presenta un ejemplo de este caso de uso:
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new SourceHttpMessageConverter<>());
}
}
Como alternativa, puede configurar el
SourceHttpMessageConverter dentro de un
RestTemplate si lo utiliza para recuperar XML de servicios externos.
He aquí un ejemplo de este caso de uso:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
return restTemplate;
}
Para obtener más información, consulte los recursos siguientes: