class ActionDispatch::Journey::Router

def serve(req)

def serve(req)
  find_routes(req) do |match, parameters, route|
    set_params  = req.path_parameters
    path_info   = req.path_info
    script_name = req.script_name
    unless route.path.anchored
      req.script_name = (script_name.to_s + match.to_s).chomp("/")
      req.path_info = match.post_match
      req.path_info = "/" + req.path_info unless req.path_info.start_with? "/"
    end
    tmp_params = set_params.merge route.defaults
    parameters.each_pair { |key, val|
      tmp_params[key] = val.force_encoding(::Encoding::UTF_8)
    }
    req.path_parameters = tmp_params
    req.route_uri_pattern = route.path.spec.to_s
    _, headers, _ = response = route.app.serve(req)
    if "pass" == headers[Constants::X_CASCADE]
      req.script_name     = script_name
      req.path_info       = path_info
      req.path_parameters = set_params
      next
    end
    return response
  end
  [404, { Constants::X_CASCADE => "pass" }, ["Not Found"]]
end