Program: 66382
Project: 66382
Buggy source:
private String stringFromSQLTime(Time sourceTime,QName schemaType){
  if (XMLConstants.DATE_TIME_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    xgc.setHour(cal.get(Calendar.HOUR_OF_DAY));
    xgc.setMinute(cal.get(Calendar.MINUTE));
    xgc.setSecond(cal.get(Calendar.SECOND));
    String string=xgc.toXMLFormat();
    return appendTimeZone(string);
  }
 else   if (XMLConstants.DATE_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_DAY_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_MONTH_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    String xmlFormat=xgc.toXMLFormat();
    if (xmlFormat.length() == 6) {
      xmlFormat=xmlFormat.substring(0,4);
    }
    return xmlFormat;
  }
 else   if (XMLConstants.G_MONTH_DAY_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_YEAR_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_YEAR_MONTH_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.DURATION_QNAME.equals(schemaType)) {
    throw new IllegalArgumentException();
  }
 else {
    return stringFromSQLTime(sourceTime);
  }
}

Fixed version (ground truth):
private String stringFromSQLTime(Time sourceTime,QName schemaType){
  if (XMLConstants.DATE_TIME_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    xgc.setHour(cal.get(Calendar.HOUR_OF_DAY));
    xgc.setMinute(cal.get(Calendar.MINUTE));
    xgc.setSecond(cal.get(Calendar.SECOND));
    String string=xgc.toXMLFormat();
    return appendTimeZone(string,sourceTime);
  }
 else   if (XMLConstants.DATE_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_DAY_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_MONTH_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    String xmlFormat=xgc.toXMLFormat();
    if (xmlFormat.length() == 6) {
      xmlFormat=xmlFormat.substring(0,4);
    }
    return xmlFormat;
  }
 else   if (XMLConstants.G_MONTH_DAY_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    xgc.setDay(cal.get(Calendar.DAY_OF_MONTH));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_YEAR_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.G_YEAR_MONTH_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceTime);
    if (cal.get(Calendar.ERA) == GregorianCalendar.BC) {
      xgc.setYear(-cal.get(Calendar.YEAR));
    }
 else {
      xgc.setYear(cal.get(Calendar.YEAR));
    }
    xgc.setMonth(cal.get(Calendar.MONTH) + 1);
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.DURATION_QNAME.equals(schemaType)) {
    throw new IllegalArgumentException();
  }
 else {
    return stringFromSQLTime(sourceTime);
  }
}