From 6962814eec98e9671b6aa514c1418294de3da6f9 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Thu, 8 Dec 2011 17:28:05 +0000
Subject: [PATCH] Log the exception class when logging exceptions.

---
 .../sf/briar/api/serial/SigningConsumer.java  |  4 +-
 .../net/sf/briar/db/DatabaseCleanerImpl.java  |  4 +-
 .../sf/briar/db/DatabaseComponentImpl.java    |  4 +-
 components/net/sf/briar/db/JdbcDatabase.java  | 10 ++---
 .../net/sf/briar/i18n/FontManagerImpl.java    |  6 +--
 components/net/sf/briar/i18n/I18nImpl.java    |  2 +-
 .../sf/briar/invitation/InvitationWorker.java |  4 +-
 .../lifecycle/WindowsShutdownManagerImpl.java |  2 +-
 .../sf/briar/plugins/PluginManagerImpl.java   | 22 +++++-----
 .../plugins/bluetooth/BluetoothPlugin.java    | 24 +++++-----
 .../BluetoothTransportConnection.java         |  2 +-
 .../plugins/bluetooth/ConnectionCallback.java |  2 +-
 .../plugins/bluetooth/ContactListener.java    |  2 +-
 .../plugins/bluetooth/InvitationListener.java |  2 +-
 .../net/sf/briar/plugins/file/FilePlugin.java |  6 +--
 .../plugins/file/FileTransportReader.java     |  2 +-
 .../plugins/file/FileTransportWriter.java     |  2 +-
 .../plugins/file/RemovableDrivePlugin.java    |  4 +-
 .../file/WindowsRemovableDriveFinder.java     |  2 +-
 .../briar/plugins/socket/LanSocketPlugin.java | 22 +++++-----
 .../plugins/socket/SimpleSocketPlugin.java    |  2 +-
 .../sf/briar/plugins/socket/SocketPlugin.java | 12 ++---
 .../socket/SocketTransportConnection.java     |  2 +-
 .../batch/IncomingBatchConnection.java        | 12 ++---
 .../batch/OutgoingBatchConnection.java        |  4 +-
 .../protocol/stream/StreamConnection.java     | 44 +++++++++----------
 .../net/sf/briar/setup/SetupWorker.java       |  2 +-
 .../transport/ConnectionDispatcherImpl.java   |  8 ++--
 .../transport/ConnectionRecogniserImpl.java   |  4 +-
 .../batch/TestBatchTransportWriter.java       |  2 +-
 30 files changed, 108 insertions(+), 112 deletions(-)

diff --git a/api/net/sf/briar/api/serial/SigningConsumer.java b/api/net/sf/briar/api/serial/SigningConsumer.java
index 4b0349ed81..e370317725 100644
--- a/api/net/sf/briar/api/serial/SigningConsumer.java
+++ b/api/net/sf/briar/api/serial/SigningConsumer.java
@@ -17,7 +17,7 @@ public class SigningConsumer implements Consumer {
 		try {
 			signature.update(b);
 		} catch(SignatureException e) {
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 	}
 
@@ -25,7 +25,7 @@ public class SigningConsumer implements Consumer {
 		try {
 			signature.update(b, off, len);
 		} catch(SignatureException e) {
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/db/DatabaseCleanerImpl.java b/components/net/sf/briar/db/DatabaseCleanerImpl.java
index a5c6fb194e..39e6c70b47 100644
--- a/components/net/sf/briar/db/DatabaseCleanerImpl.java
+++ b/components/net/sf/briar/db/DatabaseCleanerImpl.java
@@ -45,10 +45,10 @@ class DatabaseCleanerImpl implements DatabaseCleaner, Runnable {
 					}
 				} catch(DbException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				} catch(RuntimeException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 			}
 		}
diff --git a/components/net/sf/briar/db/DatabaseComponentImpl.java b/components/net/sf/briar/db/DatabaseComponentImpl.java
index f7d2d31bfc..fd6d9555eb 100644
--- a/components/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/components/net/sf/briar/db/DatabaseComponentImpl.java
@@ -138,10 +138,10 @@ DatabaseCleaner.Callback {
 						}
 					} catch(DbException e) {
 						if(LOG.isLoggable(Level.WARNING))
-							LOG.warning(e.getMessage());
+							LOG.warning(e.toString());
 					} catch(IOException e) {
 						if(LOG.isLoggable(Level.WARNING))
-							LOG.warning(e.getMessage());
+							LOG.warning(e.toString());
 					}
 				}
 			});
diff --git a/components/net/sf/briar/db/JdbcDatabase.java b/components/net/sf/briar/db/JdbcDatabase.java
index 6cd1e1155f..562d90785c 100644
--- a/components/net/sf/briar/db/JdbcDatabase.java
+++ b/components/net/sf/briar/db/JdbcDatabase.java
@@ -372,8 +372,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 		if(s != null) try {
 			s.close();
 		} catch(SQLException e) {
-			if(LOG.isLoggable(Level.WARNING))
-				LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING))LOG.warning(e.toString());
 		}
 	}
 
@@ -381,8 +380,7 @@ abstract class JdbcDatabase implements Database<Connection> {
 		if(rs != null) try {
 			rs.close();
 		} catch(SQLException e) {
-			if(LOG.isLoggable(Level.WARNING))
-				LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING))LOG.warning(e.toString());
 		}
 	}
 
@@ -418,11 +416,11 @@ abstract class JdbcDatabase implements Database<Connection> {
 			}
 		} catch(SQLException e) {
 			// Try to close the connection
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			try {
 				txn.close();
 			} catch(SQLException e1) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.toString());
 			}
 			// Whatever happens, allow the database to close
 			synchronized(connections) {
diff --git a/components/net/sf/briar/i18n/FontManagerImpl.java b/components/net/sf/briar/i18n/FontManagerImpl.java
index 16b6ffccf0..ad0c0b2223 100644
--- a/components/net/sf/briar/i18n/FontManagerImpl.java
+++ b/components/net/sf/briar/i18n/FontManagerImpl.java
@@ -57,11 +57,9 @@ public class FontManagerImpl implements FontManager {
 				font = font.deriveFont(bf.size);
 				for(String language : bf.languages) fonts.put(language, font);
 			} catch(FontFormatException e) {
-				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning("Could not load font: " + e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning("Could not load font: " + e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		defaultFont = getFont("Sans", 12f);
diff --git a/components/net/sf/briar/i18n/I18nImpl.java b/components/net/sf/briar/i18n/I18nImpl.java
index bd1bbf5fff..ca541eaa28 100644
--- a/components/net/sf/briar/i18n/I18nImpl.java
+++ b/components/net/sf/briar/i18n/I18nImpl.java
@@ -105,7 +105,7 @@ public class I18nImpl implements I18n {
 							UIManager.put(key, bundle.getString(key));
 						} catch(MissingResourceException e) {
 							if(LOG.isLoggable(Level.WARNING))
-								LOG.warning(e.getMessage());
+								LOG.warning(e.toString());
 						}
 					}
 				}
diff --git a/components/net/sf/briar/invitation/InvitationWorker.java b/components/net/sf/briar/invitation/InvitationWorker.java
index 8f2cd77f2b..6328135120 100644
--- a/components/net/sf/briar/invitation/InvitationWorker.java
+++ b/components/net/sf/briar/invitation/InvitationWorker.java
@@ -57,7 +57,7 @@ class InvitationWorker implements Runnable {
 			if(callback.isCancelled()) return;
 			if(parameters.shouldCreateJar()) files.add(createBriarJar(dir));
 		} catch(IOException e) {
-			callback.error(e.getMessage());
+			callback.error(e.toString());
 			return;
 		}
 		if(callback.isCancelled()) return;
@@ -75,7 +75,7 @@ class InvitationWorker implements Runnable {
 		try {
 			transports = db.getLocalTransports();
 		} catch(DbException e) {
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 		FileOutputStream out = new FileOutputStream(invitationDat);
 		Writer w = writerFactory.createWriter(out);
diff --git a/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java b/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java
index bd1316e602..4869e99fb8 100644
--- a/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java
+++ b/components/net/sf/briar/lifecycle/WindowsShutdownManagerImpl.java
@@ -128,7 +128,7 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl {
 					user32.DispatchMessage(msg);
 				}
 			} catch(UnsatisfiedLinkError e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
diff --git a/components/net/sf/briar/plugins/PluginManagerImpl.java b/components/net/sf/briar/plugins/PluginManagerImpl.java
index a4bb45f61b..a3343b5c86 100644
--- a/components/net/sf/briar/plugins/PluginManagerImpl.java
+++ b/components/net/sf/briar/plugins/PluginManagerImpl.java
@@ -111,10 +111,10 @@ class PluginManagerImpl implements PluginManager {
 				plugin.start();
 				batchPlugins.add(plugin);
 			} catch(ClassCastException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			} catch(Exception e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			}
 		}
@@ -151,10 +151,10 @@ class PluginManagerImpl implements PluginManager {
 				plugin.start();
 				streamPlugins.add(plugin);
 			} catch(ClassCastException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			} catch(Exception e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				continue;
 			}
 		}
@@ -175,7 +175,7 @@ class PluginManagerImpl implements PluginManager {
 				plugin.stop();
 				stopped++;
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		batchPlugins.clear();
@@ -185,7 +185,7 @@ class PluginManagerImpl implements PluginManager {
 				plugin.stop();
 				stopped++;
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		streamPlugins.clear();
@@ -209,7 +209,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				return db.getConfig(id);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return new TransportConfig();
 			}
 		}
@@ -220,7 +220,7 @@ class PluginManagerImpl implements PluginManager {
 				TransportProperties p = db.getLocalProperties(id);
 				return p == null ? new TransportProperties() : p;
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return new TransportProperties();
 			}
 		}
@@ -230,7 +230,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				return db.getRemoteProperties(id);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return Collections.emptyMap();
 			}
 		}
