Skip to content

Commit 83ff8e4

Browse files
Dawid Olbińskibclozel
Dawid Olbiński
authored andcommitted
Support JAXBElement subtypes in Jaxb2XmlEncoder
Closes gh-33258
1 parent cbdaafd commit 83ff8e4

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType
9393
Class<?> outputClass = elementType.toClass();
9494
return (outputClass.isAnnotationPresent(XmlRootElement.class) ||
9595
outputClass.isAnnotationPresent(XmlType.class) ||
96-
elementType.isAssignableFrom(JAXBElement.class));
96+
JAXBElement.class.isAssignableFrom(outputClass));
9797
}
9898
else {
9999
return false;

spring-web/src/test/java/org/springframework/http/codec/xml/Jaxb2XmlEncoderTests.java

+14
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.http.codec.xml;
1818

19+
import java.io.Serial;
1920
import java.util.Arrays;
2021
import java.util.List;
2122
import java.util.function.Consumer;
@@ -43,6 +44,7 @@
4344
import static org.springframework.core.io.buffer.DataBufferUtils.release;
4445

4546
/**
47+
* Tests for {@link Jaxb2XmlEncoder}.
4648
* @author Sebastien Deleuze
4749
* @author Arjen Poutsma
4850
*/
@@ -64,6 +66,7 @@ protected void canEncode() {
6466
assertThat(this.encoder.canEncode(forClass(getClass()), MediaType.APPLICATION_XML)).isFalse();
6567

6668
assertThat(this.encoder.canEncode(forClass(JAXBElement.class), MediaType.APPLICATION_XML)).isTrue();
69+
assertThat(this.encoder.canEncode(forClass(JAXBElementSubclass.class), MediaType.APPLICATION_XML)).isTrue();
6770

6871
// SPR-15464
6972
assertThat(this.encoder.canEncode(ResolvableType.NONE, null)).isFalse();
@@ -122,6 +125,17 @@ protected Consumer<DataBuffer> expectXml(String expected) {
122125
};
123126
}
124127

128+
public static class JAXBElementSubclass extends JAXBElement<Pojo> {
129+
@Serial
130+
private static final long serialVersionUID = 1L;
131+
132+
protected static final QName NAME = new QName("http://foo/schema/common/1.0", "Pojo");
133+
134+
public JAXBElementSubclass() {
135+
super(NAME, Pojo.class, null, null);
136+
}
137+
}
138+
125139
public static class Model {}
126140

127141
public static class Foo extends Model {

0 commit comments

Comments
 (0)