public final boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException, IllegalAccessException, InvocationTargetException { if(!req.tokens.hasMore() || !req.tokens.peek().equals(name)) return false; if(req.tokens.countRemainingTokens()<=argCount) return false; req.tokens.next(); return doDispatch(req,rsp,node); }
public final boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException, IllegalAccessException, InvocationTargetException { if(!req.tokens.hasMore() || !req.tokens.peek().equals(name)) return false; if(req.tokens.countRemainingTokens()<=argCount) return false; req.tokens.next(); boolean b = doDispatch(req, rsp, node); if (!b) req.tokens.prev(); // cancel the next effect return b; }
public final boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException, IllegalAccessException, InvocationTargetException { if(!req.tokens.hasMore() || !req.tokens.peek().equals(name)) return false; if(req.tokens.countRemainingTokens()<=argCount) return false; req.tokens.next(); boolean b = doDispatch(req, rsp, node); if (!b) req.tokens.prev(); // cancel the next effect return b; }
protected boolean invokeScript(RequestImpl req, ResponseImpl rsp, Object node, String next, Script script) throws IOException, ServletException { try { if(script==null) return false; req.tokens.next(); if(traceable()) trace(req,rsp,"Invoking "+next+" on "+node+" for "+req.tokens); WebApp.getCurrent().getFacet(JellyFacet.class).scriptInvoker.invokeScript(req, rsp, script, node); return true; } catch (RuntimeException e) { throw e; } catch (IOException e) { throw e; } catch (Exception e) { throw new ServletException(e); } }
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { String next = req.tokens.peek(); if(next==null) return false; // only match the end of the URL if (req.tokens.countRemainingTokens()>1) return false; // and avoid serving both "foo" and "foo/" as relative URL semantics are drastically different if (req.getRequestURI().endsWith("/")) return false; Stapler stapler = req.getStapler(); if (!isBasename(next)) { // potentially an attempt to make a folder traversal return false; } // check static resources RequestDispatcher disp = createRequestDispatcher(req,node.getClass(),node,next); if(disp==null) { // check JSP views disp = createRequestDispatcher(req,node.getClass(),node,next+".jsp"); if(disp==null) return false; } req.tokens.next(); if(traceable()) trace(req,rsp,"Invoking "+next+".jsp"+" on "+node+" for "+req.tokens); stapler.forward(disp,req,rsp); return true; } public String toString() {
public boolean doDispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException, IllegalAccessException, InvocationTargetException { String token = req.tokens.next(); if(traceable()) traceEval(req,rsp,node,f.getName()+"(\""+token+"\")"); req.getStapler().invoke(req,rsp, f.invoke(req,node,token)); return true; } public String toString() {
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { // check Jelly view String next = req.tokens.peek(); if(next==null) return false; // only match the end of the URL if (req.tokens.countRemainingTokens()>1) return false; // and avoid serving both "foo" and "foo/" as relative URL semantics are drastically different if (req.getRequestURI().endsWith("/")) return false; URL res = findResource(owner.klass,next); if(res==null) return false; // no Jelly script found req.tokens.next(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s: Static view: %s", next); if (traceable()) { // Null not expected here trace(req,rsp,"-> %s on <%s>", next, node); } rsp.serveFile(req, res); return true; }
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { // check Jelly view String next = req.tokens.peek(); if(next==null) return false; // only match the end of the URL if (req.tokens.countRemainingTokens()>1) return false; // and avoid serving both "foo" and "foo/" as relative URL semantics are drastically different if (req.getRequestURI().endsWith("/")) return false; URL res = findResource(owner.klass,next); if(res==null) return false; // no Jelly script found req.tokens.next(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s: Static view: %s", next); if (traceable()) { // Null not expected here trace(req,rsp,"-> %s on <%s>", next, node); } rsp.serveFile(req, res); return true; }
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { if(!req.tokens.hasMore()) return false; try { String key = req.tokens.peek(); if(traceable()) traceEval(req,rsp,"((Map)",").get(\""+key+"\")"); Object item = ((Map)node).get(key); if(item!=null) { req.tokens.next(); req.getStapler().invoke(req,rsp,item); return true; } else { // otherwise just fall through if(traceable()) trace(req,rsp,"Map.get(\""+key+"\")==null. Back tracking."); return false; } } catch (NumberFormatException e) { return false; // try next } } public String toString() {
public boolean doDispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException, IllegalAccessException, InvocationTargetException { if(isAccepted){ String token = req.tokens.next(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s#%s(String)", ff.getName()); if(traceable()) traceEval(req,rsp,node,ff.getName()+"(\""+token+"\")"); req.getStapler().invoke(req,rsp, ff.invoke(req, rsp, node,token)); return true; }else{ String token = req.tokens.next(); try{ return webApp.getFilteredGetterTriggerListener().onGetterTrigger(f, req, rsp, node, ff.getName()+"(\""+token+"\")"); } finally{ req.tokens.prev(); } } } public String toString() {
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { // check Jelly view String next = req.tokens.peek(); if(next==null) return false; // only match the end of the URL if (req.tokens.countRemainingTokens()>1) return false; try { Script script = tearOff.findScript(next+".jelly"); if(script==null) return false; // no Jelly script found req.tokens.next(); if (traceable()) { // Null not expected here String src = next+".jelly"; if (script instanceof JellyViewScript) { JellyViewScript jvs = (JellyViewScript) script; src = jvs.getName(); } trace(req,rsp,"-> %s on <%s>", src, node); } scriptInvoker.invokeScript(req, rsp, script, node); return true; } catch (RuntimeException e) { throw e; } catch (IOException e) { throw e; } catch (Exception e) { throw new ServletException(e); } }
public boolean doDispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException, IllegalAccessException, InvocationTargetException { String token = req.tokens.next(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s#%s(String)", ff.getName()); if(traceable()) traceEval(req,rsp,node,ff.getName()+"(\""+token+"\")"); req.getStapler().invoke(req,rsp, ff.invoke(req, rsp, node,token)); return true; } public String toString() {
req.tokens.next();
return false; // no Groovy script found req.tokens.next();
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IllegalAccessException, InvocationTargetException, IOException, ServletException { if(!req.tokens.hasMore()) return false; String token = req.tokens.next(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s#getDynamic(...)"); if(traceable()) traceEval(req,rsp,node,"getDynamic(\""+token+"\",...)"); Object target = ff.bindAndInvoke(node, req,rsp, token); if(target!=null) { req.getStapler().invoke(req,rsp, target); return true; } else { if(traceable()) // indent: "-> evaluate( trace(req,rsp," %s.getDynamic(\"%s\",...)==null. Back tracking.",node,token); req.tokens.prev(); // cancel the next effect return false; } } public String toString() {
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IllegalAccessException, InvocationTargetException, IOException, ServletException { if(!req.tokens.hasMore()) return false; String token = req.tokens.next(); if(traceable()) traceEval(req,rsp,node,"getDynamic(\""+token+"\",...)"); Object target = f.bindAndInvoke(node, req,rsp, token); if(target!=null) { req.getStapler().invoke(req,rsp, target); return true; } else { if(traceable()) // indent: "-> evaluate( trace(req,rsp," %s.getDynamic(\"%s\",...)==null. Back tracking.",node,token); req.tokens.prev(); // cancel the next effect return false; } } public String toString() {
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IllegalAccessException, InvocationTargetException, IOException, ServletException { if(!req.tokens.hasMore()) return false; String token = req.tokens.next(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s#getDynamic(...)"); if(traceable()) traceEval(req,rsp,node,"getDynamic(\""+token+"\",...)"); Object target = ff.bindAndInvoke(node, req,rsp, token); if(target!=null) { req.getStapler().invoke(req,rsp, target); return true; } else { if(traceable()) // indent: "-> evaluate( trace(req,rsp," %s.getDynamic(\"%s\",...)==null. Back tracking.",node,token); req.tokens.prev(); // cancel the next effect return false; } } public String toString() {
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { if(!req.tokens.hasMore()) return false; try { String key = req.tokens.peek(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s: Map access"); if(traceable()) traceEval(req,rsp,"",".get(\""+key+"\")"); Object item = klass.getMapElement(node,key); if(item!=null) { req.tokens.next(); req.getStapler().invoke(req,rsp,item); return true; } else { // otherwise just fall through if(traceable()) trace(req,rsp,"Map.get(\""+key+"\")==null. Back tracking."); return false; } } catch (NumberFormatException e) { return false; // try next } } public String toString() {
public boolean dispatch(RequestImpl req, ResponseImpl rsp, Object node) throws IOException, ServletException { if(!req.tokens.hasMore()) return false; try { String key = req.tokens.peek(); Dispatcher.anonymizedTraceEval(req, rsp, node, "%s: Map access"); if(traceable()) traceEval(req,rsp,"",".get(\""+key+"\")"); Object item = klass.getMapElement(node,key); if(item!=null) { req.tokens.next(); req.getStapler().invoke(req,rsp,item); return true; } else { // otherwise just fall through if(traceable()) trace(req,rsp,"Map.get(\""+key+"\")==null. Back tracking."); return false; } } catch (NumberFormatException e) { return false; // try next } } public String toString() {