11/*
2- * Copyright 2002-2024 the original author or authors.
2+ * Copyright 2002-2025 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.
4444import org .springframework .http .converter .HttpMessageConverter ;
4545import org .springframework .http .converter .ResourceHttpMessageConverter ;
4646import org .springframework .http .converter .StringHttpMessageConverter ;
47+ import org .springframework .http .converter .cbor .KotlinSerializationCborHttpMessageConverter ;
4748import org .springframework .http .converter .cbor .MappingJackson2CborHttpMessageConverter ;
49+ import org .springframework .http .converter .feed .AtomFeedHttpMessageConverter ;
50+ import org .springframework .http .converter .feed .RssChannelHttpMessageConverter ;
4851import org .springframework .http .converter .json .GsonHttpMessageConverter ;
4952import org .springframework .http .converter .json .JsonbHttpMessageConverter ;
5053import org .springframework .http .converter .json .KotlinSerializationJsonHttpMessageConverter ;
5154import org .springframework .http .converter .json .MappingJackson2HttpMessageConverter ;
55+ import org .springframework .http .converter .protobuf .KotlinSerializationProtobufHttpMessageConverter ;
5256import org .springframework .http .converter .smile .MappingJackson2SmileHttpMessageConverter ;
5357import org .springframework .http .converter .support .AllEncompassingFormHttpMessageConverter ;
58+ import org .springframework .http .converter .xml .Jaxb2RootElementHttpMessageConverter ;
59+ import org .springframework .http .converter .xml .MappingJackson2XmlHttpMessageConverter ;
5460import org .springframework .http .converter .yaml .MappingJackson2YamlHttpMessageConverter ;
5561import org .springframework .lang .Nullable ;
5662import org .springframework .util .Assert ;
@@ -84,20 +90,30 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
8490
8591 // message factories
8692
87- private static final boolean jackson2Present ;
93+ private static final boolean romePresent ;
8894
89- private static final boolean gsonPresent ;
95+ private static final boolean jaxb2Present ;
9096
91- private static final boolean jsonbPresent ;
97+ private static final boolean jackson2Present ;
9298
93- private static final boolean kotlinSerializationJsonPresent ;
99+ private static final boolean jackson2XmlPresent ;
94100
95101 private static final boolean jackson2SmilePresent ;
96102
97103 private static final boolean jackson2CborPresent ;
98104
99105 private static final boolean jackson2YamlPresent ;
100106
107+ private static final boolean gsonPresent ;
108+
109+ private static final boolean jsonbPresent ;
110+
111+ private static final boolean kotlinSerializationCborPresent ;
112+
113+ private static final boolean kotlinSerializationJsonPresent ;
114+
115+ private static final boolean kotlinSerializationProtobufPresent ;
116+
101117
102118 static {
103119 ClassLoader loader = DefaultRestClientBuilder .class .getClassLoader ();
@@ -107,14 +123,19 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
107123 reactorNettyClientPresent = ClassUtils .isPresent ("reactor.netty.http.client.HttpClient" , loader );
108124 jdkClientPresent = ClassUtils .isPresent ("java.net.http.HttpClient" , loader );
109125
126+ romePresent = ClassUtils .isPresent ("com.rometools.rome.feed.WireFeed" , loader );
127+ jaxb2Present = ClassUtils .isPresent ("jakarta.xml.bind.Binder" , loader );
110128 jackson2Present = ClassUtils .isPresent ("com.fasterxml.jackson.databind.ObjectMapper" , loader ) &&
111129 ClassUtils .isPresent ("com.fasterxml.jackson.core.JsonGenerator" , loader );
112- gsonPresent = ClassUtils .isPresent ("com.google.gson.Gson" , loader );
113- jsonbPresent = ClassUtils .isPresent ("jakarta.json.bind.Jsonb" , loader );
114- kotlinSerializationJsonPresent = ClassUtils .isPresent ("kotlinx.serialization.json.Json" , loader );
130+ jackson2XmlPresent = ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.xml.XmlMapper" , loader );
115131 jackson2SmilePresent = ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.smile.SmileFactory" , loader );
116132 jackson2CborPresent = ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.cbor.CBORFactory" , loader );
117133 jackson2YamlPresent = ClassUtils .isPresent ("com.fasterxml.jackson.dataformat.yaml.YAMLFactory" , loader );
134+ gsonPresent = ClassUtils .isPresent ("com.google.gson.Gson" , loader );
135+ jsonbPresent = ClassUtils .isPresent ("jakarta.json.bind.Jsonb" , loader );
136+ kotlinSerializationCborPresent = ClassUtils .isPresent ("kotlinx.serialization.cbor.Cbor" , loader );
137+ kotlinSerializationJsonPresent = ClassUtils .isPresent ("kotlinx.serialization.json.Json" , loader );
138+ kotlinSerializationProtobufPresent = ClassUtils .isPresent ("kotlinx.serialization.protobuf.ProtoBuf" , loader );
118139 }
119140
120141 @ Nullable
@@ -428,6 +449,22 @@ private List<HttpMessageConverter<?>> initMessageConverters() {
428449 this .messageConverters .add (new ResourceHttpMessageConverter (false ));
429450 this .messageConverters .add (new AllEncompassingFormHttpMessageConverter ());
430451
452+ if (romePresent ) {
453+ this .messageConverters .add (new AtomFeedHttpMessageConverter ());
454+ this .messageConverters .add (new RssChannelHttpMessageConverter ());
455+ }
456+
457+ if (jackson2XmlPresent ) {
458+ this .messageConverters .add (new MappingJackson2XmlHttpMessageConverter ());
459+ }
460+ else if (jaxb2Present ) {
461+ this .messageConverters .add (new Jaxb2RootElementHttpMessageConverter ());
462+ }
463+
464+ if (kotlinSerializationProtobufPresent ) {
465+ this .messageConverters .add (new KotlinSerializationProtobufHttpMessageConverter ());
466+ }
467+
431468 if (kotlinSerializationJsonPresent ) {
432469 this .messageConverters .add (new KotlinSerializationJsonHttpMessageConverter ());
433470 }
@@ -446,9 +483,13 @@ else if (jsonbPresent) {
446483 if (jackson2CborPresent ) {
447484 this .messageConverters .add (new MappingJackson2CborHttpMessageConverter ());
448485 }
486+ else if (kotlinSerializationCborPresent ) {
487+ this .messageConverters .add (new KotlinSerializationCborHttpMessageConverter ());
488+ }
449489 if (jackson2YamlPresent ) {
450490 this .messageConverters .add (new MappingJackson2YamlHttpMessageConverter ());
451491 }
492+
452493 }
453494 return this .messageConverters ;
454495 }
0 commit comments