@Override public JSONWriter writeNull() { this._json.writeNull(); return this; }
@Override public JSONWriter writeNull(String name) { this._json.writeNull(name); return this; }
@Override public Generator add(final String key, final String value) { if (value == null) { generator.writeNull(key); } else { generator.write(key, value); } return this; }
@SuppressWarnings("unchecked") @Override protected void serializeInternal(T obj, JsonGenerator generator, SerializationContext ctx) { for (Map.Entry<?,?> entry : obj.entrySet()) { final String keysString = String.valueOf(entry.getKey()); final Object value = entry.getValue(); if (value == null) { generator.writeNull(keysString); continue; } generator.writeKey(keysString); serializeItem(value, generator, ctx); } }
@Override protected void serialize(OptionalInt obj, JsonGenerator generator, Marshaller marshaller) { if (obj.isPresent()) { generator.write(obj.getAsInt()); } else if (customization.isNillable()) { generator.writeNull(); } } }
private JsonGenerator writeMapBody(final Map<?, ?> object, final Adapter itemConverter) throws InvocationTargetException, IllegalAccessException { for (final Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) { final Object value = entry.getValue(); final Object key = entry.getKey(); if (value == null) { if (config.isSkipNull()) { continue; } else { generator.writeNull(key == null ? "null" : key.toString()); continue; } } final Class<?> valueClass = value.getClass(); writeValue(valueClass, true, false, false, false, false, itemConverter, key == null ? "null" : key.toString(), value, null, null, null); } return generator; }
private JsonGenerator writeMapBody(final Map<?, ?> object, final Adapter itemConverter) throws InvocationTargetException, IllegalAccessException { for (final Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) { final Object value = entry.getValue(); final Object key = entry.getKey(); if (value == null) { if (config.isSkipNull()) { continue; } else { generator.writeNull(key == null ? "null" : key.toString()); continue; } } final Class<?> valueClass = value.getClass(); writeValue(valueClass, true, false, false, false, false, itemConverter, key == null ? "null" : key.toString(), value, null, null, null); } return generator; }
@Override protected void serialize(OptionalLong obj, JsonGenerator generator, Marshaller marshaller) { if (obj.isPresent()) { generator.write(obj.getAsLong()); } else if (customization.isNillable()) { generator.writeNull(); } } }
@Override protected void serialize(OptionalDouble obj, JsonGenerator generator, Marshaller marshaller) { if (obj.isPresent()) { generator.write(obj.getAsDouble()); } else if (customization.isNillable()) { generator.writeNull(); } } }
private void writeItem(final Object o, final Collection<String> ignoredProperties, JsonPointerTracker jsonPointer) { if (o == null) { generator.writeNull(); } else if (!writePrimitives(o)) { if (Collection.class.isInstance(o)) { doWriteIterable(Collection.class.cast(o), ignoredProperties, jsonPointer); } else if (o.getClass().isArray()) { final int length = Array.getLength(o); if (length > 0 || !config.isSkipEmptyArray()) { writeArray(o.getClass(), null, null, o, ignoredProperties, jsonPointer); } } else { String valJsonPointer = jsonPointers.get(o); if (valJsonPointer != null) { // write the JsonPointer instead generator.write(valJsonPointer); } else { doWriteObject(o, generator, true, ignoredProperties, jsonPointer); } } } }
private void writeDoubleValues(VR vr, Object val, boolean bigEndian) { gen.writeStartArray("Value"); int vm = vr.vmOf(val); for (int i = 0; i < vm; i++) { double d = vr.toDouble(val, bigEndian, i, 0); if (Double.isNaN(d)) { LOG.info("encode {} NaN as null", vr); gen.writeNull(); } else { if (d == Double.POSITIVE_INFINITY) { d = Double.MAX_VALUE; LOG.info("encode {} Infinity as {}", vr, d); } else if (d == Double.NEGATIVE_INFINITY) { d = -Double.MAX_VALUE; LOG.info("encode {} -Infinity as {}", vr, d); } gen.write(d); } } gen.writeEnd(); }
private void writeItem(final Object o, final Collection<String> ignoredProperties, JsonPointerTracker jsonPointer) { if (o == null) { generator.writeNull(); } else if (!writePrimitives(o)) { if (Collection.class.isInstance(o)) { doWriteIterable(Collection.class.cast(o), ignoredProperties, jsonPointer); } else if (o.getClass().isArray()) { final int length = Array.getLength(o); if (length > 0 || !config.isSkipEmptyArray()) { writeArray(o.getClass(), null, null, o, ignoredProperties, jsonPointer); } } else { String valJsonPointer = jsonPointers.get(o); if (valJsonPointer != null) { // write the JsonPointer instead generator.write(valJsonPointer); } else { doWriteObject(o, generator, true, ignoredProperties, jsonPointer); } } } }
@Override public void serialize(T obj, JsonGenerator generator, SerializationContext ctx) { JsonbContext jsonbContext = ((ProcessingContext) ctx).getJsonbContext(); if (obj == null || !obj.isPresent()) { if (!customization.isNillable()) { return; } generator.writeNull(); return; } Object optionalValue = obj.get(); final JsonbSerializer<?> serializer = new SerializerBuilder(jsonbContext).withObjectClass(optionalValue.getClass()) .withType(optionalValueType).withWrapper(wrapper).withCustomization(customization).build(); serialCaptor(serializer, optionalValue, generator, ctx); }
private <T> void doWriteIterable(final Iterable<T> object, final Collection<String> ignoredProperties, JsonPointerTracker jsonPointer) { if (object == null) { generator.writeStartArray().writeEnd(); } else { generator.writeStartArray(); int i = 0; for (final T t : object) { if (JsonValue.class.isInstance(t)) { generator.write(JsonValue.class.cast(t)); } else { if (t == null) { generator.writeNull(); } else { writeItem(t, ignoredProperties, isDeduplicateObjects ? new JsonPointerTracker(jsonPointer, i) : null); } } i++; } generator.writeEnd(); } }
private <T> void doWriteIterable(final Iterable<T> object, final Collection<String> ignoredProperties, JsonPointerTracker jsonPointer) { if (object == null) { generator.writeStartArray().writeEnd(); } else { generator.writeStartArray(); int i = 0; for (final T t : object) { if (JsonValue.class.isInstance(t)) { generator.write(JsonValue.class.cast(t)); } else { if (t == null) { generator.writeNull(); } else { writeItem(t, ignoredProperties, isDeduplicateObjects ? new JsonPointerTracker(jsonPointer, i) : null); } } i++; } generator.writeEnd(); } }
@Override @SuppressWarnings("unchecked") public void serialize(T obj, JsonGenerator generator, SerializationContext ctx) { ProcessingContext context = (ProcessingContext) ctx; try { if (context.addProcessedObject(obj)) { final JsonbAdapter<T, A> adapter = (JsonbAdapter<T, A>) adapterInfo.getAdapter(); A adapted = adapter.adaptToJson(obj); if (adapted == null) { generator.writeNull(); return; } final JsonbSerializer<A> serializer = resolveSerializer((Marshaller) ctx, adapted); serializer.serialize(adapted, generator, ctx); } else { throw new JsonbException(Messages.getMessage(MessageKeys.RECURSIVE_REFERENCE, obj.getClass())); } } catch (Exception e) { throw new JsonbException(Messages.getMessage(MessageKeys.ADAPTER_EXCEPTION, adapterInfo.getBindingType(), adapterInfo.getToType(), adapterInfo.getAdapter().getClass()), e); } finally { context.removeProcessedObject(obj); } }
protected void serializeItem(Object item, JsonGenerator generator, SerializationContext ctx) { if (item == null) { generator.writeNull(); return; } Class<?> itemClass = item.getClass(); JsonbSerializer<?> serializer = getValueSerializer(itemClass); if (serializer == null) { Type instanceValueType = getValueType(getRuntimeType()); instanceValueType = instanceValueType.equals(Object.class) ? itemClass : instanceValueType; ClassModel classModel = ((Marshaller)ctx).getJsonbContext().getMappingContext().getOrCreateClassModel(itemClass); serializer = new SerializerBuilder(((Marshaller)ctx).getJsonbContext()) .withObjectClass(itemClass) .withCustomization(new ContainerCustomization(classModel.getCustomization())) .withWrapper(this) .withType(instanceValueType) .build(); addValueSerializer(serializer, itemClass); } serializerCaptor(serializer, item, generator, ctx); }