From 51767e21b4daaa00c3de678d4ba34d1776c1e799 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Olbi=C5=84ski?= Date: Mon, 22 Jul 2024 19:36:35 +0200 Subject: [PATCH] Bug fix: support JAXBElement in Jaxb2XmlEncoder --- .../http/codec/xml/Jaxb2XmlEncoder.java | 2 +- .../http/codec/xml/Jaxb2XmlEncoderTests.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java index cc15b8796390..b5a2b6d43043 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java @@ -93,7 +93,7 @@ public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType Class outputClass = elementType.toClass(); return (outputClass.isAnnotationPresent(XmlRootElement.class) || outputClass.isAnnotationPresent(XmlType.class) || - elementType.isAssignableFrom(JAXBElement.class)); + JAXBElement.class.isAssignableFrom(outputClass)); } else { return false; diff --git a/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java index f04b9aafb745..b04b0e359c33 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java @@ -16,6 +16,7 @@ package org.springframework.http.codec.xml; +import java.io.Serial; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; @@ -64,6 +65,7 @@ protected void canEncode() { assertThat(this.encoder.canEncode(forClass(getClass()), MediaType.APPLICATION_XML)).isFalse(); assertThat(this.encoder.canEncode(forClass(JAXBElement.class), MediaType.APPLICATION_XML)).isTrue(); + assertThat(this.encoder.canEncode(forClass(JAXBElementSubclass.class), MediaType.APPLICATION_XML)).isTrue(); // SPR-15464 assertThat(this.encoder.canEncode(ResolvableType.NONE, null)).isFalse(); @@ -122,6 +124,16 @@ protected Consumer expectXml(String expected) { }; } + public static class JAXBElementSubclass extends JAXBElement{ + @Serial + private static final long serialVersionUID = 1L; + + protected final static QName NAME = new QName("http://foo/schema/common/1.0", "Pojo"); + public JAXBElementSubclass() { + super(NAME, Pojo.class, null, null); + } + } + public static class Model {} public static class Foo extends Model {