@@ -240,7 +240,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				db.setConfig(id, c);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 
@@ -268,7 +268,7 @@ class PluginManagerImpl implements PluginManager {
 			try {
 				db.setLocalProperties(id, p);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
index 4614b6b548..749ab8ea37 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
@@ -76,7 +76,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 					}
 				});
 			}
-			throw new IOException(e.getMessage());
+			throw new IOException(e.toString());
 		}
 		pluginExecutor.execute(createContactSocketBinder());
 	}
@@ -111,7 +111,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			scn = (StreamConnectionNotifier) Connector.open(url);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		synchronized(this) {
@@ -120,7 +120,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 					scn.close();
 				} catch(IOException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 				return;
 			}
@@ -154,7 +154,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			localDevice.setDiscoverable(DiscoveryAgent.GIAC);
 		} catch(BluetoothStateException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		// Advertise the address to contacts if the device is discoverable
 		if(localDevice.getDiscoverable() != DiscoveryAgent.NOT_DISCOVERABLE) {
@@ -176,7 +176,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 				s = scn.acceptAndOpen();
 			} catch(IOException e) {
 				// This is expected when the socket is closed
-				if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+				if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 				return;
 			}
 			BluetoothTransportConnection conn =
@@ -243,7 +243,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			try {
 				discoveryAgent.startInquiry(DiscoveryAgent.GIAC, listener);
 			} catch(BluetoothStateException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				return Collections.emptyMap();
 			}
 			try {
@@ -267,7 +267,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			if(LOG.isLoggable(Level.INFO)) LOG.info("Connected");
 			return new BluetoothTransportConnection(s);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return null;
 		}
 	}
