File kabupaten_jakarta.shp has a polygon with invalid geometry. For example, load the layer in QGIS, then:
p = iface.activeLayer()
for f in p.getFeatures():
print f.attributes(), f.geometry().isGeosValid()
The result is:
[u'JAKARTA BARAT', 0.489965321] True
[u'JAKARTA PUSAT', 0.495809369] True
[u'JAKARTA SELATAN', 0.494102439] False
[u'JAKARTA TIMUR', 0.490687674] True
[u'JAKARTA UTARA', 0.496168105] True