/** * The write class selects the encoding parameter considering the image format requested. Then, * the correct writer will encode the img given by the render into the servlet output stream * * @param wmsResponse The object used later to build the HTTP response. * @param output The output stream * @param format desired image format * @param img The output image. * @param pixelSize be provided by the server * @throws IOException If a problem has been encountered while handling the output stream. */ public static void write( WMSResponse wmsResponse, OutputStream output, String format, BufferedImage img, double pixelSize) throws IOException { if (format.equalsIgnoreCase(ImageFormats.JPEG.toString())) { writeJPEG(wmsResponse, output, img); wmsResponse.setResponseCode(200); LOGGER.debug("JPEG written to the output stream."); } else if (format.equalsIgnoreCase(ImageFormats.PNG.toString())) { writePNG(wmsResponse, output, img, pixelSize); wmsResponse.setResponseCode(200); LOGGER.debug("PNG written to the output stream."); } else if (format.equalsIgnoreCase(ImageFormats.TIFF.toString())) { writeTIFF(wmsResponse, output, img, pixelSize); LOGGER.debug("TIFF written to the output stream."); wmsResponse.setResponseCode(200); } else { WMS.exceptionDescription( wmsResponse, output, "The format requested is invalid. " + "Please check the server capabilities to ask for a supported format."); } }
/** * 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); } }