public Result send(Message msg, String routeName, boolean parseIfNotFound) {
        boolean found = false;
        RoutingTable table = mbus.getRoutingTable(msg.getProtocol().toString());
        if (table != null) {
            Route route = table.getRoute(routeName);
            if (route != null) {
                msg.setRoute(new Route(route));
                found = true;
            } else if ( ! parseIfNotFound) {
                return new Result(ErrorCode.ILLEGAL_ROUTE,
                                  "Route '" + routeName + "' not found for protocol '" + msg.getProtocol() + "'.");
            }
        } else if ( ! parseIfNotFound) {
            return new Result(ErrorCode.ILLEGAL_ROUTE,
                              "Protocol '" + msg.getProtocol() + "' has no routing table.");
        }
        if ( ! found) {
            msg.setRoute(Route.parse(routeName));
        }
        return send(msg);
    }
This is a convenience function to assign a named route to the given
message, and then pass it to the other {@link #send(Message)} method of
this session. If the route could not be found this methods returns with
an appropriate error, unless the 'parseIfNotFound' argument is true. In
that case, the route name is passed through to the Route factory method
{@link Route#parse}.

@param msg             the message to send
@param routeName       the route to assign to the message
@param parseIfNotFound whether or not to parse routeName as a route if it could not be found
@return the immediate result of the attempt to send this message
messagebus/src/main/java/com/yahoo/messagebus/SourceSession.java