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 }