Essa regra sinaliza o uso do
javax.xml.transform.Source
quando a interface
SourceHttpMessageConverter classe é não encontrada.
Na estrutura Spring 6.0, o
SourceHttpMessageConverter classe é não não é mais registrada por padrão em Spring MVC ou
RestTemplate.
Como consequência, os aplicativos da Web Spring que usam
javax.xml.transform.Source agora precisa para configurar
SourceHttpMessageConverter
explicitamente. É importante observar que a ordem de registro do conversor é importante.
Por exemplo,
SourceHttpMessageConverter devem ser registrado antes de conversores "catch-all" como
MappingJackson2HttpMessageConverter.
O trecho de código a seguir mostra o 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();
}
}
No Spring Framework 6.0, o código do controlador permanece inalterado, mas são necessárias etapas adicionais de configuração para são necessárias para garantir que ele funcione corretamente.
Você pode se registrar
SourceHttpMessageConverter manualmente em Configuration código.
A seguir, um exemplo desse caso de uso:
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new SourceHttpMessageConverter<>());
}
}
Como alternativa, você pode configurar o
SourceHttpMessageConverter em um
RestTemplate se você o estiver usando para recuperar XML de serviços externos.
Aqui está um exemplo desse caso de uso:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
return restTemplate;
}
Para obter informações adicionais, consulte os recursos a seguir: