Dave Syer opened SPR-17007 and commented
If SourceHttpMessageConverter
fails to initialize itself it blows up a RestTemplate
and then the whole bean factory on startup:
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl not found
at java.lang.Throwable.<init>(Throwable.java:265)
at java.lang.Error.<init>(Error.java:70)
at javax.xml.transform.TransformerFactoryConfigurationError.<init>(TransformerFactoryConfigurationError.java:91)
at javax.xml.transform.FactoryFinder.newInstance(FactoryFinder.java:181)
at javax.xml.transform.FactoryFinder.find(FactoryFinder.java:261)
at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:106)
at org.springframework.http.converter.xml.SourceHttpMessageConverter.<init>(SourceHttpMessageConverter.java:86)
at org.springframework.web.client.RestTemplate.<init>(RestTemplate.java:181)
at org.springframework.boot.autoconfigure.http.HttpMessageConverters.getDefaultConverters(HttpMessageConverters.java:204)
at org.springframework.boot.autoconfigure.http.HttpMessageConverters.<init>(HttpMessageConverters.java:106)
at org.springframework.boot.autoconfigure.http.HttpMessageConverters.<init>(HttpMessageConverters.java:92)
at org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration.messageConverters(HttpMessageConvertersAutoConfiguration.java:72)
The presence of a default implementation of TransformerFactory
appears to be platform dependent, so RestTemplate
and friends probably ought not to rely on their existence. E.g. a defensive type check might be needed.
Affects: 5.0.7
Issue Links: - #21529 Initial GraalVM native images (Substrate VM) support ("is depended on by")
Referenced from: commits https://github.com/spring-projects/spring-framework/commit/b09fad13a1f9517abd901587c9299bf5b65ed061
Comment From: spring-projects-issues
Sébastien Deleuze commented
The TransactionFactory
implementation is very specific and can vary, so I chose to just catch the error thrown when instantiating SourceHttpMessageConverter
when no impl is available.