@@ -340,7 +340,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 					url = listener.waitForUrl();
 				} catch(BluetoothStateException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 					return;
 				} catch(InterruptedException e) {
 					if(LOG.isLoggable(Level.INFO))
@@ -359,7 +359,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			StreamConnection s = (StreamConnection) Connector.open(url);
 			c.addConnection(s);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 
@@ -374,7 +374,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			scn = (StreamConnectionNotifier) Connector.open(url);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		pluginExecutor.execute(new Runnable() {
@@ -393,7 +393,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 		try {
 			scn.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 
@@ -407,7 +407,7 @@ class BluetoothPlugin extends AbstractPlugin implements StreamPlugin {
 			c.addConnection(s);
 		} catch(IOException e) {
 			// This is expected when the socket is closed
-			if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+			if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java b/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
index 1f484b4223..3ff9d853c8 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
@@ -33,7 +33,7 @@ class BluetoothTransportConnection implements StreamTransportConnection {
 		try {
 			stream.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java b/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java
index 7700263f3a..d558e6f91e 100644
--- a/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java
+++ b/components/net/sf/briar/plugins/bluetooth/ConnectionCallback.java
@@ -50,7 +50,7 @@ class ConnectionCallback {
 			try {
 				s.close();
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
diff --git a/components/net/sf/briar/plugins/bluetooth/ContactListener.java b/components/net/sf/briar/plugins/bluetooth/ContactListener.java
index 5f52a43539..6e29d6d8f7 100644
--- a/components/net/sf/briar/plugins/bluetooth/ContactListener.java
+++ b/components/net/sf/briar/plugins/bluetooth/ContactListener.java
@@ -51,7 +51,7 @@ class ContactListener extends AbstractListener {
 		try {
 			discoveryAgent.searchServices(null, uuids, device, this);
 		} catch(BluetoothStateException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		searches.incrementAndGet();
 	}
diff --git a/components/net/sf/briar/plugins/bluetooth/InvitationListener.java b/components/net/sf/briar/plugins/bluetooth/InvitationListener.java
index e7f35bf162..1dfa6b46eb 100644
--- a/components/net/sf/briar/plugins/bluetooth/InvitationListener.java
+++ b/components/net/sf/briar/plugins/bluetooth/InvitationListener.java
@@ -38,7 +38,7 @@ class InvitationListener extends AbstractListener {
 			discoveryAgent.searchServices(null, uuids, device, this);
 			searches.incrementAndGet();
 		} catch(BluetoothStateException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 
diff --git a/components/net/sf/briar/plugins/file/FilePlugin.java b/components/net/sf/briar/plugins/file/FilePlugin.java
index 40f579ff13..7b13fc8a16 100644
--- a/components/net/sf/briar/plugins/file/FilePlugin.java
+++ b/components/net/sf/briar/plugins/file/FilePlugin.java
@@ -75,7 +75,7 @@ abstract class FilePlugin extends AbstractPlugin implements BatchPlugin {
 			OutputStream out = new FileOutputStream(f);
 			return new FileTransportWriter(f, out, capacity, this);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			f.delete();
 			return null;
 		}
@@ -136,7 +136,7 @@ abstract class FilePlugin extends AbstractPlugin implements BatchPlugin {
 				FileInputStream in = new FileInputStream(f);
 				return new FileTransportReader(f, in, FilePlugin.this);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		return null;
@@ -175,7 +175,7 @@ abstract class FilePlugin extends AbstractPlugin implements BatchPlugin {
 							FilePlugin.this));
 				} catch(IOException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 			}
 		}
diff --git a/components/net/sf/briar/plugins/file/FileTransportReader.java b/components/net/sf/briar/plugins/file/FileTransportReader.java
index a1996df84b..679fc86ba9 100644
--- a/components/net/sf/briar/plugins/file/FileTransportReader.java
+++ b/components/net/sf/briar/plugins/file/FileTransportReader.java
@@ -31,7 +31,7 @@ class FileTransportReader implements BatchTransportReader {
 		try {
 			in.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		if(success) {
 			file.delete();
diff --git a/components/net/sf/briar/plugins/file/FileTransportWriter.java b/components/net/sf/briar/plugins/file/FileTransportWriter.java
index 427b708673..2563e29629 100644
--- a/components/net/sf/briar/plugins/file/FileTransportWriter.java
+++ b/components/net/sf/briar/plugins/file/FileTransportWriter.java
@@ -38,7 +38,7 @@ class FileTransportWriter implements BatchTransportWriter {
 		try {
 			out.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		if(success) plugin.writerFinished(file);
 		else file.delete();
diff --git a/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java b/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
index b2412c46d0..31b575aefc 100644
--- a/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
+++ b/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
@@ -83,7 +83,7 @@ implements RemovableDriveMonitor.Callback {
 			if(i == -1) return null;
 			return drives.get(i);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return null;
 		}
 	}
@@ -112,7 +112,7 @@ implements RemovableDriveMonitor.Callback {
 				}
 			}
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 		return Collections.unmodifiableList(matches);
 	}
diff --git a/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java b/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java
index 7672cae66d..4b3b408d2f 100644
--- a/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java
+++ b/components/net/sf/briar/plugins/file/WindowsRemovableDriveFinder.java
@@ -23,7 +23,7 @@ class WindowsRemovableDriveFinder implements RemovableDriveFinder {
 				int type = Kernel32.INSTANCE.GetDriveType(root.getPath());
 				if(type == DRIVE_REMOVABLE) drives.add(root);
 			} catch(RuntimeException e) {
-				throw new IOException(e.getMessage());
+				throw new IOException(e.toString());
 			}
 		}
 		return Collections.unmodifiableList(drives);
diff --git a/components/net/sf/briar/plugins/socket/LanSocketPlugin.java b/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
index 751d0f1fb6..d8016be741 100644
--- a/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/LanSocketPlugin.java
@@ -47,13 +47,13 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			ms.setInterface(iface);
 			ms.joinGroup(mcast.getAddress());
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ms != null) {
 				try {
 					ms.leaveGroup(mcast.getAddress());
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 				ms.close();
 			}
@@ -82,7 +82,7 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 							return new SocketTransportConnection(s);
 						} catch(IOException e) {
 							if(LOG.isLoggable(Level.WARNING))
-								LOG.warning(e.getMessage());
+								LOG.warning(e.toString());
 						}
 					}
 				} catch(SocketTimeoutException e) {
@@ -93,11 +93,11 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			if(LOG.isLoggable(Level.INFO))
 				LOG.info("Timeout while sending invitation");
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			try {
 				ms.leaveGroup(mcast.getAddress());
 			} catch(IOException e1) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e1.toString());
 			}
 			ms.close();
 		}
@@ -148,13 +148,13 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			ss = new ServerSocket();
 			ss.bind(new InetSocketAddress(iface, 0));
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ss != null) {
 				try {
 					ss.close();
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 			}
 			return null;
@@ -166,13 +166,13 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			ms = new MulticastSocket();
 			ms.setInterface(iface);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ms != null) ms.close();
 			try {
 				ss.close();
 			} catch(IOException e1) {
 				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning(e1.getMessage());
+					LOG.warning(e1.toString());
 			}
 			return null;
 		}
@@ -205,14 +205,14 @@ class LanSocketPlugin extends SimpleSocketPlugin {
 			if(LOG.isLoggable(Level.INFO))
 				LOG.info("Timeout while accepting invitation");
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		} finally {
 			ms.close();
 			try {
 				ss.close();
 			} catch(IOException e1) {
 				if(LOG.isLoggable(Level.WARNING))
-					LOG.warning(e1.getMessage());
+					LOG.warning(e1.toString());
 			}
 		}
 		return null;
diff --git a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
index c887005a6e..bc650249ee 100644
--- a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
@@ -71,7 +71,7 @@ class SimpleSocketPlugin extends SocketPlugin {
 			try {
 				return new InetSocketAddress(chooseInterface(false), 0);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 		return addr;
diff --git a/components/net/sf/briar/plugins/socket/SocketPlugin.java b/components/net/sf/briar/plugins/socket/SocketPlugin.java
index e01ef0cf82..552acc4687 100644
--- a/components/net/sf/briar/plugins/socket/SocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SocketPlugin.java
@@ -65,13 +65,13 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 						+ ":" + ss.getLocalPort());
 			}
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(ss != null) {
 				try {
 					ss.close();
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 			}
 			return;
@@ -82,7 +82,7 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 					ss.close();
 				} catch(IOException e) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e.getMessage());
+						LOG.warning(e.toString());
 				}
 				return;
 			}
