Skip to content

@JacksonXmlRootElement is ignored with Jackson 3 #757

@sdeleuze

Description

@sdeleuze

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions