com.squareup.retrofit2:converter-jaxb
3.0.0
#402 most downloaded on Maven Central
square/retrofit
What this package is like to depend on
Last release 1 years ago
15 May 2025
Ships unpredictably
gaps range from 1 weeks to 3.8 years
Nearly every release is documented
notes for 18 of 18 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
18 releases · first in 2019
0 releases in the last 12 months
see the full history below
Release timeline
18 releases · Jul 2019 to May 2025Releases
latest 18-
3.0.015 May 2025Release notes
Open source →Changed
-
Upgrade to OkHttp 4.12 (from 3.14).
This is the version of OkHttp that is written in Kotlin, and as a result Retrofit now has a transitive Kotlin dependency. However, this is also the supported version of OkHttp whereas the previous version was out of support for nearly 4 years.
Note: The 3.x versions of Retrofit maintain forward binary-compatibility with the 2.x versions.
This means libraries compiled against 2.x can still be used with the 3.x versions.Release notes
Open source →Changed
-
Upgrade to OkHttp 4.12 (from 3.14).
This is the version of OkHttp that is written in Kotlin, and as a result Retrofit now has a transitive Kotlin dependency. However, this is also the supported version of OkHttp whereas the previous version was out of support for nearly 4 years.
Note: The 3.x versions of Retrofit maintain forward binary-compatibility with the 2.x versions. This means libraries compiled against 2.x can still be used with the 3.x versions.
-
-
2.12.015 May 2025Release notes
Open source →New
-
First-party converters now support deferring serialization to happen when the request body is written (i.e., during HTTP execution) rather than when the HTTP request is created. In some cases this moves conversion from a calling thread to a background thread, such as in the case when using
Call.enqueuedirectly.The following converters support this feature through a new
withStreaming()factory method:- Gson
- Jackson
- Moshi
- Protobuf
- Wire
Fixed
- Primitive types used with
@Tagnow work by storing the value boxed with the boxed class as the key.
Release notes
Open source →New
-
First-party converters now support deferring serialization to happen when the request body is written (i.e., during HTTP execution) rather than when the HTTP request is created. In some cases this moves conversion from a calling thread to a background thread, such as in the case when using
Call.enqueuedirectly.The following converters support this feature through a new
withStreaming()factory method:- Gson
- Jackson
- Moshi
- Protobuf
- Wire
Fixed
- Primitive types used with
@Tagnow work by storing the value boxed with the boxed class as the key.
-
-
2.11.028 Mar 2024Release notes
Open source →New
- The built-in
OptionalConverterFactoryis now public to allow installing it before other converters which consume all types (e.g., Moshi, Gson, Jackson, etc.).
Fixed
- Ensure that exceptions thrown from failure to parse method annotations can be observed by multiple threads/callers. Previously only the first caller would see the actual parsing exception and other callers would get a cryptic
ClassCastException.
Release notes
Open source →New
- The built-in
OptionalConverterFactoryis now public to allow installing it before other converters which consume all types (e.g., Moshi, Gson, Jackson, etc.).
Fixed
- Ensure that exceptions thrown from failure to parse method annotations can be observed by multiple threads/callers. Previously only the first caller would see the actual parsing exception and other callers would get a cryptic
ClassCastException.
- The built-in
-
2.10.018 Mar 2024Release notes
Open source →New
-
Support using
Unitas a response type. This can be used for non-body HTTP methods likeHEADor body-containing HTTP methods likeGETwhere the body will be discarded without deserialization. -
kotlinx.serialization converter!
This was imported from github.com/JakeWharton/retrofit2-kotlinx-serialization-converter/ and remains unchanged from its 1.0.0 release.
The Maven coordinates are
com.squareup.retrofit2:converter-kotlinx-serialization. -
JAXB 3 converter!
The Maven coordinates are
com.squareup.retrofit2:converter-jaxb3. -
@Header,@Headers, and@HeaderMapcan now set non-ASCII values through theallowUnsafeNonAsciiValuesannotation property. These are not technically compliant with the HTTP specification, but are often supported or required by services. -
Publish a BOM of all modules. The Maven coordinates are
com.squareup.retrofit2:retrofit-bom. -
Invocationnow exposes the serviceClass<?>and the instance on which the method was invoked. This disambiguates the source when service inheritence is used. -
A response type keeper annotation processor is now available for generating shrinker rules for all referenced types in your service interface. In some cases, it's impossible for static shrinker rules to keep the entirety of what Retrofit needs at runtime. This annotation processor generates those additional rules. For more info see its README.
Changed
- Add shrinker rules to retain the generic signatures of built-in types (
Call,Response, etc.) which are used via reflection at runtime. - Remove backpressure support from RxJava 2 and 3 adapters. Since we only deliver a single value and the Reactive Streams specification states that callers must request a non-zero subscription value, we never need to honor backpressure.
- Kotlin
Retrofit.createfunction now has a non-null lower bound. Even if you specified a nullable type before this function would never return null. - Suspend functions now capture and defer all
Throwablesubtypes (not justExceptionsubtypes) to avoid Java'sUndeclaredThrowableExceptionwhen thrown synchronously. - Eagerly reject
suspend funfunctions that returnCall<Body>. These are never correct, and should declare a return type ofBodydirectly. - Support for Java 14-specific and Java 16-specific reflection needed to invoke default methods on interfaces have been moved to separate versions of a class through a multi-release jar. This should have no observable impact other than the jar now contains classes which target Java 14 and Java 16 bytecode that might trip up some static analysis tools which are not aware of multi-release jars.
- Parameter names are now displayed in exception messages when available in the underlying Java bytecode.
- Jackson converter now supports binary formats by using byte streams rather than character streams in its implementation. Use the
create(ObjectMapper, MediaType)overload to supply the value of theContent-Typeheader for your format.
Fixed
- Do not include synthetic methods when doing eager validation.
- Use per-method rather than per-class locking when parsing annotations. This eliminates contention when multiple calls are made in quick succession at the beginning of the process lifetime.
Release notes
Open source →New
-
Support using
Unitas a response type. This can be used for non-body HTTP methods likeHEADor body-containing HTTP methods likeGETwhere the body will be discarded without deserialization. -
kotlinx.serialization converter!
This was imported from github.com/JakeWharton/retrofit2-kotlinx-serialization-converter/ and remains unchanged from its 1.0.0 release.
The Maven coordinates are
com.squareup.retrofit2:converter-kotlinx-serialization. -
JAXB 3 converter!
The Maven coordinates are
com.squareup.retrofit2:converter-jaxb3. -
@Header,@Headers, and@HeaderMapcan now set non-ASCII values through theallowUnsafeNonAsciiValuesannotation property. These are not technically compliant with the HTTP specification, but are often supported or required by services. -
Publish a BOM of all modules. The Maven coordinates are
com.squareup.retrofit2:retrofit-bom. -
Invocationnow exposes the serviceClass<?>and the instance on which the method was invoked. This disambiguates the source when service inheritence is used. -
A response type keeper annotation processor is now available for generating shrinker rules for all referenced types in your service interface. In some cases, it's impossible for static shrinker rules to keep the entirety of what Retrofit needs at runtime. This annotation processor generates those additional rules. For more info see its README.
Changed
- Add shrinker rules to retain the generic signatures of built-in types (
Call,Response, etc.) which are used via reflection at runtime. - Remove backpressure support from RxJava 2 and 3 adapters. Since we only deliver a single value and the Reactive Streams specification states that callers must request a non-zero subscription value, we never need to honor backpressure.
- Kotlin
Retrofit.createfunction now has a non-null lower bound. Even if you specified a nullable type before this function would never return null. - Suspend functions now capture and defer all
Throwablesubtypes (not justExceptionsubtypes) to avoid Java'sUndeclaredThrowableExceptionwhen thrown synchronously. - Eagerly reject
suspend funfunctions that returnCall<Body>. These are never correct, and should declare a return type ofBodydirectly. - Support for Java 14-specific and Java 16-specific reflection needed to invoke default methods on interfaces have been moved to separate versions of a class through a multi-release jar. This should have no observable impact other than the jar now contains classes which target Java 14 and Java 16 bytecode that might trip up some static analysis tools which are not aware of multi-release jars.
- Parameter names are now displayed in exception messages when available in the underlying Java bytecode.
- Jackson converter now supports binary formats by using byte streams rather than character streams in its implementation. Use the
create(ObjectMapper, MediaType)overload to supply the value of theContent-Typeheader for your format.
Fixed
- Do not include synthetic methods when doing eager validation.
- Use per-method rather than per-class locking when parsing annotations. This eliminates contention when multiple calls are made in quick succession at the beginning of the process lifetime.
-
-
2.9.020 May 2020Release notes
Open source →-
New: RxJava 3 adapter!
The Maven coordinates are
com.squareup.retrofit2:adapter-rxjava3.Unlike the RxJava 1 and RxJava 2 adapters, the RxJava 3 adapter's
create()method will produce asynchronous HTTP requests by default. For synchronous requests usecreateSynchronous()and for synchronous on a scheduler usecreateWithScheduler(..).
-
-
2.8.218 May 2020Release notes
Open source →- Fix: Detect running on the Android platform by using system property rather than the presence of classes. This ensures that even when you're running on the JVM with Android classes present on the classpath you get JVM semantics.
- Fix: Update to OkHttp 3.14.9 which contains an associated Android platform detection fix.
-
2.8.126 Mar 2020Release notes
Open source →- Fix: Do not access
MethodHandles.Lookupon Android API 24 and 25. The class is only available on Android API 26 and higher.
- Fix: Do not access
-
2.8.024 Mar 2020Release notes
Open source →- New: Add
Call.timeout()which returns theokio.Timeoutof the full call. - Fix: Change
Call.awaitResponse()to accept a nullable response type. - Fix: Support default methods on Java 14+. We had been working around a bug in earlier versions of Java. That bug was fixed in Java 14, and the fix broke our workaround.
- New: Add
-
2.7.225 Feb 2020 -
2.7.103 Jan 2020Release notes
Open source →- Fix: Support 'suspend' functions in services interfaces when using 'retrofit-mock' artifact.
-
2.7.010 Dec 2019Release notes
Open source →This release changes the minimum requirements to Java 8+ or Android 5+. See this blog post for more information on the change.
- New: Upgrade to OkHttp 3.14.4. Please see its changelog for 3.x.
- Fix: Allow service interfaces to extend other interfaces.
- Fix: Ensure a non-null body is returned by
Response.error.
-
2.6.403 Jan 2020Release notes
Open source →- Fix: Support 'suspend' functions in services interfaces when using 'retrofit-mock' artifact.
-
2.6.310 Dec 2019Release notes
Open source →- Fix: Change mechanism for avoiding
UndeclaredThrowableExceptionin rare cases from usingyieldan explicit dispatch which ensures that it will work even on dispatchers which do not support yielding.
- Fix: Change mechanism for avoiding
-
2.6.207 Nov 2019Release notes
Open source →- Fix: Avoid
IOExceptions being wrapped inUndeclaredThrowableExceptionin rare cases when usingResponse<..>as a return type for Kotlin 'suspend' functions.
- Fix: Avoid
-
2.6.107 Nov 2019Release notes
Open source →- Fix: Avoid
IOExceptions being wrapped inUndeclaredThrowableExceptionin rare cases. - Fix: Include no-content
ResponseBodyfor responses created byResponse.error. - Fix: Update embedded R8/ProGuard rules to not warn about nested classes used for Kotlin extensions.
- Fix: Avoid
-
2.6.007 Nov 2019Release notes
Open source →-
New: Support
suspendmodifier on functions for Kotlin! This allows you to express the asynchrony of HTTP requests in an idiomatic fashion for the language.@GET("users/{id}") suspend fun user(@Path("id") id: Long): UserBehind the scenes this behaves as if defined as
fun user(...): Call<User>and then invoked withCall.enqueue. You can also returnResponse<User>for access to the response metadata.Currently this integration only supports non-null response body types. Follow issue 3075 for nullable type support.
-
New:
@Tagparameter annotation for setting tags on the underlying OkHttpRequestobject. These can be read inCallAdapters or OkHttpInterceptors for tracing, analytics, varying behavior, and more. -
New:
@SkipCallbackExecutormethod annotation will result in yourCallinvoking itsCallbackon the background thread on which the HTTP call was made. -
New: Support OkHttp's
Headerstype for@HeaderMapparameters. -
New: Add
Retrofit.Builder.baseUrl(URL)overload. -
Fix: Add embedded R8/ProGuard rule which retains Retrofit interfaces (while still allowing obfuscation). This is needed because R8 running in 'full mode' (i.e., not in ProGuard-compatibility mode) will see that there are no subtypes of these interfaces and rewrite any code which references instances to null.
-
Fix: Mark
HttpException.response()as@Nullableas serializing the exception does not retain this instance. -
Fix: Fatal errors (such as stack overflows, out of memory, etc.) now propagate to the OkHttp
Dispatcherthread on which they are running. -
Fix: Ensure JAX-B converter closes the response body when an exception is thrown during deserialization.
-
Fix: Ignore static methods when performing eager validation of interface methods.
-
Fix: Ensure that calling
source()twice on theResponseBodypassed to aConverteralways returns the same instance. Prior to the fix, intermediate buffering would cause response data to be lost.
-
-
2.5.029 Jul 2019Release notes
Open source →- New: Built-in support for Kotlin's
Unittype. This behaves the same as Java'sVoidwhere the body content is ignored and immediately discarded. - New: Built-in support for Java 8's
OptionalandCompletableFuturetypes. Previously the 'converter-java8' and 'adapter-java8' dependencies were needed and explicitly addingJava8OptionalConverterFactoryand/orJava8CallAdapterFactoryto yourRetrofit.Builderin order to use these types. Support is now built-in and those types and their artifacts are marked as deprecated. - New:
Invocationclass provides a reference to the invoked method and argument list as a tag on the underlying OkHttpCall. This can be accessed from an OkHttp interceptor for things like logging, analytics, or metrics aggregation. - New: Kotlin extension for
Retrofitwhich allows you callcreatepassing the interface type only as a generic parameter (e.g.,retrofit.create<MyService>()). - New: Added
Response.successoverload which allows specifying a custom 2xx status code. - New: Added
Calls.failureoverload which allows passing anyThrowablesubtype. - New: Minimal R8 rules now ship inside the jar requiring no client configuration in the common case.
- Fix: Do not propagate fatal errors to the callback. They are sent to the thread's uncaught exception handler.
- Fix: Do not enqueue/execute an otherwise useless call when the RxJava type is disposed by
onSubscribe. - Fix: Call
RxJavaPluginsassembly hook when creating an RxJava 2 type. - Fix: Ensure both the Guava and Java 8
Optionalconverters delegate properly. This ensures that converters registered prior to the optional converter can be used for deserializing the body type. - Fix: Prevent
@Pathvalues from participating in path-traversal. This ensures untrusted input passed as a path value cannot cause you to make a request to an un-intended relative URL. - Fix: Simple XML converter (which is deprecated) no longer wraps subtypes of
RuntimeExceptionorIOExceptionwhen it fails. - Fix: Prevent JAXB converter from loading remote entities and DTDs.
- Fix: Correctly detect default methods in interfaces on Android (API 24+). These still do not work, but now a correct exception will be thrown when detected.
- Fix: Report more accurate exceptions when a
@QueryNameor@QueryMapprecedes a@Urlparameter. - Update OkHttp dependency to 3.12.
- New: Built-in support for Kotlin's
-
2.4.029 Jul 2019Release notes
Open source →- New:
Retrofit.Builderexposes mutable lists of the added converter and call adapter factories. - New: Call adapter added for Scala's
Future. - New: Converter for JAXB replaces the now-deprecated converter for Simple XML Framework.
- New: Add Java 9 automatic module names for each artifact corresponding to their root package.
- Fix: Do not swallow
Errors from callbacks (usuallyOutOfMemoryError). - Fix: Moshi and Gson converters now assert that the full response was consumed. This prevents hiding bugs in faulty adapters which might not have consumed the full JSON input which would then cause failures on the next request over that connection.
- Fix: Do not conflate OkHttp
Callcancelation with RxJava unsubscription/disposal. Prior to this change, canceling of aCallwould prevent a cancelation exception from propagating down the Rx stream.
- New: