Skip to content

Commit bde69c6

Browse files
committed
First part of #2647, add createGenerator() methods
1 parent 18e2454 commit bde69c6

File tree

10 files changed

+186
-60
lines changed

10 files changed

+186
-60
lines changed

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

+85-10
Original file line numberDiff line numberDiff line change
@@ -1098,6 +1098,85 @@ public ObjectMapper findAndRegisterModules() {
10981098
return registerModules(findModules());
10991099
}
11001100

1101+
/*
1102+
/**********************************************************
1103+
/* Factory methods for creating JsonGenerators (added in 2.11)
1104+
/**********************************************************
1105+
*/
1106+
1107+
/**
1108+
* Factory method for constructing properly initialized {@link JsonGenerator}
1109+
* to write content using specified {@link OutputStream}.
1110+
* Generator is not managed (or "owned") by mapper: caller is responsible
1111+
* for properly closing it once content generation is complete.
1112+
*
1113+
* @since 2.11
1114+
*/
1115+
public JsonGenerator createGenerator(OutputStream out) throws IOException {
1116+
_assertNotNull("out", out);
1117+
return _jsonFactory.createGenerator(out, JsonEncoding.UTF8);
1118+
}
1119+
1120+
/**
1121+
* Factory method for constructing properly initialized {@link JsonGenerator}
1122+
* to write content using specified {@link OutputStream} and encoding.
1123+
* Generator is not managed (or "owned") by mapper: caller is responsible
1124+
* for properly closing it once content generation is complete.
1125+
*
1126+
* @since 2.11
1127+
*/
1128+
public JsonGenerator createGenerator(OutputStream out, JsonEncoding enc) throws IOException {
1129+
_assertNotNull("out", out);
1130+
return _jsonFactory.createGenerator(out, enc);
1131+
}
1132+
1133+
/**
1134+
* Factory method for constructing properly initialized {@link JsonGenerator}
1135+
* to write content using specified {@link Writer}.
1136+
* Generator is not managed (or "owned") by mapper: caller is responsible
1137+
* for properly closing it once content generation is complete.
1138+
*
1139+
* @since 2.11
1140+
*/
1141+
public JsonGenerator createGenerator(Writer w) throws IOException {
1142+
_assertNotNull("w", w);
1143+
return _jsonFactory.createGenerator(w);
1144+
}
1145+
1146+
/**
1147+
* Factory method for constructing properly initialized {@link JsonGenerator}
1148+
* to write content to specified {@link File}, using specified encoding.
1149+
* Generator is not managed (or "owned") by mapper: caller is responsible
1150+
* for properly closing it once content generation is complete.
1151+
*
1152+
* @since 2.11
1153+
*/
1154+
public JsonGenerator createGenerator(File outputFile, JsonEncoding enc) throws IOException {
1155+
_assertNotNull("outputFile", outputFile);
1156+
return _jsonFactory.createGenerator(outputFile, enc);
1157+
}
1158+
1159+
/**
1160+
* Factory method for constructing properly initialized {@link JsonGenerator}
1161+
* to write content using specified {@link DataOutput}.
1162+
* Generator is not managed (or "owned") by mapper: caller is responsible
1163+
* for properly closing it once content generation is complete.
1164+
*
1165+
* @since 2.11
1166+
*/
1167+
public JsonGenerator createGenerator(DataOutput out) throws IOException {
1168+
_assertNotNull("out", out);
1169+
return _jsonFactory.createGenerator(out);
1170+
}
1171+
1172+
/*
1173+
/**********************************************************
1174+
/* Factory methods for creating JsonParsers (added in 2.11)
1175+
/**********************************************************
1176+
*/
1177+
1178+
// TODO
1179+
11011180
/*
11021181
/**********************************************************
11031182
/* Configuration: main config object access
@@ -3348,8 +3427,7 @@ public <T> T readValue(DataInput src, JavaType valueType) throws IOException
33483427
public void writeValue(File resultFile, Object value)
33493428
throws IOException, JsonGenerationException, JsonMappingException
33503429
{
3351-
_assertNotNull("resultFile", resultFile);
3352-
_configAndWriteValue(_jsonFactory.createGenerator(resultFile, JsonEncoding.UTF8), value);
3430+
_configAndWriteValue(createGenerator(resultFile, JsonEncoding.UTF8), value);
33533431
}
33543432

33553433
/**
@@ -3366,17 +3444,15 @@ public void writeValue(File resultFile, Object value)
33663444
public void writeValue(OutputStream out, Object value)
33673445
throws IOException, JsonGenerationException, JsonMappingException
33683446
{
3369-
_assertNotNull("out", out);
3370-
_configAndWriteValue(_jsonFactory.createGenerator(out, JsonEncoding.UTF8), value);
3447+
_configAndWriteValue(createGenerator(out, JsonEncoding.UTF8), value);
33713448
}
33723449

33733450
/**
33743451
* @since 2.8
33753452
*/
33763453
public void writeValue(DataOutput out, Object value) throws IOException
33773454
{
3378-
_assertNotNull("out", out);
3379-
_configAndWriteValue(_jsonFactory.createGenerator(out, JsonEncoding.UTF8), value);
3455+
_configAndWriteValue(createGenerator(out), value);
33803456
}
33813457

33823458
/**
@@ -3392,8 +3468,7 @@ public void writeValue(DataOutput out, Object value) throws IOException
33923468
public void writeValue(Writer w, Object value)
33933469
throws IOException, JsonGenerationException, JsonMappingException
33943470
{
3395-
_assertNotNull("w", w);
3396-
_configAndWriteValue(_jsonFactory.createGenerator(w), value);
3471+
_configAndWriteValue(createGenerator(w), value);
33973472
}
33983473

33993474
/**
@@ -3411,7 +3486,7 @@ public String writeValueAsString(Object value)
34113486
// alas, we have to pull the recycler directly here...
34123487
SegmentedStringWriter sw = new SegmentedStringWriter(_jsonFactory._getBufferRecycler());
34133488
try {
3414-
_configAndWriteValue(_jsonFactory.createGenerator(sw), value);
3489+
_configAndWriteValue(createGenerator(sw), value);
34153490
} catch (JsonProcessingException e) {
34163491
throw e;
34173492
} catch (IOException e) { // shouldn't really happen, but is declared as possibility so:
@@ -3435,7 +3510,7 @@ public byte[] writeValueAsBytes(Object value)
34353510
{
34363511
ByteArrayBuilder bb = new ByteArrayBuilder(_jsonFactory._getBufferRecycler());
34373512
try {
3438-
_configAndWriteValue(_jsonFactory.createGenerator(bb, JsonEncoding.UTF8), value);
3513+
_configAndWriteValue(createGenerator(bb, JsonEncoding.UTF8), value);
34393514
} catch (JsonProcessingException e) { // to support [JACKSON-758]
34403515
throw e;
34413516
} catch (IOException e) { // shouldn't really happen, but is declared as possibility so:

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

+85-32
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,77 @@ public ObjectWriter withRootValueSeparator(SerializableString sep) {
639639
return _new(_generatorSettings.withRootValueSeparator(sep), _prefetch);
640640
}
641641

642+
/*
643+
/**********************************************************
644+
/* Factory methods for creating JsonGenerators (added in 2.11)
645+
/**********************************************************
646+
*/
647+
648+
/**
649+
* Factory method for constructing properly initialized {@link JsonGenerator}
650+
* to write content using specified {@link OutputStream}.
651+
* Generator is not managed (or "owned") by mapper: caller is responsible
652+
* for properly closing it once content generation is complete.
653+
*
654+
* @since 2.11
655+
*/
656+
public JsonGenerator createGenerator(OutputStream out) throws IOException {
657+
_assertNotNull("out", out);
658+
return _generatorFactory.createGenerator(out, JsonEncoding.UTF8);
659+
}
660+
661+
/**
662+
* Factory method for constructing properly initialized {@link JsonGenerator}
663+
* to write content using specified {@link OutputStream} and encoding.
664+
* Generator is not managed (or "owned") by mapper: caller is responsible
665+
* for properly closing it once content generation is complete.
666+
*
667+
* @since 2.11
668+
*/
669+
public JsonGenerator createGenerator(OutputStream out, JsonEncoding enc) throws IOException {
670+
_assertNotNull("out", out);
671+
return _generatorFactory.createGenerator(out, enc);
672+
}
673+
674+
/**
675+
* Factory method for constructing properly initialized {@link JsonGenerator}
676+
* to write content using specified {@link Writer}.
677+
* Generator is not managed (or "owned") by mapper: caller is responsible
678+
* for properly closing it once content generation is complete.
679+
*
680+
* @since 2.11
681+
*/
682+
public JsonGenerator createGenerator(Writer w) throws IOException {
683+
_assertNotNull("w", w);
684+
return _generatorFactory.createGenerator(w);
685+
}
686+
687+
/**
688+
* Factory method for constructing properly initialized {@link JsonGenerator}
689+
* to write content to specified {@link File}, using specified encoding.
690+
* Generator is not managed (or "owned") by mapper: caller is responsible
691+
* for properly closing it once content generation is complete.
692+
*
693+
* @since 2.11
694+
*/
695+
public JsonGenerator createGenerator(File outputFile, JsonEncoding enc) throws IOException {
696+
_assertNotNull("outputFile", outputFile);
697+
return _generatorFactory.createGenerator(outputFile, enc);
698+
}
699+
700+
/**
701+
* Factory method for constructing properly initialized {@link JsonGenerator}
702+
* to write content using specified {@link DataOutput}.
703+
* Generator is not managed (or "owned") by mapper: caller is responsible
704+
* for properly closing it once content generation is complete.
705+
*
706+
* @since 2.11
707+
*/
708+
public JsonGenerator createGenerator(DataOutput out) throws IOException {
709+
_assertNotNull("out", out);
710+
return _generatorFactory.createGenerator(out);
711+
}
712+
642713
/*
643714
/**********************************************************
644715
/* Factory methods for sequence writers (2.5)
@@ -659,9 +730,7 @@ public ObjectWriter withRootValueSeparator(SerializableString sep) {
659730
* @since 2.5
660731
*/
661732
public SequenceWriter writeValues(File out) throws IOException {
662-
_assertNotNull("out", out);
663-
return _newSequenceWriter(false,
664-
_generatorFactory.createGenerator(out, JsonEncoding.UTF8), true);
733+
return _newSequenceWriter(false, createGenerator(out, JsonEncoding.UTF8), true);
665734
}
666735

