Skip to content

Commit

Permalink
Added failing test and fix or issue #646
Browse files Browse the repository at this point in the history
  • Loading branch information
bpasson committed Mar 25, 2024
1 parent ae1bc1a commit f96d7c2
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class TypeUtil
public static boolean isIndexedType(JavaType type)
{
Class<?> cls = type.getRawClass();
if (type.isContainerType() || type.isIterationType()) {
if (type.isContainerType() || type.isIterationType() || cls == Iterable.class) {
// One special case; byte[] will be serialized as base64-encoded String, not real array, so:
// (actually, ditto for char[]; thought to be a String)
if (cls == byte[].class || cls == char[].class) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.fasterxml.jackson.dataformat.xml.failing;

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

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

public class IterableCollectionBuilder646Test extends XmlTestBase {

@JsonDeserialize(builder = Parent.Builder.class)
@JacksonXmlRootElement(localName = "parent")
static class Parent {
private final List<Child> children;

private Parent(List<Child> children) {
this.children = children;
}

@JsonProperty("child")
@JacksonXmlElementWrapper(useWrapping = false)
public List<Child> getChildren() {
return children;
}

static class Builder {
private final List<Child> children = new ArrayList<>();

@JsonProperty("child")
@JacksonXmlElementWrapper(useWrapping = false)
public Builder children(Iterable<Child> children) {
for (Child c : children) {
this.children.add(c);
}
return this;
}

public Parent build() {
return new Parent(children);
}
}
}

@JsonDeserialize(builder = Child.Builder.class)
@JacksonXmlRootElement(localName = "child")
static class Child {
private final String id;

public Child(String id) {
this.id = id;
}

@JsonProperty("id")
public String getId() {
return id;
}

static class Builder {
private String id;

@JsonProperty("id")
public Builder id(String id) {
this.id = id;
return this;
}

public Child build() {
return new Child(id);
}
}
}

// -- Test Methods --//
private final XmlMapper MAPPER = newMapper();

public void testIssue646() throws Exception {
final String XML = "<parent><child><id>1</id></child></parent>";
Parent parent = MAPPER.readValue(XML, Parent.class);
assertNotNull(parent);
assertNotNull(parent.getChildren());
assertEquals(1, parent.getChildren().size());

}
}

0 comments on commit f96d7c2

Please sign in to comment.