-
-
Notifications
You must be signed in to change notification settings - Fork 230
Closed as not planned
Description
With Jackson 3.0.0-rc4
:
@JsonInclude(NON_EMPTY)
@JacksonXmlRootElement(localName = "problem", namespace = ProblemDetailJacksonXmlMixin.NAMESPACE)
public interface ProblemDetailJacksonXmlMixin {
/** RFC 7807 (obsoleted by RFC 9457) namespace. */
String NAMESPACE = "urn:ietf:rfc:7807";
@JacksonXmlProperty(namespace = NAMESPACE)
URI getType();
@JacksonXmlProperty(namespace = NAMESPACE)
String getTitle();
@JacksonXmlProperty(namespace = NAMESPACE)
int getStatus();
@JacksonXmlProperty(namespace = NAMESPACE)
String getDetail();
@JacksonXmlProperty(namespace = NAMESPACE)
URI getInstance();
@JsonAnySetter
void setProperty(String name, @Nullable Object value);
@JsonAnyGetter
@JacksonXmlProperty(namespace = NAMESPACE)
Map<String, Object> getProperties();
}
@SuppressWarnings("serial")
private static class MyProblemDetail extends ProblemDetail {
private static final long serialVersionUID = 848059476504348430L;
public MyProblemDetail(HttpStatus status) {
super(status.value());
}
}
@Test
void test() {
XmlMapper mapper = XmlMapper.builder()
.addMixIn(ProblemDetail.class, ProblemDetailJacksonXmlMixin.class)
.build();
MyProblemDetail problemDetail = new MyProblemDetail(HttpStatus.BAD_REQUEST);
System.out.println(mapper.writerFor(MyProblemDetail.class).writeValueAsString(problemDetail));
}
Jackson 2.x prints as expected:
<problem xmlns="urn:ietf:rfc:7807"><type>about:blank</type><title>Bad Request</title><status>400</status></problem>
Jackson 3.x ignores the @JacksonXmlRootElement
annotation and prints:
<MyProblemDetail><status>400</status><title>Bad Request</title><type>about:blank</type></MyProblemDetail>
This is breaking Spring support for RFC 9457.
Metadata
Metadata
Assignees
Labels
No labels