1 package org.codehaus.xfire.util;
2
3 import javax.xml.stream.XMLStreamException;
4 import javax.xml.stream.XMLStreamWriter;
5
6 import org.codehaus.xfire.MessageContext;
7 import org.codehaus.xfire.exchange.InMessage;
8 import org.codehaus.xfire.exchange.MessageSerializer;
9 import org.codehaus.xfire.exchange.OutMessage;
10 import org.codehaus.xfire.fault.XFireFault;
11 import org.codehaus.yom.Document;
12 import org.codehaus.yom.stax.StaxBuilder;
13 import org.codehaus.yom.stax.StaxSerializer;
14
15 /***
16 * Reads/writes YOM documents to the body of a message.
17 *
18 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
19 */
20 public class YOMSerializer
21 implements MessageSerializer
22 {
23 public void readMessage(InMessage message, MessageContext context)
24 throws XFireFault
25 {
26 StaxBuilder builder = new StaxBuilder();
27 try
28 {
29 Document doc = builder.build(message.getXMLStreamReader());
30 message.setBody(doc);
31 }
32 catch (XMLStreamException e)
33 {
34 throw new XFireFault("Couldn't parse message.", e, XFireFault.SENDER);
35 }
36 }
37
38 public void writeMessage(OutMessage message, XMLStreamWriter writer, MessageContext context)
39 throws XFireFault
40 {
41 Document doc = (Document) message.getBody();
42 StaxSerializer serializer = new StaxSerializer();
43
44 try
45 {
46 serializer.writeElement(doc.getRootElement(), writer);
47 }
48 catch (XMLStreamException e)
49 {
50 throw new XFireFault("Couldn't write message.", e, XFireFault.RECEIVER);
51 }
52 }
53
54 }