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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions