Package org.faceless.graph2.tag
Interface RequestHandler
-
public interface RequestHandler
A RequestHandler is used to process a request delivererd to the GraphServlet. These requests take the form of an InputSource (read from the servlet request), and are converted to a Graph by the process method.Handlers are supplied to handle SOAP requests and raw XML. They are added to the tag library in the same way as
EmbedderFactory
, except the service file isMETA-INF/services/org.faceless.graph2.tag.RequestHandlers
- Since:
- 2.4
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description boolean
matches(String type)
Return true if this RequestHandler matches the specified type of request.void
process(String type, String imagepath, GraphContext context, InputSource source, HttpServletRequest req, HttpServletResponse res)
Process the input and convert it to a Graph.
-
-
-
Method Detail
-
matches
boolean matches(String type)
Return true if this RequestHandler matches the specified type of request. For instance, requestingservlet/GraphServlet/myhandler
will match this RequestHandler if this method returns"myhandler".equals(type)
-
process
void process(String type, String imagepath, GraphContext context, InputSource source, HttpServletRequest req, HttpServletResponse res) throws IOException, SAXException
Process the input and convert it to a Graph. The Input (normally XML) should be parsed and converted to a Graph using theEmbeddedXMLGraph
class and an appropriateEmbedder
. The generated Graph can be returned immediately, or it can be stored in theGraphContext
and a link returned to it for later retrieval.Here's a simple example showing how to return a graph directly from this request
EmbeddedXMLGraph xml = new EmbeddedXMLGraph(); xml.parse(source); String format = xml.getRequestedFormat(); Embedder embedder = context.getEmbedderFactory(format).newEmbedder(format); ByteArrayOutputStream bout = new ByteArrayOutputStream(); xml.doEmbed(embedder, graphid, "", null, new StringWriter(), bout); bout.close(); res.setContentType(embedder.getMIMEType()); res.setContentLength(bout.size()); bout.writeTo(res.getOutputStream());
and here's an example showing how to store a generated image for later retrieval. Note that we append the pageid (as returned fromGraphContext.nextPageId()
) and a slash to the image path.EmbeddedXMLGraph xml = new EmbeddedXMLGraph(); xml.parse(source); String format = xml.getRequestedFormat(); Embedder embedder = context.getEmbedderFactory(format).newEmbedder(format); String pageid = context.nextPageId(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); res.setContentType("text/html; charset="UTF-8"); imagepath += pageid + "/"; xml.doEmbed(embedder, "anything", imagepath, null, res.getWriter(), bout); bout.close(); context.putFile(pageid, embedder.getId(), bout.toByteArray(), embedder.getMIMEType());
- Parameters:
type
- the type, as matched by thematches(java.lang.String)
methodimagepath
- the base URL of the Servlet that will be returning any files generated by this method.context
- the GraphContext object, which may be used to store any generated filessource
- the InputSource containing the inputreq
- the HttpServletRequest, available if any additional information needs to be readres
- the HttpServletResponse, which must be written to to return the necessary data to the browser- Throws:
IOException
SAXException
-
-