Program: 66381
Project: 66381
Buggy source:
private String stringFromSQLDate(java.sql.Date sourceDate,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(sourceDate);
    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));
    return xgc.toXMLFormat();
  }
 else   if (XMLConstants.TIME_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceDate);
    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.G_DAY_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceDate);
    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(sourceDate);
    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(sourceDate);
    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(sourceDate);
    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(sourceDate);
    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 stringFromSQLDate(sourceDate);
  }
}

Fixed version (ground truth):
private String stringFromSQLDate(java.sql.Date sourceDate,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(sourceDate);
    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,sourceDate);
  }
 else   if (XMLConstants.TIME_QNAME.equals(schemaType)) {
    XMLGregorianCalendar xgc=getDatatypeFactory().newXMLGregorianCalendar();
    GregorianCalendar cal=new GregorianCalendar(getTimeZone());
    cal.setGregorianChange(new Date(Long.MIN_VALUE));
    cal.setTime(sourceDate);
    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,sourceDate);
  }
 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(sourceDate);
    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(sourceDate);
    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(sourceDate);
    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(sourceDate);
    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(sourceDate);
    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 stringFromSQLDate(sourceDate);
  }
}