/** * Handles the getCapabilities request and gives the XML formated server capabilities to the * outputStream * * @param output servlet outputStream * @param wmsResponse HttpServletResponse modified for WMS use * @throws WMSException * @throws UnsupportedEncodingException */ public void getCap(OutputStream output, WMSResponse wmsResponse) throws WMSException, UnsupportedEncodingException { PrintStream pr = new PrintStream(output, false, "UTF-8"); WMSCapabilities cap = new WMSCapabilities(); // Setting service WMS metadata cap.setService(getService()); // Setting Capability parameters // Setting Layers capabilities Capability c = new Capability(); // Bounding box of the highest layer is dummy Envelope dummy = new Envelope(WEST, EAST, SOUTH, NORTH); EXGeographicBoundingBox bb = getGeographicBoundingBox(dummy, "EPSG:4326"); Layer availableLayers = new Layer(); availableLayers.setEXGeographicBoundingBox(bb); BoundingBox bBox = new BoundingBox(); bBox.setCRS("EPSG:4326"); bBox.setMaxx(EAST); bBox.setMinx(WEST); bBox.setMaxy(NORTH); bBox.setMiny(SOUTH); availableLayers.getBoundingBox().add(bBox); for (Layer e : layerMap.values()) { availableLayers.getLayer().add(e); } // Server supported CRS availableLayers.getCRS().addAll(authCRS); availableLayers.setName("Available_layers"); availableLayers.setTitle("Server available layers"); c.setLayer(availableLayers); // Setting the request capabilities // GetMap capabilities Request req = new Request(); req.setGetMap(getMapOperation(wmsResponse)); // GetCap capabilities req.setGetCapabilities(getCapOperation(wmsResponse)); // GetFeatureInfo capabilities req.setGetFeatureInfo(getFeatureOperation(wmsResponse)); c.setRequest(req); cap.setCapability(c); try { // Marshalling the WMS Capabilities into an XML response Marshaller marshaller = jaxbContext.createMarshaller(); NamespacePrefixMapper mapper = new NamespaceMapper(); marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); wmsResponse.setContentType("text/xml;charset=UTF-8"); marshaller.marshal(cap, pr); } catch (JAXBException ex) { wmsResponse.setContentType("text/xml;charset=UTF-8"); wmsResponse.setResponseCode(500); pr.append( "<?xml version='1.0' encoding=\"UTF-8\"?><ServiceExceptionReport xmlns=\"http://www.opengis.net/ogc\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"1.3.0\" xsi:schemaLocation=\"http://www.opengis.net/ogc http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd\"><ServiceException>Something went wrong</ServiceException></ServiceExceptionReport>"); pr.append(ex.toString()); ex.printStackTrace(pr); } }
private OnlineResource buildOnlineResource(WMSResponse wmsResponse, String key, String title) { OnlineResource oRGet = new OnlineResource(); String map = (String) properties.getProperty(key); if (map == null) { oRGet.setHref(wmsResponse.getRequestUrl()); } else { oRGet.setHref(map); } oRGet.setTitle(title); return oRGet; }