Skip to content

Commit 332532a

Browse files
committed
Add a unit test for #822, not yet failing.
1 parent 707db7a commit 332532a

3 files changed

Lines changed: 62 additions & 22 deletions

File tree

src/main/java/com/fasterxml/jackson/databind/AnnotationIntrospector.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -817,7 +817,6 @@ public boolean hasAsValueAnnotation(AnnotatedMethod am) {
817817
* @return Serialized enum value.
818818
*/
819819
public String findEnumValue(Enum<?> value) {
820-
// as per [JACKSON-875], should use default here
821820
return value.name();
822821
}
823822

src/main/java/com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.java

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ public boolean hasSingleElement(String[] value) {
147147

148148
@Override
149149
public final void serialize(String[] value, JsonGenerator jgen, SerializerProvider provider)
150-
throws IOException, JsonGenerationException
150+
throws IOException
151151
{
152-
final int len = value.length;
152+
final int len = value.length;
153153
if ((len == 1) && provider.isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED)) {
154154
serializeContents(value, jgen, provider);
155155
return;
@@ -160,45 +160,36 @@ public final void serialize(String[] value, JsonGenerator jgen, SerializerProvid
160160
}
161161

162162
@Override
163-
public void serializeContents(String[] value, JsonGenerator jgen, SerializerProvider provider)
164-
throws IOException, JsonGenerationException
163+
public void serializeContents(String[] value, JsonGenerator gen, SerializerProvider provider)
164+
throws IOException
165165
{
166166
final int len = value.length;
167167
if (len == 0) {
168168
return;
169169
}
170170
if (_elementSerializer != null) {
171-
serializeContentsSlow(value, jgen, provider, _elementSerializer);
171+
serializeContentsSlow(value, gen, provider, _elementSerializer);
172172
return;
173173
}
174-
/* 08-Dec-2008, tatus: If we want this to be fully overridable
175-
* (for example, to support String cleanup during writing
176-
* or something), we should find serializer by provider.
177-
* But for now, that seems like an overkill: and caller can
178-
* add custom serializer if that is needed as well.
179-
* (ditto for null values)
180-
*/
181-
//JsonSerializer<String> ser = (JsonSerializer<String>)provider.findValueSerializer(String.class);
182174
for (int i = 0; i < len; ++i) {
183175
String str = value[i];
184176
if (str == null) {
185-
jgen.writeNull();
177+
gen.writeNull();
186178
} else {
187-
//ser.serialize(value[i], jgen, provider);
188-
jgen.writeString(value[i]);
179+
gen.writeString(value[i]);
189180
}
190181
}
191182
}
192183

193-
private void serializeContentsSlow(String[] value, JsonGenerator jgen, SerializerProvider provider, JsonSerializer<Object> ser)
194-
throws IOException, JsonGenerationException
184+
private void serializeContentsSlow(String[] value, JsonGenerator gen, SerializerProvider provider, JsonSerializer<Object> ser)
185+
throws IOException
195186
{
196187
for (int i = 0, len = value.length; i < len; ++i) {
197188
String str = value[i];
198189
if (str == null) {
199-
provider.defaultSerializeNull(jgen);
190+
provider.defaultSerializeNull(gen);
200191
} else {
201-
ser.serialize(value[i], jgen, provider);
192+
ser.serialize(value[i], gen, provider);
202193
}
203194
}
204195
}

src/test/java/com/fasterxml/jackson/databind/creators/TestBuilderSimple.java renamed to src/test/java/com/fasterxml/jackson/databind/creators/BuilderSimpleTest.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.fasterxml.jackson.databind.creators;
22

3+
import java.util.*;
4+
5+
import com.fasterxml.jackson.annotation.JsonAnySetter;
36
import com.fasterxml.jackson.annotation.JsonCreator;
47
import com.fasterxml.jackson.annotation.JsonProperty;
58
import com.fasterxml.jackson.annotation.JsonSetter;
@@ -8,7 +11,7 @@
811
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
912
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
1013

11-
public class TestBuilderSimple extends BaseMapTest
14+
public class BuilderSimpleTest extends BaseMapTest
1215
{
1316
// // Simple 2-property value class, builder with standard naming
1417

@@ -246,6 +249,39 @@ public ValueClassXY build() {
246249
return null;
247250
}
248251
}
252+
253+
// [databind#822]
254+
@JsonPOJOBuilder(buildMethodName = "build", withPrefix = "with")
255+
static class ValueBuilder822
256+
{
257+
public int x;
258+
private Map<String,Object> stuff = new HashMap<String,Object>();
259+
260+
public ValueBuilder822 withX(int x0) {
261+
this.x = x0;
262+
return this;
263+
}
264+
265+
@JsonAnySetter
266+
public void addStuff(String key, Object value) {
267+
stuff.put(key, value);
268+
}
269+
270+
public ValueClass822 build() {
271+
return new ValueClass822(x, stuff);
272+
}
273+
}
274+
275+
@JsonDeserialize(builder = ValueBuilder822.class)
276+
static class ValueClass822 {
277+
public int x;
278+
public Map<String,Object> stuff;
279+
280+
public ValueClass822(int x, Map<String,Object> stuff) {
281+
this.x = x;
282+
this.stuff = stuff;
283+
}
284+
}
249285

250286
/*
251287
/**********************************************************
@@ -333,4 +369,18 @@ public void testBuilderMethodReturnInvalidType() throws Exception
333369
}
334370
}
335371

372+
public void testWithAnySetter822() throws Exception
373+
{
374+
final String json = "{\"extra\":3,\"foobar\":[ ],\"x\":1,\"name\":\"bob\"}";
375+
ValueClass822 value = mapper.readValue(json, ValueClass822.class);
376+
assertEquals(1, value.x);
377+
assertNotNull(value.stuff);
378+
assertEquals(3, value.stuff.size());
379+
assertEquals(Integer.valueOf(3), value.stuff.get("extra"));
380+
assertEquals("bob", value.stuff.get("name"));
381+
Object ob = value.stuff.get("foobar");
382+
assertNotNull(ob);
383+
assertTrue(ob instanceof List);
384+
assertTrue(((List<?>) ob).isEmpty());
385+
}
336386
}

0 commit comments

Comments
 (0)