1 25 package org.apache.taglibs.standard.tag.common.xml; 26 27 import javax.xml.xpath.XPathVariableResolver ; 28 import javax.xml.namespace.QName ; 29 30 import javax.servlet.http.Cookie ; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.jsp.PageContext ; 33 34 35 39 public class JSTLXPathVariableResolver implements XPathVariableResolver { 40 41 44 private PageContext pageContext; 45 46 private static final String PAGE_NS_URL = 48 "http://java.sun.com/jstl/xpath/page"; 49 private static final String REQUEST_NS_URL = 50 "http://java.sun.com/jstl/xpath/request"; 51 private static final String SESSION_NS_URL = 52 "http://java.sun.com/jstl/xpath/session"; 53 private static final String APP_NS_URL = 54 "http://java.sun.com/jstl/xpath/app"; 55 private static final String PARAM_NS_URL = 56 "http://java.sun.com/jstl/xpath/param"; 57 private static final String INITPARAM_NS_URL = 58 "http://java.sun.com/jstl/xpath/initParam"; 59 private static final String COOKIE_NS_URL = 60 "http://java.sun.com/jstl/xpath/cookie"; 61 private static final String HEADER_NS_URL = 62 "http://java.sun.com/jstl/xpath/header"; 63 64 67 public JSTLXPathVariableResolver(PageContext pc) { 68 pageContext = pc; 69 } 70 71 80 public Object resolveVariable(QName qname) throws NullPointerException { 81 82 Object varObject = null; 83 84 if (qname == null) { 85 throw new NullPointerException ("Cannot resolve null variable"); 86 } 87 88 String namespace = qname.getNamespaceURI(); 89 String prefix = qname.getPrefix(); 90 String localName = qname.getLocalPart(); 91 93 try { 94 varObject = getVariableValue(namespace, prefix, localName); 95 } catch (UnresolvableException ue) { 96 System.out.println("JSTLXpathVariableResolver.resolveVariable threw UnresolvableException: " + ue); 97 } 98 99 return varObject; 101 } 102 103 107 protected Object getVariableValue(String namespace, 108 String prefix, 109 String localName) 110 throws UnresolvableException { 111 if (namespace == null || namespace.equals("")) { 116 return notNull( 117 pageContext.findAttribute(localName), 118 namespace, 119 localName); 120 } else if (namespace.equals(PAGE_NS_URL)) { 121 return notNull( 122 pageContext.getAttribute(localName,PageContext.PAGE_SCOPE), 123 namespace, 124 localName); 125 } else if (namespace.equals(REQUEST_NS_URL)) { 126 return notNull( 127 pageContext.getAttribute(localName, 128 PageContext.REQUEST_SCOPE), 129 namespace, 130 localName); 131 } else if (namespace.equals(SESSION_NS_URL)) { 132 return notNull( 133 pageContext.getAttribute(localName, 134 PageContext.SESSION_SCOPE), 135 namespace, 136 localName); 137 } else if (namespace.equals(APP_NS_URL)) { 138 return notNull( 139 pageContext.getAttribute(localName, 140 PageContext.APPLICATION_SCOPE), 141 namespace, 142 localName); 143 } else if (namespace.equals(PARAM_NS_URL)) { 144 return notNull( 145 pageContext.getRequest().getParameter(localName), 146 namespace, 147 localName); 148 } else if (namespace.equals(INITPARAM_NS_URL)) { 149 return notNull( 150 pageContext.getServletContext(). 151 getInitParameter(localName), 152 namespace, 153 localName); 154 } else if (namespace.equals(HEADER_NS_URL)) { 155 HttpServletRequest hsr = 156 (HttpServletRequest ) pageContext.getRequest(); 157 return notNull( 158 hsr.getHeader(localName), 159 namespace, 160 localName); 161 } else if (namespace.equals(COOKIE_NS_URL)) { 162 HttpServletRequest hsr = 163 (HttpServletRequest ) pageContext.getRequest(); 164 Cookie [] c = hsr.getCookies(); 165 for (int i = 0; i < c.length; i++) 166 if (c[i].getName().equals(localName)) 167 return c[i].getValue(); 168 throw new UnresolvableException("$" + namespace + ":" + localName); 169 } else { 170 throw new UnresolvableException("$" + namespace + ":" + localName); 171 } 172 } 173 174 178 private Object notNull(Object o, String namespace, String localName) 179 throws UnresolvableException { 180 if (o == null) { 181 throw new UnresolvableException("$" + (namespace==null?"":namespace+":") + localName); 182 } 183 return o; 185 } 186 187 190 private static void p(String s) { 191 System.out.println("[JSTLXPathVariableResolver] " + s); 192 } 193 194 } 195 | Popular Tags |