1 17 package org.apache.servicemix.jsr181.xfire; 18 19 import java.io.PrintWriter ; 20 import java.io.StringWriter ; 21 import java.util.List ; 22 23 import javax.xml.stream.XMLStreamException; 24 import javax.xml.stream.XMLStreamWriter; 25 26 import org.apache.servicemix.jsr181.Jsr181ConfigurationMBean; 27 import org.codehaus.xfire.MessageContext; 28 import org.codehaus.xfire.XFireRuntimeException; 29 import org.codehaus.xfire.exchange.InMessage; 30 import org.codehaus.xfire.exchange.MessageSerializer; 31 import org.codehaus.xfire.exchange.OutMessage; 32 import org.codehaus.xfire.fault.XFireFault; 33 import org.codehaus.xfire.util.jdom.StaxSerializer; 34 import org.jdom.Element; 35 36 public class JbiFaultSerializer implements MessageSerializer { 37 38 private Jsr181ConfigurationMBean configuration; 39 40 public JbiFaultSerializer(Jsr181ConfigurationMBean configuration) { 41 this.configuration = configuration; 42 } 43 44 public void readMessage(InMessage message, MessageContext context) throws XFireFault { 45 throw new UnsupportedOperationException (); 46 } 47 48 public void writeMessage(OutMessage message, XMLStreamWriter writer, MessageContext context) throws XFireFault { 49 try { 50 XFireFault fault = (XFireFault) message.getBody(); 51 writer.writeStartElement("fault"); 52 writer.writeStartElement("message"); 53 writer.writeCharacters(fault.getMessage()); 54 writer.writeEndElement(); if (fault.hasDetails()) { 56 Element detail = fault.getDetail(); 57 writer.writeStartElement("detail"); 58 StaxSerializer serializer = new StaxSerializer(); 59 List details = detail.getContent(); 60 for (int i = 0; i < details.size(); i++) { 61 serializer.writeElement((Element) details.get(i), writer); 62 } 63 writer.writeEndElement(); } 65 if (configuration.isPrintStackTraceInFaults()) { 66 writer.writeStartElement("stack"); 67 StringWriter sw = new StringWriter (); 68 PrintWriter pw = new PrintWriter (sw); 69 fault.printStackTrace(pw); 70 pw.close(); 71 writer.writeCData(sw.toString()); 72 writer.writeEndElement(); } 74 writer.writeEndElement(); } catch (XMLStreamException e) { 76 throw new XFireRuntimeException("Couldn't create fault.", e); 77 } 78 } 79 80 } 81 | Popular Tags |