Skip to content

Provide alternative RestTemplate constructor to avoid default MessageConverter creation [SPR-11351] #15976

@spring-projects-issues

Description

@spring-projects-issues

Kek opened SPR-11351 and commented

The default MessageConverters are initialized in constructor of RestTemplate. This solution has some problems:

  1. When I want different set of MessageConverters, the default MessageConverters are initialized first and than replaced by setMessageConverters(..) method. This slows down the application startup.

  2. When I have some classes as JAXB, Jackson on classpath, than some other default converters are initialized too (but I don't use these technologies (JAXB, Jackson) with RestTempate) - this slows down the startup, so I want to specify my "limited" set of Converters - but is the same problem as 1).

  3. When I have 2 WAR applications in Tomcat, and one application sets the System property "javax.xml.transform.TransformerFactory" for Xalan XSLTC, and the second application does not have Xalan on classpath and does not use the XSLT,but instantiates RestTemplate for JSON based communication, than Exception is thrown:

Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.xsltc.trax.TransformerFactoryImpl not found
	at javax.xml.transform.TransformerFactory.newInstance(TransformerFactory.java:107)
	at org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.<init>(AbstractXmlHttpMessageConverter.java:47)
	at org.springframework.http.converter.xml.SourceHttpMessageConverter.<init>(SourceHttpMessageConverter.java:47)
	at org.springframework.web.client.RestTemplate.<init>(RestTemplate.java:154)

I don´t want to initialize any default XML message Converter for RestTemplate, because I use only JSON for communication -> I want to configure my own set of MessageConverters, but the constructor is called first and destroyed by the exception.

So please, move the initialization of default MessageConvertors for RestTemplate from constructor to some @PostConstruct method, and initialize these default converters only in situations, when the Array of converters was not set (preinitialized) by setMessageConventers(...) operation from configuration.


Affects: 3.2.4, 4.0 GA

Issue Links:

Referenced from: commits 1cb9b9c, 425e5a0

Backported to: 3.2.7

0 votes, 8 watchers

Metadata

Metadata

Assignees

Labels

in: webIssues in web modules (web, webmvc, webflux, websocket)status: backportedAn issue that has been backported to maintenance branchestype: enhancementA general enhancement

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions