Program: 88155
Project: 88155
Buggy source:
/** 
 * {@inheritDoc}
 */
@SuppressWarnings("String_Node_Str") public void read(DataInput in) throws IOException {
  super.read(in);
  final int numOutputChannels=in.readInt();
  final Class<?>[] parameters={this.getClass(),int.class,ChannelID.class,CompressionLevel.class};
  for (int i=0; i < numOutputChannels; i++) {
    final ChannelID channelID=new ChannelID();
    channelID.read(in);
    final CompressionLevel compressionLevel=EnumUtils.readEnum(in,CompressionLevel.class);
    final String className=StringRecord.readString(in);
    Class<? extends IOReadableWritable> c=null;
    try {
      c=ClassUtils.getRecordByName(className);
    }
 catch (    ClassNotFoundException e) {
      LOG.error(e);
    }
    if (c == null) {
      throw new IOException("String_Node_Str");
    }
    AbstractOutputChannel<T> eoc=null;
    try {
      final Constructor<AbstractOutputChannel<T>> constructor=(Constructor<AbstractOutputChannel<T>>)c.getDeclaredConstructor(parameters);
      if (constructor == null) {
        throw new IOException("String_Node_Str");
      }
      constructor.setAccessible(true);
      eoc=constructor.newInstance(this,i,channelID,compressionLevel);
    }
 catch (    InstantiationException e) {
      LOG.error(e);
    }
catch (    IllegalArgumentException e) {
      LOG.error(e);
    }
catch (    IllegalAccessException e) {
      LOG.error(e);
    }
catch (    InvocationTargetException e) {
      LOG.error(e);
    }
catch (    SecurityException e) {
      LOG.error(e);
    }
catch (    NoSuchMethodException e) {
      LOG.error(e);
    }
    if (eoc == null) {
      throw new IOException("String_Node_Str");
    }
    eoc.read(in);
    addOutputChannel(eoc);
  }
}

Fixed version (ground truth):
/** 
 * {@inheritDoc}
 */
@SuppressWarnings("String_Node_Str") public void read(DataInput in) throws IOException {
  super.read(in);
  final int numOutputChannels=in.readInt();
  Class<?>[] parameters={this.getClass(),int.class,ChannelID.class,CompressionLevel.class};
  Class<?>[] networkParameters={this.getClass(),int.class,ChannelID.class,CompressionLevel.class,boolean.class};
  for (int i=0; i < numOutputChannels; i++) {
    final ChannelType channelType=EnumUtils.readEnum(in,ChannelType.class);
    boolean followsPushModel=false;
    if (channelType == ChannelType.NETWORK) {
      followsPushModel=in.readBoolean();
    }
    final ChannelID channelID=new ChannelID();
    channelID.read(in);
    final CompressionLevel compressionLevel=EnumUtils.readEnum(in,CompressionLevel.class);
    final String className=StringRecord.readString(in);
    Class<? extends IOReadableWritable> c=null;
    try {
      c=ClassUtils.getRecordByName(className);
    }
 catch (    ClassNotFoundException e) {
      LOG.error(e);
    }
    if (c == null) {
      throw new IOException("String_Node_Str");
    }
    AbstractOutputChannel<T> eoc=null;
    try {
      Constructor<AbstractOutputChannel<T>> constructor;
      if (channelType == ChannelType.NETWORK) {
        constructor=(Constructor<AbstractOutputChannel<T>>)c.getDeclaredConstructor(networkParameters);
      }
 else {
        constructor=(Constructor<AbstractOutputChannel<T>>)c.getDeclaredConstructor(parameters);
      }
      if (constructor == null) {
        throw new IOException("String_Node_Str");
      }
      constructor.setAccessible(true);
      if (channelType == ChannelType.NETWORK) {
        eoc=constructor.newInstance(this,i,channelID,compressionLevel,followsPushModel);
      }
 else {
        eoc=constructor.newInstance(this,i,channelID,compressionLevel);
      }
    }
 catch (    InstantiationException e) {
      LOG.error(e);
    }
catch (    IllegalArgumentException e) {
      LOG.error(e);
    }
catch (    IllegalAccessException e) {
      LOG.error(e);
    }
catch (    InvocationTargetException e) {
      LOG.error(e);
    }
catch (    SecurityException e) {
      LOG.error(e);
    }
catch (    NoSuchMethodException e) {
      LOG.error(e);
    }
    if (eoc == null) {
      throw new IOException("String_Node_Str");
    }
    eoc.read(in);
    addOutputChannel(eoc);
  }
}