Program: 3341
Project: 3341
Buggy source:
/** 
 * Determine which type of adatper to use for this object, either a community, collection, item, or repository adatpter. The decisios is based upon the two supplied identifiers: a handle or an internal id. If the handle is supplied then this is resolved and the approprate adapter is picked. Otherwise the internal identifier is used to resolve the correct type of adapter. The internal identifier must be of the form "type:id" i.g. item:255 or collection:99. In the case of a repository the handle prefix must be used.
 * @return Return the correct adaptor or null if none found.
 */
private AbstractAdapter resolveAdapter(Context context) throws SQLException {
  try {
    Request request=ObjectModelHelper.getRequest(objectModel);
    String contextPath=request.getContextPath();
    String uri=parameters.getParameter("String_Node_Str",null);
    String internal=parameters.getParameter("String_Node_Str",null);
    AbstractAdapter adapter=null;
    if (uri != null) {
      ResolvableIdentifier ri=IdentifierService.resolve(context,uri);
      DSpaceObject dso=(DSpaceObject)IdentifierService.getResource(context,ri);
      if (dso instanceof Item)       adapter=new ItemAdapter((Item)dso,contextPath);
 else       if (dso instanceof Collection || dso instanceof Community)       adapter=new ContainerAdapter(context,dso,contextPath);
    }
 else     if (internal != null) {
      String[] parts=internal.split("String_Node_Str");
      if (parts.length == 2) {
        String type=parts[0];
        int id=Integer.valueOf(parts[1]);
        if ("String_Node_Str".equals(type)) {
          Item item=Item.find(context,id);
          if (item != null)           adapter=new ItemAdapter(item,contextPath);
        }
 else         if ("String_Node_Str".equals(type)) {
          Collection collection=Collection.find(context,id);
          if (collection != null)           adapter=new ContainerAdapter(context,collection,contextPath);
        }
 else         if ("String_Node_Str".equals(type)) {
          Community community=Community.find(context,id);
          if (community != null)           adapter=new ContainerAdapter(context,community,contextPath);
        }
 else         if ("String_Node_Str".equals(type)) {
          if (ConfigurationManager.getProperty("String_Node_Str").equals(id))           adapter=new RepositoryAdapter(context,contextPath);
        }
      }
    }
    return adapter;
  }
 catch (  IdentifierException e) {
    throw new RuntimeException(e);
  }
}

Fixed version (ground truth):
/** 
 * Determine which type of adatper to use for this object, either a community, collection, item, or repository adatpter. The decisios is based upon the two supplied identifiers: a handle or an internal id. If the handle is supplied then this is resolved and the approprate adapter is picked. Otherwise the internal identifier is used to resolve the correct type of adapter. The internal identifier must be of the form "type:id" i.g. item:255 or collection:99. In the case of a repository the handle prefix must be used.
 * @return Return the correct adaptor or null if none found.
 */
private AbstractAdapter resolveAdapter(Context context) throws SQLException {
  try {
    Request request=ObjectModelHelper.getRequest(objectModel);
    String contextPath=request.getContextPath();
    String uri=parameters.getParameter("String_Node_Str",null);
    String internal=parameters.getParameter("String_Node_Str",null);
    AbstractAdapter adapter=null;
    if (uri != null) {
      ResolvableIdentifier ri=IdentifierService.resolve(context,uri);
      DSpaceObject dso=(DSpaceObject)IdentifierService.getResource(context,ri);
      if (dso instanceof Item)       adapter=new ItemAdapter((Item)dso,contextPath);
 else       if (dso instanceof Collection || dso instanceof Community)       adapter=new ContainerAdapter(context,dso,contextPath);
    }
 else     if (internal != null) {
      String[] parts=internal.split("String_Node_Str");
      if (parts.length == 2) {
        String type=parts[0];
        int id=Integer.valueOf(parts[1]);
        if ("String_Node_Str".equals(type)) {
          Item item=Item.find(context,id);
          if (item != null)           adapter=new ItemAdapter(item,contextPath);
        }
 else         if ("String_Node_Str".equals(type)) {
          Collection collection=Collection.find(context,id);
          if (collection != null)           adapter=new ContainerAdapter(context,collection,contextPath);
        }
 else         if ("String_Node_Str".equals(type)) {
          Community community=Community.find(context,id);
          if (community != null)           adapter=new ContainerAdapter(context,community,contextPath);
        }
 else         if ("String_Node_Str".equals(type)) {
          if (ConfigurationManager.getProperty("String_Node_Str").equals(String.valueOf(id)))           adapter=new RepositoryAdapter(context,contextPath);
        }
      }
    }
    return adapter;
  }
 catch (  IdentifierException e) {
    throw new RuntimeException(e);
  }
}