A SourceHttpMessageConverter osztály alapértelmezés szerint nincs regisztrálva

Ez a szabály jelzi a javax.xml.transform.Source interfész, amikor a SourceHttpMessageConverter osztály nem nem található. A Spring keretrendszerben 6.0, a SourceHttpMessageConverter osztály nincs már alapértelmezés szerint nem regisztrálható a Spring MVC vagy RestTemplate.

Ennek következtében a Spring webes alkalmazások, amelyek a javax.xml.transform.Source most szükség van konfigurálni SourceHttpMessageConverter kifejezetten. Fontos megjegyezni, hogy az átalakító regisztrálásának sorrendje fontos. Például: SourceHttpMessageConverter kellene a "gyűjtő" konverterek előtt kell regisztrálni, mint például a MappingJackson2HttpMessageConverter.

A következő kódrészlet a 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();
                    }
                }  
             

A Spring keretrendszerben 6.0, a vezérlő kódja változatlan marad, de további konfigurációs lépésekkel szükséges a helyes működés biztosításához. Regisztrálhat SourceHttpMessageConverter manuálisan a oldalon Configuration kód. A következő példa erre a felhasználási esetre:

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

Alternatívaként beállíthatja a SourceHttpMessageConverter egy RestTemplate ha arra használja, hogy külső szolgáltatásokból XML-t kérjen le. Íme egy példa erre a felhasználási esetre:

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

Az alábbi információforrások nyújtanak további tájékoztatást: