Program: 17832
Project: 17832
Buggy source:
public void append(final Writer writer,final EntityInfoAggregator entityInfo,final Map<String,Object> data,final boolean isRootElement) throws EntityProviderException {
  final EdmEntityType type=entityInfo.getEntityType();
  try {
    jsonStreamWriter=new JsonStreamWriter(writer);
    if (isRootElement) {
      jsonStreamWriter.beginObject().name(FormatJson.D);
    }
    jsonStreamWriter.beginObject();
    jsonStreamWriter.name(FormatJson.METADATA).beginObject();
    final String self=AtomEntryEntityProducer.createSelfLink(entityInfo,data,null);
    location=(properties.getServiceRoot() == null ? "String_Node_Str" : properties.getServiceRoot().toASCIIString()) + self;
    jsonStreamWriter.namedStringValue(FormatJson.ID,location).separator().namedStringValue(FormatJson.URI,location).separator().namedStringValueRaw(FormatJson.TYPE,type.getNamespace() + Edm.DELIMITER + type.getName());
    eTag=AtomEntryEntityProducer.createETag(entityInfo,data);
    if (eTag != null) {
      jsonStreamWriter.separator().namedStringValue(FormatJson.ETAG,eTag);
    }
    if (type.hasStream()) {
      jsonStreamWriter.separator().namedStringValueRaw(FormatJson.CONTENT_TYPE,properties.getMediaResourceMimeType() == null ? type.getMapping() == null || type.getMapping().getMimeType() == null || data.get(type.getMapping().getMimeType()) == null ? HttpContentType.APPLICATION_OCTET_STREAM : data.get(type.getMapping().getMimeType()).toString() : properties.getMediaResourceMimeType()).separator().namedStringValue(FormatJson.MEDIA_SRC,self + "String_Node_Str").separator().namedStringValue(FormatJson.EDIT_MEDIA,location + "String_Node_Str");
    }
    jsonStreamWriter.endObject();
    for (    final String propertyName : type.getPropertyNames()) {
      if (entityInfo.getSelectedPropertyNames().contains(propertyName)) {
        jsonStreamWriter.separator().name(propertyName);
        JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter,entityInfo.getPropertyInfo(propertyName),data.get(propertyName));
      }
    }
    for (    final String navigationPropertyName : type.getNavigationPropertyNames()) {
      if (entityInfo.getSelectedNavigationPropertyNames().contains(navigationPropertyName)) {
        jsonStreamWriter.separator().name(navigationPropertyName);
        if (entityInfo.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
          if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
            final EdmNavigationProperty navigationProperty=(EdmNavigationProperty)type.getProperty(navigationPropertyName);
            final boolean isFeed=navigationProperty.getMultiplicity() == EdmMultiplicity.MANY;
            final EdmEntitySet entitySet=entityInfo.getEntitySet();
            final EdmEntitySet inlineEntitySet=entitySet.getRelatedEntitySet(navigationProperty);
            WriteCallbackContext context=isFeed ? new WriteFeedCallbackContext() : new WriteEntryCallbackContext();
            context.setSourceEntitySet(entitySet);
            context.setNavigationProperty(navigationProperty);
            context.setEntryData(data);
            context.setCurrentExpandSelectTreeNode(properties.getExpandSelectTree().getLinks().get(navigationPropertyName));
            ODataCallback callback=properties.getCallbacks().get(navigationPropertyName);
            if (callback == null) {
              throw new EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
            }
            try {
              if (isFeed) {
                final WriteFeedCallbackResult result=((OnWriteFeedContent)callback).retrieveFeedResult((WriteFeedCallbackContext)context);
                List<Map<String,Object>> inlineData=result.getFeedData();
                if (inlineData != null) {
                  final EntityProviderWriteProperties inlineProperties=result.getInlineProperties();
                  final EntityInfoAggregator inlineEntityInfo=EntityInfoAggregator.create(inlineEntitySet,inlineProperties.getExpandSelectTree());
                  new JsonFeedEntityProducer(inlineProperties).append(writer,inlineEntityInfo,inlineData,false);
                }
              }
 else {
                final WriteEntryCallbackResult result=((OnWriteEntryContent)callback).retrieveEntryResult((WriteEntryCallbackContext)context);
                Map<String,Object> inlineData=result.getEntryData();
                if (inlineData != null) {
                  final EntityProviderWriteProperties inlineProperties=result.getInlineProperties();
                  final EntityInfoAggregator inlineEntityInfo=EntityInfoAggregator.create(inlineEntitySet,inlineProperties.getExpandSelectTree());
                  new JsonEntryEntityProducer(inlineProperties).append(writer,inlineEntityInfo,inlineData,false);
                }
              }
            }
 catch (            final ODataApplicationException e) {
              throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass().getSimpleName()),e);
            }
          }
 else {
            writeDeferredUri(navigationPropertyName);
          }
        }
 else {
          writeDeferredUri(navigationPropertyName);
        }
      }
    }
    jsonStreamWriter.endObject();
    if (isRootElement) {
      jsonStreamWriter.endObject();
    }
    writer.flush();
  }
 catch (  final IOException e) {
    throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass().getSimpleName()),e);
  }
catch (  final EdmException e) {
    throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass().getSimpleName()),e);
  }
}

