Skip to content

Commit 196276f

Browse files
author
kohsuke
committed
[HUDSON-5383] improving the XStream converters so that a linkage error in a plugin doesn't cause catastrophic start up failure.
git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@26445 71c3de6d-444a-0410-be80-ed276b4c234a
1 parent 1aaf1be commit 196276f

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

Diff for: core/src/main/java/hudson/util/CopyOnWriteList.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import java.util.logging.Level;
4242
import java.util.logging.Logger;
4343

44+
import static java.util.logging.Level.WARNING;
45+
4446
/**
4547
* {@link List}-like implementation that has copy-on-write semantics.
4648
*
@@ -184,7 +186,9 @@ public CopyOnWriteList unmarshal(HierarchicalStreamReader reader, UnmarshallingC
184186
Object item = readItem(reader, context, items);
185187
items.add(item);
186188
} catch (CannotResolveClassException e) {
187-
LOGGER.log(Level.WARNING,"Failed to resolve class",e);
189+
LOGGER.log(WARNING,"Failed to resolve class",e);
190+
} catch (LinkageError e) {
191+
LOGGER.log(WARNING,"Failed to resolve class",e);
188192
}
189193
reader.moveUp();
190194
}

Diff for: core/src/main/java/hudson/util/RobustCollectionConverter.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
import java.util.Collection;
3636
import java.util.concurrent.CopyOnWriteArrayList;
3737
import java.util.concurrent.CopyOnWriteArraySet;
38+
import java.util.logging.Level;
39+
import java.util.logging.Logger;
40+
41+
import static java.util.logging.Level.WARNING;
3842

3943
/**
4044
* {@link CollectionConverter} that ignores {@link CannotResolveClassException}.
@@ -82,10 +86,13 @@ protected void populateCollection(HierarchicalStreamReader reader, Unmarshalling
8286
Object item = readItem(reader, context, collection);
8387
collection.add(item);
8488
} catch (CannotResolveClassException e) {
85-
System.err.println("failed to locate class: "+e);
89+
LOGGER.log(WARNING,"Failed to resolve class",e);
90+
} catch (LinkageError e) {
91+
LOGGER.log(WARNING,"Failed to resolve class",e);
8692
}
8793
reader.moveUp();
8894
}
8995
}
9096

97+
private static final Logger LOGGER = Logger.getLogger(RobustCollectionConverter.class.getName());
9198
}

Diff for: core/src/main/java/hudson/util/RobustReflectionConverter.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import java.util.logging.Logger;
5252
import java.util.logging.Level;
5353

54+
import static java.util.logging.Level.WARNING;
55+
5456
/**
5557
* Custom {@link ReflectionConverter} that handle errors more gracefully.
5658
*
@@ -240,9 +242,11 @@ public Object doUnmarshal(final Object result, final HierarchicalStreamReader re
240242
}
241243
}
242244
} catch (NonExistentFieldException e) {
243-
LOGGER.log(Level.WARNING,"Skipping a non-existent field "+e.getFieldName(),e);
245+
LOGGER.log(WARNING,"Skipping a non-existent field "+e.getFieldName(),e);
244246
} catch (CannotResolveClassException e) {
245-
LOGGER.log(Level.WARNING,"Skipping a non-existend type",e);
247+
LOGGER.log(WARNING,"Skipping a non-existend type",e);
248+
} catch (LinkageError e) {
249+
LOGGER.log(WARNING,"Failed to resolve a type",e);
246250
}
247251

248252
reader.moveUp();

0 commit comments

Comments
 (0)