1
2
3
4
5
6
7
8 package org.dom4j.jaxb;
9
10 import java.io.File;
11 import java.io.FileOutputStream;
12 import java.io.IOException;
13 import java.io.OutputStream;
14 import java.io.Writer;
15
16 import javax.xml.bind.JAXBException;
17
18 import org.dom4j.Element;
19 import org.dom4j.io.OutputFormat;
20 import org.dom4j.io.XMLWriter;
21
22 import org.xml.sax.SAXException;
23
24 /***
25 * Writes {@link javax.xml.bind.Element}objects to an XML stream. {@link
26 * javax.xml.bind.Element} instances can be created using the ObjectFactory that
27 * is generated by the JAXB compiler.
28 *
29 * @author Wonne Keysers (Realsoftware.be)
30 *
31 * @see org.dom4j.io.XMLWriter
32 * @see javax.xml.bind.JAXBContext
33 */
34 public class JAXBWriter extends JAXBSupport {
35 private XMLWriter xmlWriter;
36
37 private OutputFormat outputFormat;
38
39 /***
40 * Creates a new JAXBWriter for the given JAXB context path. This is the
41 * Java package where JAXB can find the generated XML classes. This package
42 * MUST contain jaxb.properties!
43 *
44 * @param contextPath
45 * JAXB context path to be used
46 *
47 * @see javax.xml.bind.JAXBContext
48 */
49 public JAXBWriter(String contextPath) {
50 super(contextPath);
51 outputFormat = new OutputFormat();
52 }
53
54 /***
55 * Creates a new JAXBWriter for the given JAXB context path. The specied
56 * {@link org.dom4j.io.OutputFormat}will be used for writing the XML
57 * stream.
58 *
59 * @param contextPath
60 * JAXB context path to be used
61 * @param outputFormat
62 * the DOM4J {@link org.dom4j.io.OutputFormat}to be used
63 *
64 * @see javax.xml.bind.JAXBContext
65 */
66 public JAXBWriter(String contextPath, OutputFormat outputFormat) {
67 super(contextPath);
68 this.outputFormat = outputFormat;
69 }
70
71 /***
72 * Creates a new JAXBWriter for the given JAXB context path, using the
73 * specified {@link java.lang.Classloader}. (This is the Java package where
74 * JAXB can find the generated XML classes. This package MUST contain
75 * jaxb.properties!)
76 *
77 * @param contextPath
78 * JAXB context path to be used
79 * @param classloader
80 * the classloader to be used for loading JAXB
81 *
82 * @see javax.xml.bind.JAXBContext
83 */
84 public JAXBWriter(String contextPath, ClassLoader classloader) {
85 super(contextPath, classloader);
86 }
87
88 /***
89 * Creates a new JAXBWriter for the given JAXB context path, using the
90 * specified {@link java.lang.Classloader}. The specied {@link
91 * org.dom4j.io.OutputFormat} will be used while writing the XML stream.
92 *
93 * @param contextPath
94 * JAXB context path to be used
95 * @param classloader
96 * the class loader to be used to load JAXB
97 * @param outputFormat
98 * the DOM4J {@link org.dom4j.io.OutputFormat}to be used
99 *
100 * @see javax.xml.bind.JAXBContext
101 */
102 public JAXBWriter(String contextPath, ClassLoader classloader,
103 OutputFormat outputFormat) {
104 super(contextPath, classloader);
105 this.outputFormat = outputFormat;
106 }
107
108 /***
109 * Returns the OutputFormat that will be used when writing the XML stream.
110 *
111 * @return Returns the output format.
112 */
113 public OutputFormat getOutputFormat() {
114 return outputFormat;
115 }
116
117 /***
118 * Defines to write the resulting output to the specified {@link
119 * java.io.File}.
120 *
121 * @param file
122 * file to write to
123 *
124 * @throws IOException
125 * when the file cannot be found
126 */
127 public void setOutput(File file) throws IOException {
128 getWriter().setOutputStream(new FileOutputStream(file));
129 }
130
131 /***
132 * Defines to write the resulting output to the specified {@link
133 * java.io.OutputStream}
134 *
135 * @param outputStream
136 * outputStream to write to.
137 *
138 * @throws IOException
139 * DOCUMENT ME!
140 */
141 public void setOutput(OutputStream outputStream) throws IOException {
142 getWriter().setOutputStream(outputStream);
143 }
144
145 /***
146 * Defines to write the resulting output to the specified {@link Writer}.
147 *
148 * @param writer
149 * writer to write to
150 *
151 * @throws IOException
152 */
153 public void setOutput(Writer writer) throws IOException {
154 getWriter().setWriter(writer);
155 }
156
157 /***
158 * Start a document by writing the initial XML declaration to the output.
159 * This must be done prior to writing any other elements.
160 *
161 * @throws IOException
162 * if an error occured while writing the output
163 * @throws SAXException
164 * thrown by the underlying SAX driver
165 */
166 public void startDocument() throws IOException, SAXException {
167 getWriter().startDocument();
168 }
169
170 /***
171 * Stop writing the document to the output. This must be done when all other
172 * elements are finished.
173 *
174 * @throws IOException
175 * if an error occured while writing the output
176 * @throws SAXException
177 * thrown by the underlying SAX driver
178 */
179 public void endDocument() throws IOException, SAXException {
180 getWriter().endDocument();
181 }
182
183 /***
184 * Writes the specified {@link javax.xml.bind.Element}to the document.
185 * {@link javax.xml.bind.Element}instances can be created using the
186 * ObjectFactory that is generated by the JAXB compiler.
187 *
188 * @param jaxbObject
189 *
190 * @throws IOException
191 * if an error occured while writing the output
192 * @throws JAXBException
193 * when an error occured while marshalling the jaxbObject
194 */
195 public void write(javax.xml.bind.Element jaxbObject) throws IOException,
196 JAXBException {
197 getWriter().write(marshal(jaxbObject));
198 }
199
200 /***
201 * Writes the closing tag of the specified {@link javax.xml.bind.Element}to
202 * the document. This method can be used for writing {@link
203 * javax.xml.bind.Element} instances can be created using the ObjectFactory
204 * that is generated by the JAXB compiler.
205 *
206 * @param jaxbObject
207 * the JAXB element to write
208 *
209 * @throws IOException
210 * if an error occured while writing the output
211 * @throws JAXBException
212 * when an error occured while marshalling the jaxbObject
213 */
214 public void writeClose(javax.xml.bind.Element jaxbObject)
215 throws IOException, JAXBException {
216 getWriter().writeClose(marshal(jaxbObject));
217 }
218
219 /***
220 * Writes the opening tag of the specified {@link javax.xml.bind.Element}to
221 * the document. {@link javax.xml.bind.Element}instances can be created
222 * using the ObjectFactory that is generated by the JAXB compiler.
223 *
224 * @param jaxbObject
225 * the JAXB element to write
226 *
227 * @throws IOException
228 * if an error occured while writing the output
229 * @throws JAXBException
230 * when an error occured while marshalling the jaxbObject
231 */
232 public void writeOpen(javax.xml.bind.Element jaxbObject)
233 throws IOException, JAXBException {
234 getWriter().writeOpen(marshal(jaxbObject));
235 }
236
237 /***
238 * Writes the specified {@link org.dom4j.Element}to the document.
239 *
240 * @param element
241 * the {@link org.dom4j.Element}to write
242 *
243 * @throws IOException
244 * if an error occured while writing the output
245 */
246 public void writeElement(Element element) throws IOException {
247 getWriter().write(element);
248 }
249
250 /***
251 * Writes the closing tag of the specified {@link org.dom4j.Element}to the
252 * document.
253 *
254 * @param element
255 * the {@link org.dom4j.Element}to write
256 *
257 * @throws IOException
258 * if an error occured while writing the output
259 */
260 public void writeCloseElement(Element element) throws IOException {
261 getWriter().writeClose(element);
262 }
263
264 /***
265 * Writes the opening tag of the specified {@link org.dom4j.Element}to the
266 * document.
267 *
268 * @param element
269 * the {@link org.dom4j.Element}to write
270 *
271 * @throws IOException
272 * if an error occured while writing the output
273 */
274 public void writeOpenElement(Element element) throws IOException {
275 getWriter().writeOpen(element);
276 }
277
278 private XMLWriter getWriter() throws IOException {
279 if (xmlWriter == null) {
280 if (this.outputFormat != null) {
281 xmlWriter = new XMLWriter(outputFormat);
282 } else {
283 xmlWriter = new XMLWriter();
284 }
285 }
286
287 return xmlWriter;
288 }
289 }
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326