Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.fasterxml.jackson.dataformat.xml.records.failing;

import java.util.List;

import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

import org.junit.Test;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be imported after java.util.List as per coding style.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done thank you!


// [databind#517] XML wrapper doesn't work with java records
// Equivalent to on in jdk17/.../deser/XmlWrapperRecord517Test.java
public class XmlWrapperRecord517Test
extends XmlTestBase
{

public record Request(
@JacksonXmlElementWrapper(localName = "messages")
@JacksonXmlProperty(localName = "message")
List<Message> messages
) {
public Request {}

private Request() {this(null);}
}

public record Message(String text) {
public Message {
}

private Message() {
this(null);
}
}

private final String expectedXML =
"<Request>" +
"<messages>" +
"<message>" +
"<text>Hello, World!</text>" +
"</message>" +
"</messages>" +
"</Request>";

@Test
public void testWrapper() throws Exception {
XmlWrapperRecord517Test.Request request = new Request(List.of(new Message("Hello, World!")));

// test serialization
String xml = newMapper().writeValueAsString(request);
assertEquals(expectedXML, xml);

// test deserialization
Request result = newMapper().readValue(xml, Request.class);

assertEquals(request.messages().size(), result.messages().size());
assertEquals(request.messages().get(0).text(), result.messages().get(0).text());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package com.fasterxml.jackson.dataformat.xml.deser;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

import org.junit.Test;

// [databind#517] XML wrapper doesn't work with java records
// Equivalent to on in jdk17/.../records/XmlWrapperRecord517Test.java
public class XmlWrapperClass517Test
extends XmlTestBase
{
public static final class Request {
@JacksonXmlElementWrapper(localName = "messages")
@JacksonXmlProperty(localName = "message")
private final List<Message> messages;

private Request() { this.messages = null; }
public Request(List<Message> messages) { this.messages = messages; }

public List<Message> getMessages() { return messages; }

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Request)) return false;
return Objects.equals(messages, ((Request)o).messages);
}

@Override
public int hashCode() { return Objects.hash(messages); }

@Override
public String toString() { return "Request{messages=" + messages + '}'; }
}

public static final class Message {

private final String text;

private Message() { this.text = null; }
public Message(String text) { this.text = text; }

public String getText() { return text; }

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Message)) return false;
Message message = (Message) o;
return Objects.equals(text, message.text);
}

@Override
public int hashCode() { return Objects.hash(text); }

@Override
public String toString() { return "Message{text='" + text + "\'}"; }
}

private final ObjectMapper mapper = newMapper();

private final String expectedXML =
"<Request>" +
"<messages>" +
"<message>" +
"<text>given text</text>" +
"</message>" +
"</messages>" +
"</Request>";

@Test
public void testShouldSerialize() throws Exception {
Request givenRequest = _createRequest("given text");

String actualXml = mapper.writeValueAsString(givenRequest);

assertEquals(expectedXML, actualXml);
}

@Test
public void testShouldDeserialize() throws Exception {
Request expected = _createRequest("given text");

Request actualRequest = mapper.readValue(expectedXML, Request.class);

assertEquals(expected, actualRequest);
}

private Request _createRequest(String givenText) {
List<Message> messages = new ArrayList<>();
messages.add(new Message(givenText));
return new Request(messages);
}

}