667736
/**
@@ -699,9 +768,7 @@ public SequenceWriter writeValues(JsonGenerator g) throws IOException {
699768
* @since 2.5
700769
*/
701770
public SequenceWriter writeValues(Writer out) throws IOException {
702-
_assertNotNull("out", out);
703-
return _newSequenceWriter(false,
704-
_generatorFactory.createGenerator(out), true);
771+
return _newSequenceWriter(false, createGenerator(out), true);
705772
}
706773

707774
/**
@@ -718,18 +785,14 @@ public SequenceWriter writeValues(Writer out) throws IOException {
718785
* @since 2.5
719786
*/
720787
public SequenceWriter writeValues(OutputStream out) throws IOException {
721-
_assertNotNull("out", out);
722-
return _newSequenceWriter(false,
723-
_generatorFactory.createGenerator(out, JsonEncoding.UTF8), true);
788+
return _newSequenceWriter(false, createGenerator(out, JsonEncoding.UTF8), true);
724789
}
725790

726791
/**
727792
* @since 2.8
728793
*/
729794
public SequenceWriter writeValues(DataOutput out) throws IOException {
730-
_assertNotNull("out", out);
731-
return _newSequenceWriter(false,
732-
_generatorFactory.createGenerator(out), true);
795+
return _newSequenceWriter(false, createGenerator(out), true);
733796
}
734797

735798
/**
@@ -748,9 +811,7 @@ public SequenceWriter writeValues(DataOutput out) throws IOException {
748811
* @since 2.5
749812
*/
750813
public SequenceWriter writeValuesAsArray(File out) throws IOException {
751-
_assertNotNull("out", out);
752-
return _newSequenceWriter(true,
753-
_generatorFactory.createGenerator(out, JsonEncoding.UTF8), true);
814+
return _newSequenceWriter(true, createGenerator(out, JsonEncoding.UTF8), true);
754815
}
755816

756817
/**
@@ -790,8 +851,7 @@ public SequenceWriter writeValuesAsArray(JsonGenerator gen) throws IOException {
790851
* @since 2.5
791852
*/
792853
public SequenceWriter writeValuesAsArray(Writer out) throws IOException {
793-
_assertNotNull("out", out);
794-
return _newSequenceWriter(true, _generatorFactory.createGenerator(out), true);
854+
return _newSequenceWriter(true, createGenerator(out), true);
795855
}
796856

797857
/**
@@ -810,17 +870,14 @@ public SequenceWriter writeValuesAsArray(Writer out) throws IOException {
810870
* @since 2.5
811871
*/
812872
public SequenceWriter writeValuesAsArray(OutputStream out) throws IOException {
813-
_assertNotNull("out", out);
814-
return _newSequenceWriter(true,
815-
_generatorFactory.createGenerator(out, JsonEncoding.UTF8), true);
873+
return _newSequenceWriter(true, createGenerator(out, JsonEncoding.UTF8), true);
816874
}
817875

818876
/**
819877
* @since 2.8
820878
*/
821879
public SequenceWriter writeValuesAsArray(DataOutput out) throws IOException {
822-
_assertNotNull("out", out);
823-
return _newSequenceWriter(true, _generatorFactory.createGenerator(out), true);
880+
return _newSequenceWriter(true, createGenerator(out), true);
824881
}
825882

