} catch (SVNException e) { handleUnsupportedCommand(e, "Server doesn't support the unlock command");
    public void unlock(Map pathToTokens, boolean force, ISVNLockHandler handler) throws SVNException {        try {            openConnection();            for (Iterator paths = pathToTokens.keySet().iterator(); paths.hasNext();) {                String path = (String) paths.next();                String id = (String) pathToTokens.get(path);                path = getRepositoryPath(path);                if (id  == null) {                    Object[] buffer = new Object[] { "get-lock", path };                    write("(w(s))", buffer);                    authenticate();                    read("[((?L))]", buffer);                    SVNLock lock = (SVNLock) buffer[0];                    if (lock == null) {                        lock = new SVNLock(path, "", null, null, null, null);                        SVNErrorMessage errorMessage = SVNErrorMessage.create(SVNErrorCode.RA_NOT_LOCKED, "No lock on path ''{0}''", path);                        handler.handleUnlock(path, lock, errorMessage);                        continue;                    }                    id = lock.getID();                }                Object[] buffer = new Object[] { "unlock", path, id, Boolean.valueOf(force) };                write("(w(s(s)w))", buffer);                authenticate();                SVNErrorMessage error = null;                try {                    read("[()]", buffer);                } catch (SVNException e) {                    error = e.getErrorMessage();                }                if (handler != null) {                    SVNLock lock = new SVNLock(path, id, null, null, null, null);                    handler.handleUnlock(path, lock, error);                }            }        } finally {            closeConnection();        }    }