Set # remove (Object) определенно определено в Java 1.3 .Ошибка фактически говорит о том, что ThreadLocal # remove () V не существует.Это пришло в 1.5.(Видите? Нет такого метода! )
Вот источник ошибки в json-lib 2.4 (jdk1.3)
AbstractJSON:
/**
* Removes a reference for cycle detection check.
*/
protected static void removeInstance( Object instance ) {
Set set = getCycleSet();
set.remove( instance );
if(set.size() == 0) {
cycleSet.remove(); // BUG @ "line 221"
}
}
Так как в CycleSet.java мы видим:
private static class CycleSet extends ThreadLocal {
protected Object initialValue() {
return new SoftReference(new HashSet());
}
public Set getSet() {
Set set = (Set) ((SoftReference)get()).get();
if( set == null ) {
set = new HashSet();
set(new SoftReference(set));
}
return set;
}
}
Но ThreadLocal (1.3) не имеет такого метода.
[править после @AlexR ответ / комментарий]:
Учитывая, что библиотека с открытым исходным кодом, я думаю, что это может исправить (не проверено):
private static class CycleSet extends ThreadLocal {
protected Object initialValue() {
return new SoftReference(new HashSet());
}
/** added to support JRE 1.3 */
public void remove() {
this.set(null);
}
public Set getSet() {
Set set = (Set) ((SoftReference)get()).get();
if( set == null ) {
set = new HashSet();
set(new SoftReference(set));
}
return set;
}
}