Skip to content
This repository was archived by the owner on Jun 21, 2022. It is now read-only.

Commit 41d2d3f

Browse files
committed
1 parent 496e591 commit 41d2d3f

File tree

2 files changed

+69
-12
lines changed

2 files changed

+69
-12
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializer.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,32 @@
11
package com.fasterxml.jackson.databind.deser;
22

3-
import java.io.IOException;
4-
import java.util.*;
5-
6-
import com.fasterxml.jackson.core.*;
3+
import com.fasterxml.jackson.core.JsonParser;
4+
import com.fasterxml.jackson.core.JsonToken;
5+
import com.fasterxml.jackson.core.JsonTokenId;
76
import com.fasterxml.jackson.core.sym.FieldNameMatcher;
8-
import com.fasterxml.jackson.databind.*;
9-
import com.fasterxml.jackson.databind.deser.impl.*;
7+
import com.fasterxml.jackson.databind.BeanDescription;
8+
import com.fasterxml.jackson.databind.DeserializationContext;
9+
import com.fasterxml.jackson.databind.JavaType;
10+
import com.fasterxml.jackson.databind.JsonDeserializer;
11+
import com.fasterxml.jackson.databind.JsonMappingException;
12+
import com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer;
13+
import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap;
14+
import com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler;
15+
import com.fasterxml.jackson.databind.deser.impl.ObjectIdReader;
16+
import com.fasterxml.jackson.databind.deser.impl.PropertyBasedCreator;
17+
import com.fasterxml.jackson.databind.deser.impl.PropertyValueBuffer;
1018
import com.fasterxml.jackson.databind.deser.impl.ReadableObjectId.Referring;
19+
import com.fasterxml.jackson.databind.deser.impl.UnwrappedPropertyHandler;
1120
import com.fasterxml.jackson.databind.util.NameTransformer;
1221
import com.fasterxml.jackson.databind.util.TokenBuffer;
1322

23+
import java.io.IOException;
24+
import java.util.ArrayList;
25+
import java.util.HashSet;
26+
import java.util.List;
27+
import java.util.Map;
28+
import java.util.Set;
29+
1430
/**
1531
* Deserializer class that can deserialize instances of
1632
* arbitrary bean objects, usually from JSON Object structs,
@@ -947,7 +963,6 @@ protected Object deserializeUsingPropertyBasedWithUnwrapped(JsonParser p, Deseri
947963
p.setCurrentValue(bean);
948964
// if so, need to copy all remaining tokens into buffer
949965
while (t == JsonToken.FIELD_NAME) {
950-
p.nextToken(); // to skip name
951966
tokens.copyCurrentStructure(p);
952967
t = p.nextToken();
953968
}

src/test/java/com/fasterxml/jackson/databind/deser/TestBasicAnnotations.java

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package com.fasterxml.jackson.databind.deser;
22

3-
import java.io.*;
4-
5-
import com.fasterxml.jackson.annotation.*;
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
64
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
7-
import com.fasterxml.jackson.core.*;
8-
import com.fasterxml.jackson.databind.*;
5+
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.fasterxml.jackson.annotation.JsonUnwrapped;
7+
import com.fasterxml.jackson.core.JsonParser;
8+
import com.fasterxml.jackson.core.JsonProcessingException;
9+
import com.fasterxml.jackson.databind.BaseMapTest;
10+
import com.fasterxml.jackson.databind.DeserializationContext;
11+
import com.fasterxml.jackson.databind.MapperFeature;
12+
import com.fasterxml.jackson.databind.ObjectMapper;
913
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1014
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
1115

16+
import java.io.IOException;
17+
1218
/**
1319
* This unit test suite tests use of basic Annotations for
1420
* bean deserialization; ones that indicate (non-constructor)
@@ -61,6 +67,32 @@ final static class SizeClassSetter3
6167
@JsonDeserialize public void x(int value) { _x = value; }
6268
}
6369

70+
static class Issue2088Bean {
71+
int x;
72+
int y;
73+
74+
@JsonUnwrapped
75+
Issue2088UnwrappedBean w;
76+
77+
public Issue2088Bean(@JsonProperty("x") int x, @JsonProperty("y") int y) {
78+
this.x = x;
79+
this.y = y;
80+
}
81+
82+
public void setW(Issue2088UnwrappedBean w) {
83+
this.w = w;
84+
}
85+
}
86+
87+
static class Issue2088UnwrappedBean {
88+
int a;
89+
int b;
90+
91+
public Issue2088UnwrappedBean(@JsonProperty("a") int a, @JsonProperty("b") int b) {
92+
this.a = a;
93+
this.b = b;
94+
}
95+
}
6496

6597
/// Classes for testing Setter discovery with inheritance
6698
static class BaseBean
@@ -181,6 +213,16 @@ public void testIssue442PrivateUnwrapped() throws Exception
181213
assertEquals(5, bean.w.i);
182214
}
183215

216+
// [databind#2088]
217+
public void testIssue2088UnwrappedFieldsAfterLastCreatorProp() throws Exception
218+
{
219+
Issue2088Bean bean = MAPPER.readValue("{\"x\":1,\"a\":2,\"y\":3,\"b\":4}", Issue2088Bean.class);
220+
assertEquals(1, bean.x);
221+
assertEquals(2, bean.w.a);
222+
assertEquals(3, bean.y);
223+
assertEquals(4, bean.w.b);
224+
}
225+
184226
/*
185227
/**********************************************************
186228
/* Test methods, annotations disabled

0 commit comments

Comments
 (0)