@@ -99,12 +99,12 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 				s = ss.accept();
 			} catch(IOException e) {
 				// This is expected when the socket is closed
-				if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+				if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 				try {
 					ss.close();
 				} catch(IOException e1) {
 					if(LOG.isLoggable(Level.WARNING))
-						LOG.warning(e1.getMessage());
+						LOG.warning(e1.toString());
 				}
 				return;
 			}
@@ -153,7 +153,7 @@ abstract class SocketPlugin extends AbstractPlugin implements StreamPlugin {
 			}
 			s.connect(addr);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.INFO)) LOG.info(e.getMessage());
+			if(LOG.isLoggable(Level.INFO)) LOG.info(e.toString());
 			return null;
 		}
 		return new SocketTransportConnection(s);
diff --git a/components/net/sf/briar/plugins/socket/SocketTransportConnection.java b/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
index 999e6e2be5..242e5e3f3e 100644
--- a/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
+++ b/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
@@ -32,7 +32,7 @@ class SocketTransportConnection implements StreamTransportConnection {
 		try {
 			socket.close();
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 		}
 	}
 }
diff --git a/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java b/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java
index 09fca52731..dd28997d1e 100644
--- a/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java
+++ b/components/net/sf/briar/protocol/batch/IncomingBatchConnection.java
@@ -81,7 +81,7 @@ class IncomingBatchConnection {
 			}
 			transport.dispose(true);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			transport.dispose(false);
 		}
 	}