826883
/*
@@ -938,8 +995,7 @@ public void writeValue(JsonGenerator g, Object value) throws IOException
938995
public void writeValue(File resultFile, Object value)
939996
throws IOException, JsonGenerationException, JsonMappingException
940997
{
941-
_assertNotNull("resultFile", resultFile);
942-
_configAndWriteValue(_generatorFactory.createGenerator(resultFile, JsonEncoding.UTF8), value);
998+
_configAndWriteValue(createGenerator(resultFile, JsonEncoding.UTF8), value);
943999
}
9441000

9451001
/**
@@ -956,8 +1012,7 @@ public void writeValue(File resultFile, Object value)
9561012
public void writeValue(OutputStream out, Object value)
9571013
throws IOException, JsonGenerationException, JsonMappingException
9581014
{
959-
_assertNotNull("out", out);
960-
_configAndWriteValue(_generatorFactory.createGenerator(out, JsonEncoding.UTF8), value);
1015+
_configAndWriteValue(createGenerator(out, JsonEncoding.UTF8), value);
9611016
}
9621017

9631018
/**
@@ -973,8 +1028,7 @@ public void writeValue(OutputStream out, Object value)
9731028
public void writeValue(Writer w, Object value)
9741029
throws IOException, JsonGenerationException, JsonMappingException
9751030
{
976-
_assertNotNull("w", w);
977-
_configAndWriteValue(_generatorFactory.createGenerator(w), value);
1031+
_configAndWriteValue(createGenerator(w), value);
9781032
}
9791033

9801034
/**
@@ -983,8 +1037,7 @@ public void writeValue(Writer w, Object value)
9831037
public void writeValue(DataOutput out, Object value)
9841038
throws IOException
9851039
{
986-
_assertNotNull("out", out);
987-
_configAndWriteValue(_generatorFactory.createGenerator(out), value);
1040+
_configAndWriteValue(createGenerator(out), value);
9881041
}
9891042

9901043
/**
@@ -1002,7 +1055,7 @@ public String writeValueAsString(Object value)
10021055
// alas, we have to pull the recycler directly here...
10031056
SegmentedStringWriter sw = new SegmentedStringWriter(_generatorFactory._getBufferRecycler());
10041057
try {
1005-
_configAndWriteValue(_generatorFactory.createGenerator(sw), value);
1058+
_configAndWriteValue(createGenerator(sw), value);
10061059
} catch (JsonProcessingException e) {
10071060
throw e;
10081061
} catch (IOException e) { // shouldn't really happen, but is declared as possibility so:
@@ -1026,7 +1079,7 @@ public byte[] writeValueAsBytes(Object value)
10261079
{
10271080
ByteArrayBuilder bb = new ByteArrayBuilder(_generatorFactory._getBufferRecycler());
10281081
try {
1029-
_configAndWriteValue(_generatorFactory.createGenerator(bb, JsonEncoding.UTF8), value);
1082+
_configAndWriteValue(createGenerator(bb, JsonEncoding.UTF8), value);
10301083
} catch (JsonProcessingException e) { // to support [JACKSON-758]
10311084
throw e;
10321085
} catch (IOException e) { // shouldn't really happen, but is declared as possibility so:

src/test/java/com/fasterxml/jackson/databind/ObjectReaderTest.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ public void testTreeToValue() throws Exception
321321
public void testCodecUnsupportedWrites() throws Exception
322322
{
323323
ObjectReader r = MAPPER.readerFor(String.class);
324-
JsonGenerator g = MAPPER.getFactory().createGenerator(new StringWriter());
324+
JsonGenerator g = MAPPER.createGenerator(new StringWriter());
325325
ObjectNode n = MAPPER.createObjectNode();
326326
try {
327327
r.writeTree(g, n);
@@ -336,8 +336,6 @@ public void testCodecUnsupportedWrites() throws Exception
336336
;
337337
}
338338
g.close();
339-
340-
g.close();
341339
}
342340

343341
/*

src/test/java/com/fasterxml/jackson/databind/ObjectWriterTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void testWithCloseCloseable() throws Exception
149149
input.close();
150150

151151
// and via explicitly passed generator
152-
JsonGenerator g = MAPPER.getFactory().createGenerator(new StringWriter());
152+
JsonGenerator g = MAPPER.createGenerator(new StringWriter());
153153
input = new CloseableValue();
154154
assertFalse(input.closed);
155155
w.writeValue(g, input);

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ public void testStringArray() throws Exception
250250
"a", "b", "abcd", "", "???", "\"quoted\"", "lf: \n",
251251
};
252252
StringWriter sw = new StringWriter();
253-
JsonGenerator jg = MAPPER.getFactory().createGenerator(sw);
253+
JsonGenerator jg = MAPPER.createGenerator(sw);
254254
jg.writeStartArray();
255255
for (String str : STRS) {
256256
jg.writeString(str);

0 commit comments

Comments
 (0)