QNameAsObjectReadWrite4771Test.java
package com.fasterxml.jackson.databind.ext;
import java.util.stream.Stream;
import javax.xml.namespace.QName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
import static org.junit.jupiter.api.Assertions.assertEquals;
class QNameAsObjectReadWrite4771Test extends DatabindTestUtil
{
private final ObjectMapper MAPPER = newJsonMapper();
static class BeanWithQName {
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public QName qname;
BeanWithQName() { }
public BeanWithQName(QName qName) {
this.qname = qName;
}
}
@ParameterizedTest
@MethodSource("provideAllPerumtationsOfQNameConstructor")
void testQNameWithObjectSerialization(QName originalQName) throws JsonProcessingException
{
BeanWithQName bean = new BeanWithQName(originalQName);
String json = MAPPER.writeValueAsString(bean);
QName deserializedQName = MAPPER.readValue(json, BeanWithQName.class).qname;
assertEquals(originalQName.getLocalPart(), deserializedQName.getLocalPart());
assertEquals(originalQName.getNamespaceURI(), deserializedQName.getNamespaceURI());
assertEquals(originalQName.getPrefix(), deserializedQName.getPrefix());
}
static Stream<Arguments> provideAllPerumtationsOfQNameConstructor()
{
return Stream.of(
Arguments.of(new QName("test-local-part")),
Arguments.of(new QName("test-namespace-uri", "test-local-part")),
Arguments.of(new QName("test-namespace-uri", "test-local-part", "test-prefix"))
);
}
}