@@ -98,7 +98,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveAck(contactId, ack);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -116,7 +116,7 @@ class IncomingBatchConnection {
 				Batch b = batch.verify();
 				dbExecutor.execute(new ReceiveBatch(b));
 			} catch(GeneralSecurityException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -133,7 +133,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveBatch(contactId, batch);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -150,7 +150,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveSubscriptionUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -167,7 +167,7 @@ class IncomingBatchConnection {
 			try {
 				db.receiveTransportUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
diff --git a/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java b/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java
index 1d22b83200..f58dc925ee 100644
--- a/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java
+++ b/components/net/sf/briar/protocol/batch/OutgoingBatchConnection.java
@@ -92,10 +92,10 @@ class OutgoingBatchConnection {
 			out.flush();
 			transport.dispose(true);
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			transport.dispose(false);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			transport.dispose(false);
 		}
 	}
diff --git a/components/net/sf/briar/protocol/stream/StreamConnection.java b/components/net/sf/briar/protocol/stream/StreamConnection.java
index f91714c46b..5695ffca87 100644
--- a/components/net/sf/briar/protocol/stream/StreamConnection.java
+++ b/components/net/sf/briar/protocol/stream/StreamConnection.java
@@ -168,10 +168,10 @@ abstract class StreamConnection implements DatabaseListener {
 			writerTasks.add(CLOSE);
 			if(!disposed.getAndSet(true)) transport.dispose(true);
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		}
 	}
@@ -205,14 +205,14 @@ abstract class StreamConnection implements DatabaseListener {
 			}
 			if(!disposed.getAndSet(true)) transport.dispose(true);
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} catch(InterruptedException e) {
 			if(LOG.isLoggable(Level.INFO))
 				LOG.info("Interrupted while waiting for task");
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} catch(IOException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(false);
 		} finally {
 			db.removeListener(this);
@@ -232,7 +232,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveAck(contactId, ack);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -251,7 +251,7 @@ abstract class StreamConnection implements DatabaseListener {
 				Batch b = batch.verify();
 				dbExecutor.execute(new ReceiveBatch(b));
 			} catch(GeneralSecurityException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -269,7 +269,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveBatch(contactId, batch);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -288,7 +288,7 @@ abstract class StreamConnection implements DatabaseListener {
 				Request r = db.receiveOffer(contactId, offer);
 				writerTasks.add(new WriteRequest(r));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -307,7 +307,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeRequest(request);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -326,7 +326,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.setSeen(contactId, seen);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -344,7 +344,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveSubscriptionUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -362,7 +362,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				db.receiveTransportUpdate(contactId, update);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -377,7 +377,7 @@ abstract class StreamConnection implements DatabaseListener {
 				Ack a = db.generateAck(contactId, maxBatches);
 				if(a != null) writerTasks.add(new WriteAck(a));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -397,7 +397,7 @@ abstract class StreamConnection implements DatabaseListener {
 				writer.writeAck(ack);
 				dbExecutor.execute(new GenerateAcks());
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -420,7 +420,7 @@ abstract class StreamConnection implements DatabaseListener {
 				if(b == null) new GenerateOffer().run();
 				else writerTasks.add(new WriteBatch(b, requested));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -443,7 +443,7 @@ abstract class StreamConnection implements DatabaseListener {
 				if(requested.isEmpty()) dbExecutor.execute(new GenerateOffer());
 				else dbExecutor.execute(new GenerateBatches(requested));
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -467,7 +467,7 @@ abstract class StreamConnection implements DatabaseListener {
 					writerTasks.add(new WriteOffer(o));
 				}
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -486,7 +486,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeOffer(offer);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -500,7 +500,7 @@ abstract class StreamConnection implements DatabaseListener {
 				SubscriptionUpdate s = db.generateSubscriptionUpdate(contactId);
 				if(s != null) writerTasks.add(new WriteSubscriptionUpdate(s));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -519,7 +519,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeSubscriptionUpdate(update);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
@@ -533,7 +533,7 @@ abstract class StreamConnection implements DatabaseListener {
 				TransportUpdate t = db.generateTransportUpdate(contactId);
 				if(t != null) writerTasks.add(new WriteTransportUpdate(t));
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			}
 		}
 	}
@@ -552,7 +552,7 @@ abstract class StreamConnection implements DatabaseListener {
 			try {
 				writer.writeTransportUpdate(update);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				transport.dispose(false);
 			}
 		}
diff --git a/components/net/sf/briar/setup/SetupWorker.java b/components/net/sf/briar/setup/SetupWorker.java
index 415031796a..54f8d2d3f4 100644
--- a/components/net/sf/briar/setup/SetupWorker.java
+++ b/components/net/sf/briar/setup/SetupWorker.java
@@ -87,7 +87,7 @@ class SetupWorker implements Runnable {
 			// Installation succeeded - delete the installer
 			jar.deleteOnExit();
 		} catch(IOException e) {
-			callback.error(e.getMessage());
+			callback.error(e.toString());
 			return;
 		}
 		if(callback.isCancelled()) return;
diff --git a/components/net/sf/briar/transport/ConnectionDispatcherImpl.java b/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
index e9be62a634..3e4763cf56 100644
--- a/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
+++ b/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
@@ -92,10 +92,10 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
 				if(ctx == null) r.dispose(true);
 				else batchConnFactory.createIncomingConnection(ctx, r, tag);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				r.dispose(false);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				r.dispose(false);
 			}
 		}
@@ -119,10 +119,10 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
 				if(ctx == null) s.dispose(true);
 				else streamConnFactory.createIncomingConnection(ctx, s, tag);
 			} catch(DbException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				s.dispose(false);
 			} catch(IOException e) {
-				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 				s.dispose(false);
 			}
 		}
diff --git a/components/net/sf/briar/transport/ConnectionRecogniserImpl.java b/components/net/sf/briar/transport/ConnectionRecogniserImpl.java
index c5c29d9ef1..81753d7d72 100644
--- a/components/net/sf/briar/transport/ConnectionRecogniserImpl.java
+++ b/components/net/sf/briar/transport/ConnectionRecogniserImpl.java
@@ -206,7 +206,7 @@ DatabaseListener {
 				}
 			}
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		localTransportIds.add(t);
@@ -234,7 +234,7 @@ DatabaseListener {
 			// The contact was removed - clean up in removeContact()
 			return;
 		} catch(DbException e) {
-			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.getMessage());
+			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			return;
 		}
 		// Remove the old IVs
diff --git a/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java b/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java
index c37aa73b5b..40da955372 100644
--- a/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java
+++ b/test/net/sf/briar/protocol/batch/TestBatchTransportWriter.java
@@ -20,7 +20,7 @@ implements BatchTransportWriter {
 	}
 
 	public long getCapacity() {
-		return capacity - out.size();
+		return capacity;
 	}
 
 	public OutputStream getOutputStream() {
-- 
GitLab