Fixed version (ground truth):
public void append(final Writer writer,final EntityInfoAggregator entityInfo,final Map<String,Object> data,final boolean isRootElement) throws EntityProviderException {
  final EdmEntityType type=entityInfo.getEntityType();
  try {
    jsonStreamWriter=new JsonStreamWriter(writer);
    if (isRootElement) {
      jsonStreamWriter.beginObject().name(FormatJson.D);
    }
    jsonStreamWriter.beginObject();
    jsonStreamWriter.name(FormatJson.METADATA).beginObject();
    final String self=AtomEntryEntityProducer.createSelfLink(entityInfo,data,null);
    location=(properties.getServiceRoot() == null ? "String_Node_Str" : properties.getServiceRoot().toASCIIString()) + self;
    jsonStreamWriter.namedStringValue(FormatJson.ID,location).separator().namedStringValue(FormatJson.URI,location).separator().namedStringValueRaw(FormatJson.TYPE,type.getNamespace() + Edm.DELIMITER + type.getName());
    eTag=AtomEntryEntityProducer.createETag(entityInfo,data);
    if (eTag != null) {
      jsonStreamWriter.separator().namedStringValue(FormatJson.ETAG,eTag);
    }
    if (type.hasStream()) {
      jsonStreamWriter.separator().namedStringValueRaw(FormatJson.CONTENT_TYPE,properties.getMediaResourceMimeType() == null ? type.getMapping() == null || type.getMapping().getMimeType() == null || data.get(type.getMapping().getMimeType()) == null ? HttpContentType.APPLICATION_OCTET_STREAM : data.get(type.getMapping().getMimeType()).toString() : properties.getMediaResourceMimeType()).separator().namedStringValue(FormatJson.MEDIA_SRC,self + "String_Node_Str").separator().namedStringValue(FormatJson.EDIT_MEDIA,location + "String_Node_Str");
    }
    jsonStreamWriter.endObject();
    for (    final String propertyName : type.getPropertyNames()) {
      if (entityInfo.getSelectedPropertyNames().contains(propertyName)) {
        jsonStreamWriter.separator().name(propertyName);
        JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter,entityInfo.getPropertyInfo(propertyName),data.get(propertyName));
      }
    }
    for (    final String navigationPropertyName : type.getNavigationPropertyNames()) {
      if (entityInfo.getSelectedNavigationPropertyNames().contains(navigationPropertyName)) {
        jsonStreamWriter.separator().name(navigationPropertyName);
        if (entityInfo.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
          if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
            final EdmNavigationProperty navigationProperty=(EdmNavigationProperty)type.getProperty(navigationPropertyName);
            final boolean isFeed=navigationProperty.getMultiplicity() == EdmMultiplicity.MANY;
            final EdmEntitySet entitySet=entityInfo.getEntitySet();
            final EdmEntitySet inlineEntitySet=entitySet.getRelatedEntitySet(navigationProperty);
            WriteCallbackContext context=isFeed ? new WriteFeedCallbackContext() : new WriteEntryCallbackContext();
            context.setSourceEntitySet(entitySet);
            context.setNavigationProperty(navigationProperty);
            context.setEntryData(data);
            context.setCurrentExpandSelectTreeNode(properties.getExpandSelectTree().getLinks().get(navigationPropertyName));
            ODataCallback callback=properties.getCallbacks().get(navigationPropertyName);
            if (callback == null) {
              throw new EntityProviderException(EntityProviderException.EXPANDNOTSUPPORTED);
            }
            try {
              if (isFeed) {
                final WriteFeedCallbackResult result=((OnWriteFeedContent)callback).retrieveFeedResult((WriteFeedCallbackContext)context);
                List<Map<String,Object>> inlineData=result.getFeedData();
                if (inlineData == null) {
                  inlineData=new ArrayList<Map<String,Object>>();
                }
                final EntityProviderWriteProperties inlineProperties=result.getInlineProperties();
                final EntityInfoAggregator inlineEntityInfo=EntityInfoAggregator.create(inlineEntitySet,inlineProperties.getExpandSelectTree());
                new JsonFeedEntityProducer(inlineProperties).append(writer,inlineEntityInfo,inlineData,false);
              }
 else {
                final WriteEntryCallbackResult result=((OnWriteEntryContent)callback).retrieveEntryResult((WriteEntryCallbackContext)context);
                Map<String,Object> inlineData=result.getEntryData();
                if (inlineData != null && !inlineData.isEmpty()) {
                  final EntityProviderWriteProperties inlineProperties=result.getInlineProperties();
                  final EntityInfoAggregator inlineEntityInfo=EntityInfoAggregator.create(inlineEntitySet,inlineProperties.getExpandSelectTree());
                  new JsonEntryEntityProducer(inlineProperties).append(writer,inlineEntityInfo,inlineData,false);
                }
 else {
                  jsonStreamWriter.unquotedValue("String_Node_Str");
                }
              }
            }
 catch (            final ODataApplicationException e) {
              throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass().getSimpleName()),e);
            }
          }
 else {
            writeDeferredUri(navigationPropertyName);
          }
        }
 else {
          writeDeferredUri(navigationPropertyName);
        }
      }
    }
    jsonStreamWriter.endObject();
    if (isRootElement) {
      jsonStreamWriter.endObject();
    }
    writer.flush();
  }
 catch (  final IOException e) {
    throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass().getSimpleName()),e);
  }
catch (  final EdmException e) {
    throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass().getSimpleName()),e);
  }
}