📄 kvprequestreader.java
字号:
LOGGER.finest("putting filter value " + filterVal);
}
kvps.put("FILTER", filterVal);
} else if (kvpPair.toUpperCase().startsWith("SLD_BODY")) {
String sldBodyVal = kvpPair.substring(9);
kvps.put("SLD_BODY", sldBodyVal);
} else {
// handles all other standard cases by looking for the correct
// delimeter and then sticking the KVPs into the hash table
StringTokenizer requestValues = new StringTokenizer(kvpPair, VALUE_DELIMITER);
// make sure that there is a key token
if (requestValues.hasMoreTokens()) {
// assign key as uppercase to eliminate case conflict
key = requestValues.nextToken().toUpperCase();
// make sure that there is a value token
if (requestValues.hasMoreTokens()) {
// assign value and store in hash with key
value = requestValues.nextToken();
LOGGER.finest("putting kvp pair: " + key + ": " + value);
kvps.put(key, value);
} else {
kvps.put(key, "");
}
}
}
}
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine("returning parsed " + kvps);
}
return kvps;
}
/**
* Cleans an HTTP string and returns pure ASCII as a string.
*
* @param raw
* The HTTP-encoded string.
*
* @return The string with the url escape characters replaced.
*/
private static String clean(String raw) {
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("raw request: " + raw);
}
String clean = null;
if (raw != null) {
try {
clean = java.net.URLDecoder.decode(raw, "UTF-8");
} catch (java.io.UnsupportedEncodingException e) {
if (LOGGER.isLoggable(Level.FINER)) {
LOGGER.finer("Bad encoding for decoder " + e);
}
}
} else {
return "";
}
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("cleaned request: " + raw);
}
return clean;
}
/**
* Returns the service handling request.
*/
public AbstractService getServiceRef() {
return service;
}
/**
* sets the service handling request.
*/
public void setServiceRef(AbstractService service) {
this.service = service;
}
/**
* parses the BBOX parameter, wich must be a String of the form
* <code>minx,miny,maxx,maxy</code> and returns a corresponding
* <code>Envelope</code> object
* @param bboxParam TODO
*
* @return the <code>Envelope</code> represented by the request BBOX
* parameter
*
* @throws WmsException if the value of the BBOX request parameter can't be
* parsed as four <code>double</code>'s
*/
protected Envelope parseBbox(String bboxParam) throws ServiceException {
Envelope bbox = null;
Object[] bboxValues = readFlat(bboxParam, INNER_DELIMETER).toArray();
if (bboxValues.length != 4) {
throw new ServiceException(bboxParam + " is not a valid pair of coordinates",
getClass().getName());
}
try {
double minx = Double.parseDouble(bboxValues[0].toString());
double miny = Double.parseDouble(bboxValues[1].toString());
double maxx = Double.parseDouble(bboxValues[2].toString());
double maxy = Double.parseDouble(bboxValues[3].toString());
bbox = new Envelope(minx, maxx, miny, maxy);
if (minx > maxx) {
throw new ServiceException("illegal bbox, minX: " + minx + " is "
+ "greater than maxX: " + maxx);
}
if (miny > maxy) {
throw new ServiceException("illegal bbox, minY: " + miny + " is "
+ "greater than maxY: " + maxy);
}
} catch (NumberFormatException ex) {
throw new ServiceException(ex, "Illegal value for BBOX parameter: " + bboxParam,
getClass().getName() + "::parseBbox()");
}
return bbox;
}
/**
* Parses an OGC filter
* @param filter
* @return
* @throws ServiceException
*
*
*/
protected List readOGCFilter(String filter) throws ServiceException {
List filters = new ArrayList();
List unparsed;
ListIterator i;
LOGGER.finest("reading filter: " + filter);
unparsed = readFlat(filter, OUTER_DELIMETER);
i = unparsed.listIterator();
while (i.hasNext()) {
String next = (String) i.next();
if (next.trim().equals("")) {
filters.add(Filter.INCLUDE);
} else {
filters.add(parseXMLFilter(new StringReader(next)));
}
}
return filters;
}
/**
* Parses a CQL filter
* @param filter
* @return
* @throws ServiceException
*
* @deprecated use {@link CQLFilterKvpParser}
*/
protected List readCQLFilter(String filter) throws ServiceException {
try {
return CQL.toFilterList(filter);
} catch (CQLException pe) {
throw new ServiceException("Could not parse CQL filter list." + pe.getMessage(), pe);
}
}
/**
* Parses fid filters
* @param fid
* @return
*/
protected List readFidFilters(String fid) {
List filters = new ArrayList();
List unparsed;
ListIterator i;
LOGGER.finest("reading fid filter: " + fid);
unparsed = readNested(fid);
i = unparsed.listIterator();
while (i.hasNext()) {
List ids = (List) i.next();
ListIterator innerIterator = ids.listIterator();
while (innerIterator.hasNext()) {
HashSet set = new HashSet();
set.add(factory.featureId((String) innerIterator.next()));
Id fidFilter = factory.id(set);
filters.add(fidFilter);
LOGGER.finest("added fid filter: " + fidFilter);
}
}
return filters;
}
/**
* Reads the Filter XML request into a geotools Feature object.
*
* @param rawRequest The plain POST text from the client.
*
* @return The geotools filter constructed from rawRequest.
*
* @throws WfsException For any problems reading the request.
*
* @deprecated use {@link FilterKvpParser}
*/
protected Filter parseXMLFilter(Reader rawRequest)
throws ServiceException {
// translate string into a proper SAX input source
InputSource requestSource = new InputSource(rawRequest);
// instantiante parsers and content handlers
FilterHandlerImpl contentHandler = new FilterHandlerImpl();
FilterFilter filterParser = new FilterFilter(contentHandler, null);
GMLFilterGeometry geometryFilter = new GMLFilterGeometry(filterParser);
GMLFilterDocument documentFilter = new GMLFilterDocument(geometryFilter);
// read in XML file and parse to content handler
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
ParserAdapter adapter = new ParserAdapter(parser.getParser());
adapter.setContentHandler(documentFilter);
adapter.parse(requestSource);
LOGGER.fine("just parsed: " + requestSource);
} catch (SAXException e) {
throw new ServiceException(e, "XML getFeature request SAX parsing error",
XmlRequestReader.class.getName());
} catch (IOException e) {
throw new ServiceException(e, "XML get feature request input error",
XmlRequestReader.class.getName());
} catch (ParserConfigurationException e) {
throw new ServiceException(e, "Some sort of issue creating parser",
XmlRequestReader.class.getName());
}
LOGGER.fine("passing filter: " + contentHandler.getFilter());
return contentHandler.getFilter();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -