View Javadoc

1   package org.codehaus.xfire.transport.http;
2   
3   import java.io.OutputStream;
4   import java.util.Collection;
5   import java.util.Iterator;
6   
7   import javax.xml.stream.XMLOutputFactory;
8   import javax.xml.stream.XMLStreamException;
9   import javax.xml.stream.XMLStreamWriter;
10  
11  import org.codehaus.xfire.service.Service;
12  
13  /***
14   * Provides a basic HTML description of a {@link Service}.
15   *
16   * @author <a href="poutsma@mac.com">Arjen Poutsma</a>
17   */
18  public class HtmlServiceWriter
19  {
20      private static final String XHTML_STRICT_DTD = "<!DOCTYPE html " +
21              "PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" " +
22              "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">";
23  
24      /***
25       * Writes a HTML list of services to the given stream. Each service is described with its name.
26       *
27       * @param out      the stream to write to
28       * @param services the services
29       * @throws XMLStreamException if an XML writing exception occurs
30       */
31      public void write(OutputStream out, Collection services)
32              throws XMLStreamException
33      {
34          XMLOutputFactory factory = XMLOutputFactory.newInstance();
35          XMLStreamWriter writer = factory.createXMLStreamWriter(out);
36  
37          writer.writeStartDocument();
38          writePreamble(writer, "XFire Services");
39  
40          writer.writeStartElement("body");
41          writer.writeStartElement("p");
42          writer.writeCharacters("No such service");
43          writer.writeEndElement(); // p
44          if (!services.isEmpty())
45          {
46              writer.writeStartElement("p");
47              writer.writeCharacters("Services:");
48              writer.writeEndElement(); // p
49              writer.writeStartElement("ul");
50              for (Iterator iterator = services.iterator(); iterator.hasNext();)
51              {
52                  Service service = (Service) iterator.next();
53                  writer.writeStartElement("li");
54                  writer.writeCharacters(service.getName().toString());
55                  writer.writeEndElement(); // li
56              }
57          }
58  
59          writer.writeEndDocument();
60          writer.flush();
61      }
62  
63      /***
64       * Writes a HTML description of a service to the given stream.
65       *
66       * @param out     the stream to write to
67       * @param service the service
68       * @throws XMLStreamException if an XML writing exception occurs
69       */
70      public void write(OutputStream out, Service service)
71              throws XMLStreamException
72      {
73          XMLOutputFactory factory = XMLOutputFactory.newInstance();
74          XMLStreamWriter writer = factory.createXMLStreamWriter(out);
75  
76          writer.writeStartDocument();
77          String title = service.getName() + " Web Service";
78          writePreamble(writer, title);
79  
80          writer.writeStartElement("body");
81          writer.writeStartElement("h1");
82          writer.writeCharacters(title);
83          writer.writeEndElement(); // h1
84  
85          writer.writeEndDocument();
86          writer.flush();
87      }
88  
89      private void writePreamble(XMLStreamWriter writer, String title)
90              throws XMLStreamException
91      {
92          writer.writeDTD(XHTML_STRICT_DTD);
93          writer.writeStartElement("html");
94          writer.writeStartElement("head");
95          writer.writeStartElement("title");
96          writer.writeCharacters(title);
97          writer.writeEndElement(); // title
98          writer.writeEndElement(); // head
99      }
100 
101 
102 }