Support JAXBElement subtypes in Jaxb2XmlEncoder
Closes gh-33258
This commit is contained in:
parent
cbdaafd409
commit
83ff8e4e98
|
|
@ -93,7 +93,7 @@ public class Jaxb2XmlEncoder extends AbstractSingleValueEncoder<Object> {
|
||||||
Class<?> outputClass = elementType.toClass();
|
Class<?> outputClass = elementType.toClass();
|
||||||
return (outputClass.isAnnotationPresent(XmlRootElement.class) ||
|
return (outputClass.isAnnotationPresent(XmlRootElement.class) ||
|
||||||
outputClass.isAnnotationPresent(XmlType.class) ||
|
outputClass.isAnnotationPresent(XmlType.class) ||
|
||||||
elementType.isAssignableFrom(JAXBElement.class));
|
JAXBElement.class.isAssignableFrom(outputClass));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package org.springframework.http.codec.xml;
|
package org.springframework.http.codec.xml;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
@ -43,6 +44,7 @@ import static org.springframework.core.ResolvableType.forClass;
|
||||||
import static org.springframework.core.io.buffer.DataBufferUtils.release;
|
import static org.springframework.core.io.buffer.DataBufferUtils.release;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Tests for {@link Jaxb2XmlEncoder}.
|
||||||
* @author Sebastien Deleuze
|
* @author Sebastien Deleuze
|
||||||
* @author Arjen Poutsma
|
* @author Arjen Poutsma
|
||||||
*/
|
*/
|
||||||
|
|
@ -64,6 +66,7 @@ class Jaxb2XmlEncoderTests extends AbstractEncoderTests<Jaxb2XmlEncoder> {
|
||||||
assertThat(this.encoder.canEncode(forClass(getClass()), MediaType.APPLICATION_XML)).isFalse();
|
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(JAXBElement.class), MediaType.APPLICATION_XML)).isTrue();
|
||||||
|
assertThat(this.encoder.canEncode(forClass(JAXBElementSubclass.class), MediaType.APPLICATION_XML)).isTrue();
|
||||||
|
|
||||||
// SPR-15464
|
// SPR-15464
|
||||||
assertThat(this.encoder.canEncode(ResolvableType.NONE, null)).isFalse();
|
assertThat(this.encoder.canEncode(ResolvableType.NONE, null)).isFalse();
|
||||||
|
|
@ -122,6 +125,17 @@ class Jaxb2XmlEncoderTests extends AbstractEncoderTests<Jaxb2XmlEncoder> {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class JAXBElementSubclass extends JAXBElement<Pojo> {
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
protected static final 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 Model {}
|
||||||
|
|
||||||
public static class Foo extends Model {
|
public static class Foo extends Model {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue