Skip to content

Commit b09fad1

Browse files
committed
Catch errors when adding SourceHttpMessageConverter
This commit ignores errors like TransformerFactoryConfigurationError that can be thrown when instantiating SourceHttpMessageConverter on platforms where no TransformerFactory implementation is available, like when compiling/running as GraalVM native images. Issue: SPR-17007
1 parent f8f8d28 commit b09fad1

File tree

5 files changed

+31
-6
lines changed

5 files changed

+31
-6
lines changed

spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2017 the original author or authors.
2+
* Copyright 2002-2018 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -64,7 +64,12 @@ public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConv
6464

6565

6666
public AllEncompassingFormHttpMessageConverter() {
67-
addPartConverter(new SourceHttpMessageConverter<>());
67+
try {
68+
addPartConverter(new SourceHttpMessageConverter<>());
69+
}
70+
catch (Error err) {
71+
// Ignore when no TransformerFactory implementation is available
72+
}
6873

6974
if (jaxb2Present && !jackson2XmlPresent) {
7075
addPartConverter(new Jaxb2RootElementHttpMessageConverter());

spring-web/src/main/java/org/springframework/web/client/RestTemplate.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,12 @@ public RestTemplate() {
179179
this.messageConverters.add(new ByteArrayHttpMessageConverter());
180180
this.messageConverters.add(new StringHttpMessageConverter());
181181
this.messageConverters.add(new ResourceHttpMessageConverter(false));
182-
this.messageConverters.add(new SourceHttpMessageConverter<>());
182+
try {
183+
this.messageConverters.add(new SourceHttpMessageConverter<>());
184+
}
185+
catch (Error err) {
186+
// Ignore when no TransformerFactory implementation is available
187+
}
183188
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
184189

185190
if (romePresent) {

spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,12 @@ protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?
805805
messageConverters.add(stringHttpMessageConverter);
806806
messageConverters.add(new ResourceHttpMessageConverter());
807807
messageConverters.add(new ResourceRegionHttpMessageConverter());
808-
messageConverters.add(new SourceHttpMessageConverter<>());
808+
try {
809+
messageConverters.add(new SourceHttpMessageConverter<>());
810+
}
811+
catch (Error err) {
812+
// Ignore when no TransformerFactory implementation is available
813+
}
809814
messageConverters.add(new AllEncompassingFormHttpMessageConverter());
810815

811816
if (romePresent) {

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,12 @@ public ExceptionHandlerExceptionResolver() {
111111
this.messageConverters = new ArrayList<>();
112112
this.messageConverters.add(new ByteArrayHttpMessageConverter());
113113
this.messageConverters.add(stringHttpMessageConverter);
114-
this.messageConverters.add(new SourceHttpMessageConverter<>());
114+
try {
115+
this.messageConverters.add(new SourceHttpMessageConverter<>());
116+
}
117+
catch (Error err) {
118+
// Ignore when no TransformerFactory implementation is available
119+
}
115120
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
116121
}
117122

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,12 @@ public RequestMappingHandlerAdapter() {
184184
this.messageConverters = new ArrayList<>(4);
185185
this.messageConverters.add(new ByteArrayHttpMessageConverter());
186186
this.messageConverters.add(stringHttpMessageConverter);
187-
this.messageConverters.add(new SourceHttpMessageConverter<>());
187+
try {
188+
this.messageConverters.add(new SourceHttpMessageConverter<>());
189+
}
190+
catch (Error err) {
191+
// Ignore when no TransformerFactory implementation is available
192+
}
188193
this.messageConverters.add(new AllEncompassingFormHttpMessageConverter());
189194
}
190195

0 commit comments

Comments
 (0)