Operation dispatch(Request req, Service serviceDescriptor) throws Throwable { if (req.getRequest() == null) { String msg = "Could not determine geoserver request from http request " + req.getHttpRequest(); throw new ServiceException(msg, "MissingParameterValue", "request"); if (!exists && req.getKvp().get("request") != null) { req.setRequest(normalize(KvpUtils.getSingleValue(req.getKvp(), "request"))); exists = operationExists(req, serviceDescriptor); Method operation = OwsUtils.method(serviceBean.getClass(), req.getRequest()); throw new ServiceException(msg, "OperationNotSupported", req.getRequest()); parameters[i] = req.getHttpRequest(); } else if (parameterType.isAssignableFrom(HttpServletResponse.class)) { parameters[i] = req.getHttpResponse(); parameters[i] = req.getHttpRequest().getInputStream(); } else if (parameterType.isAssignableFrom(OutputStream.class)) { parameters[i] = req.getHttpResponse().getOutputStream(); } else { if (req.getKvp() != null && req.getKvp().size() > 0) { if (req.getInput() != null) { requestBean = parseRequestXML(requestBean, req.getInput(), req); xmlParsed = true;
public void testParseXML() throws Exception { URL url = getClass().getResource("applicationContext.xml"); FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(url.toString()); Dispatcher dispatcher = (Dispatcher) context.getBean("dispatcher"); String body = "<Hello service=\"hello\" message=\"Hello world!\"/>"; File file = File.createTempFile("geoserver", "req"); try { FileOutputStream output = new FileOutputStream(file); output.write(body.getBytes()); output.flush(); output.close(); BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(file))); input.mark(8192); Request req = new Request(); req.setInput(input); Object object = dispatcher.parseRequestXML(null, input, req); assertEquals(new Message("Hello world!"), object); } finally { file.delete(); } }
Object parseRequestKVP(Class type, Request request) throws Exception { KvpRequestReader kvpReader = findKvpRequestReader(type); if (kvpReader != null) { // check for http request awareness if (kvpReader instanceof HttpServletRequestAware) { ((HttpServletRequestAware) kvpReader).setHttpRequest(request.getHttpRequest()); } Object requestBean = kvpReader.createRequest(); if (requestBean != null) { requestBean = kvpReader.read(requestBean, request.getKvp(), request.getRawKvp()); } return requestBean; } return null; }
public String toString() { return getService() + " " + getVersion() + " " + getRequest(); }
private boolean shouldApplyFilter() { Request request = Dispatcher.REQUEST.get(); // for the moment, match any recognized OGC request return request != null && request.getService() != null && request.getRequest() != null; }
void preParseKVP(Request req) throws ServiceException { HttpServletRequest request = req.getHttpRequest(); // unparsed kvp set Map kvp = request.getParameterMap(); if (kvp == null || kvp.isEmpty()) { req.setKvp(new HashMap()); // req.kvp = null; return; } // track parsed kvp and unparsd Map parsedKvp = KvpUtils.normalize(kvp); Map rawKvp = new KvpMap(parsedKvp); req.setKvp(parsedKvp); req.setRawKvp(rawKvp); }
if (req.getKvp() != null) { req.setService(normalize(KvpUtils.getSingleValue(req.getKvp(), "service"))); req.setVersion( normalizeVersion(normalize(KvpUtils.getSingleValue(req.getKvp(), "version")))); req.setRequest(normalize(KvpUtils.getSingleValue(req.getKvp(), "request"))); req.setOutputFormat(normalize(KvpUtils.getSingleValue(req.getKvp(), "outputFormat"))); if (req.getInput() != null && "POST".equalsIgnoreCase(req.getHttpRequest().getMethod())) { Map xml = readOpPost(req.getInput()); if (xml.get("service") != null) { req.setService(normalize((String) xml.get("service"))); req.setVersion(normalizeVersion(normalize((String) xml.get("version")))); req.setRequest(normalize((String) xml.get("request"))); req.setOutputFormat(normalize((String) xml.get("outputFormat"))); req.setNamespace(normalize((String) xml.get("namespace"))); String service = req.getService(); if ((service == null) || (req.getRequest() == null)) { Map map = readOpContext(req); req.setService(service); if (req.getRequest() == null) {
Request request = new Request(); request.setService("WMS"); request.setRequest("GetCapabilities"); Dispatcher.REQUEST.set(request); assertNull(catalog.getLayerByName(getLayerId(SystemTestData.BASIC_POLYGONS)));
@Override public Request init(Request request) { String context = request.getContext(); if (context == null || !isGwcServiceTargeted(context)) { return null; GWC_OPERATION.set((String) request.getKvp().get("REQUEST")); if (localWorkspace != null) { String layerName = (String) request.getKvp().get("LAYER"); if (layerName == null) { layerName = (String) request.getKvp().get("layer"); request.setHttpRequest( new VirtualServiceRequest( request.getHttpRequest(), localWorkspace.getName(), localPublishedName, layerName)); } else if (localPublished != null) { request.setHttpRequest( new VirtualServiceRequest( request.getHttpRequest(), localPublished.getName(), null, null)); request.setKvp(kvp); request.setRawKvp(kvp);
@Override public Service serviceDispatched(Request request, Service service) throws ServiceException { final Map kvp = request.getKvp(); final Map rawKvp = request.getRawKvp(); if ("oseo".equalsIgnoreCase(request.getService())) { if (kvp.isEmpty()) { if ("description".equals(request.getRequest())) { kvp.put("service", "oseo"); request.setRawKvp(kvp); } else if ("search".equals(request.getRequest())) { kvp.put("service", "oseo"); kvp.put("httpAccept", AtomSearchResponse.MIME); request.setRawKvp(kvp); } else { for (String key : new HashSet<String>(request.getRawKvp().keySet())) { Object value = rawKvp.get(key); if ((!(value instanceof String) || StringUtils.isEmpty((String) value))
HttpServletRequest owsRequest = Dispatcher.REQUEST.get().getHttpRequest(); Arrays.asList(Headers.values()) .forEach(
/** * Returns an eventual filter included among the parsed kvp map of the current request. Will * work for CQL_FILTER, FILTER and FEATURE_ID */ public static Filter getRequestFilter() { Request request = Dispatcher.REQUEST.get(); if (request == null) { return null; } Object filter = request.getKvp().get("FILTER"); if (!(filter instanceof Filter)) { filter = request.getKvp().get("CQL_FILTER"); if (filter instanceof List) { List list = (List) filter; if (list.size() > 0) { filter = list.get(0); } } } if (!(filter instanceof Filter)) { filter = request.getKvp().get("FEATURE_ID"); } if (filter instanceof Filter) { return (Filter) filter; } else { return null; } }
@Override public Operation operationDispatched(Request request, Operation operation) { String version = request.getVersion(); String method = request.getRequest(); long timeout = getTimeoutMilliseconds(operation); if ("WFS".equalsIgnoreCase(request.getService()) && (version == null || V_20.compareTo(new Version(version)) <= 0) && method != null && (method.equalsIgnoreCase("GetFeature") || method.equalsIgnoreCase("GetFeatureWithLock") || method.equalsIgnoreCase("GetPropertyValue")) && timeout > 0 && operation.getParameters().length > 0 && operation.getParameters()[0] instanceof BaseRequestType) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine("Starting to track NSG timeout on this request"); } // start tracking time TimeoutVerifier timeoutVerifier = new TimeoutVerifier((BaseRequestType) operation.getParameters()[0], timeout); // need to wrap the http response and its output stream request.setHttpResponse( new TimeoutCancellingResponse(request.getHttpResponse(), timeoutVerifier)); // set in the thread local for later use TIMEOUT_VERIFIER.set(timeoutVerifier); } return operation; }
if (useServiceVersion && request.getServiceDescriptor() != null) { version = request.getServiceDescriptor().getVersion().toString(); Ows11Util.exceptionReport(exception, verboseExceptions, version); HttpServletResponse response = request.getHttpResponse(); if (!request.isSOAP()) { encoder.setIndentSize(2); encoder.setLineWidth(60); encoder.setOmitXMLDeclaration(request.isSOAP()); buildSchemaURL(baseURL(request.getHttpRequest()), "ows/1.1.0/owsAll.xsd"); encoder.setSchemaLocation(OWS.NAMESPACE, schemaLocation);
@Override public void mangleURL( StringBuilder baseURL, StringBuilder path, Map<String, String> kvp, URLType type) { Request request = Dispatcher.REQUEST.get(); if (request == null || !"GetCapabilities".equalsIgnoreCase(request.getRequest())) { return; } forwardOriginalUri(request, path); Map requestRawKvp = request.getRawKvp(); if (request.getHttpRequest() instanceof RequestWrapper) { RequestWrapper requestWrapper = (RequestWrapper) request.getHttpRequest(); Map parameters = requestWrapper.getOriginalParameters(); requestRawKvp = new KvpMap(KvpUtils.normalize(parameters)); } forwardParameters(requestRawKvp, kvp); }
Request init(Request request) throws ServiceException, IOException { HttpServletRequest httpRequest = request.getHttpRequest(); request.setGet("GET".equalsIgnoreCase(httpRequest.getMethod()) || isForm(reqContentType)); if (!request.isGet()) { // && httpRequest.getInputStream().available() > 0) { request.setSOAP(true); request.setInput(soapReader(httpRequest, request)); } else if (reqContentType != null && ServletFileUpload.isMultipartContent(httpRequest)) { kvpFileItems.put(item.getFieldName(), item); } else { request.setInput(fileItemReader(item)); if (request.getInput() == null) { FileItem body = kvpFileItems.get("body"); if (body != null) { request.setInput(fileItemReader(body)); kvpFileItems.remove("body"); request.setOrAppendKvp(parseKVP(request, kvpFileItems)); } else { request.setInput(reader(httpRequest)); int read = request.getInput().read(req, 0, xmlPostRequestLogBufferSize); request.setInput(null);
report.getException().add(e); if (!request.isSOAP()) { request.getHttpResponse().setContentType("application/xml"); encoder.setIndentSize(2); encoder.setLineWidth(60); encoder.setOmitXMLDeclaration(request.isSOAP()); baseURL(request.getHttpRequest()), "ows/1.0.0/owsExceptionReport.xsd"); encoder.setSchemaLocation(org.geoserver.ows.xml.v1_0.OWS.NAMESPACE, schemaLocation); report, org.geoserver.ows.xml.v1_0.OWS.EXCEPTIONREPORT, request.getHttpResponse().getOutputStream()); } catch (Exception ex) { } finally { try { request.getHttpResponse().getOutputStream().flush(); } catch (IOException ioe) {
((HttpServletRequestAware) xmlReader).setHttpRequest(request.getHttpRequest()); return xmlReader.read(requestBean, input, request.getKvp());
/** * Simulates what the Dispatcher is doing when parsing a KVP request * * @param href * @param reader */ protected Object kvpParse(String href, KvpRequestReader reader) throws Exception { Map original = new KvpMap(KvpUtils.parseQueryString(href)); KvpUtils.normalize(original); Map parsed = new KvpMap(original); List<Throwable> errors = KvpUtils.parse(parsed); if (errors.size() > 0) { throw new WPSException("Failed to parse KVP request", errors.get(0)); } // hack to allow wcs filters to work... we should really upgrade the WCS models instead... Request r = Dispatcher.REQUEST.get(); if (r != null) { Map kvp = new HashMap(r.getKvp()); r.setKvp(new CaseInsensitiveMap(parsed)); } return reader.read(reader.createRequest(), parsed, original); }