Program: 88237
Project: 88237
Buggy source:
/** 
 * {@inheritDoc}
 */
@SuppressWarnings("String_Node_Str") @Override public void read(DataInput in) throws IOException {
  super.read(in);
  try {
    String classNameSelector=StringRecord.readString(in);
    final ClassLoader cl=LibraryCacheManager.getClassLoader(getJobID());
    channelSelector=(ChannelSelector<T>)Class.forName(classNameSelector,true,cl).newInstance();
    channelSelector.read(in);
  }
 catch (  InstantiationException e) {
    LOG.error(e);
  }
catch (  IllegalAccessException e) {
    LOG.error(e);
  }
catch (  ClassNotFoundException e) {
    LOG.error(e);
  }
  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") @Override public void read(DataInput in) throws IOException {
  super.read(in);
  try {
    final String classNameSelector=StringRecord.readString(in);
    final ClassLoader cl=LibraryCacheManager.getClassLoader(getJobID());
    this.channelSelector=(ChannelSelector<T>)Class.forName(classNameSelector,true,cl).newInstance();
    this.channelSelector.read(in);
  }
 catch (  InstantiationException e) {
    LOG.error(e);
  }
catch (  IllegalAccessException e) {
    LOG.error(e);
  }
catch (  ClassNotFoundException e) {
    LOG.error(e);
  }
  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);
  }
}