Diese Regel kennzeichnet die Verwendung der
javax.xml.transform.Source
schnittstelle, wenn die
SourceHttpMessageConverter klasse ist nicht gefunden.
In Spring Rahmenwerk 6.0, die
SourceHttpMessageConverter klasse ist nicht nicht mehr standardmäßig in Spring MVC registriert oder
RestTemplate.
Infolgedessen werden Spring Webanwendungen mit
javax.xml.transform.Source müssen nun konfigurieren
SourceHttpMessageConverter
ausdrücklich. Es ist zu beachten, dass die Reihenfolge der Konverterregistrierung wichtig ist.
Beispiel:
SourceHttpMessageConverter sollte vor "catch-all"-Konvertern wie
MappingJackson2HttpMessageConverter.
Der folgende Codeschnipsel zeigt die Verwendung von
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 bleibt der Code des Controllers unverändert, aber es sind zusätzliche Konfigurationsschritte erforderlich, um die korrekte Funktion sicherzustellen.
Sie können sich registrieren
SourceHttpMessageConverter manuell in Configuration code.
Im Folgenden finden Sie ein Beispiel für diesen Anwendungsfall:
@Configuration
public class WebConfig implements WebMvcConfigurer{
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(new SourceHttpMessageConverter<>());
}
}
Alternativ dazu können Sie die
SourceHttpMessageConverter innerhalb einer
RestTemplate wenn Sie es verwenden, um xML von externen Diensten abzurufen.
Hier ist ein Beispiel für einen solchen Anwendungsfall:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new SourceHttpMessageConverter<>());
return restTemplate;
}
Weitere Informationen finden Sie in den folgenden Quellen: