View Javadoc

1   package org.codehaus.xfire.aegis.type.basic;
2   
3   import javax.xml.parsers.DocumentBuilder;
4   import javax.xml.parsers.DocumentBuilderFactory;
5   import javax.xml.parsers.ParserConfigurationException;
6   import javax.xml.stream.XMLStreamException;
7   
8   import org.codehaus.xfire.MessageContext;
9   import org.codehaus.xfire.XFireRuntimeException;
10  import org.codehaus.xfire.aegis.MessageReader;
11  import org.codehaus.xfire.aegis.MessageWriter;
12  import org.codehaus.xfire.aegis.stax.ElementReader;
13  import org.codehaus.xfire.aegis.stax.ElementWriter;
14  import org.codehaus.xfire.aegis.type.Type;
15  import org.codehaus.xfire.fault.XFireFault;
16  import org.codehaus.xfire.util.STAXUtils;
17  import org.w3c.dom.Document;
18  
19  /***
20   * Reads and writes <code>org.w3c.dom.Document</code> types. 
21   * 
22   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
23   */
24  public class DocumentType
25      extends Type
26  {
27      private DocumentBuilder builder;
28      
29      public DocumentType()
30      {
31          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
32          try
33          {
34              builder = factory.newDocumentBuilder();
35          }
36          catch (ParserConfigurationException e)
37          {
38             throw new XFireRuntimeException("Couldn't load document builder.", e);
39          }
40      }
41      
42      public DocumentType(DocumentBuilder builder)
43      {
44          this.builder = builder;
45      }
46  
47      public Object readObject(MessageReader reader, MessageContext context)
48          throws XFireFault
49      {
50          try
51          {
52              return STAXUtils.read(builder, ((ElementReader) reader).getXMLStreamReader()) ;
53          }
54          catch (XMLStreamException e)
55          {
56              throw new XFireFault("Could not parse xml.", e, XFireFault.SENDER);
57          }
58      }
59  
60      public void writeObject(Object object, MessageWriter writer, MessageContext context)
61          throws XFireFault
62      {
63          Document doc = (Document) object;
64          
65          try
66          {
67              STAXUtils.writeElement(doc.getDocumentElement(), 
68                                     ((ElementWriter) writer).getXMLStreamWriter());
69          }
70          catch (XMLStreamException e)
71          {
72              throw new XFireFault("Could not write xml.", e, XFireFault.SENDER);
73          }
74      }
75  }