You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/02/02 22:18:41 UTC

svn commit: r374506 - /incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapWriter.java

Author: gnodet
Date: Thu Feb  2 13:18:38 2006
New Revision: 374506

URL: http://svn.apache.org/viewcvs?rev=374506&view=rev
Log:
For non-soap messages, write faults details only.
Reformat code.

Modified:
    incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapWriter.java

Modified: incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapWriter.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapWriter.java?rev=374506&r1=374505&r2=374506&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapWriter.java (original)
+++ incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapWriter.java Thu Feb  2 13:18:38 2006
@@ -47,201 +47,212 @@
  */
 public class SoapWriter {
 
-	public static final String SOAP_PART_ID = "soap-request";
-	
-	private SoapMessage message;
-	private String contentType;
-	private SoapMarshaler marshaler;
-	private MimeMultipart parts;
-	
-	public SoapWriter(SoapMarshaler marshaler, SoapMessage message) {
-		this.marshaler = marshaler;
-		this.message = message;
-		this.contentType = prepare();
-	}
-	
-	public String getContentType() {
-		return contentType;
-	}
-	
-	public void write(OutputStream out) throws Exception {
-		if (message.hasAttachments()) {
-			writeMultipartMessage(out);
-		} else {
-			writeSimpleMessage(out);
-		}
-	}
-	
-	private String prepare() {
-		if (message.hasAttachments()) {
-			parts = new MimeMultipart(
-					"related; type=\"text/xml\"; start=\"<" + SOAP_PART_ID
-							+ ">\"");
-			return parts.getContentType();
-		} else {
-			return "text/xml";
-		}
-	}
-
-	private void writeSimpleMessage(OutputStream out) throws Exception {
-		XMLStreamWriter writer = marshaler.getOutputFactory().createXMLStreamWriter(out);
-		writer.writeStartDocument();
-		if (marshaler.isSoap()) {
-			writeSoapEnvelope(writer);
-		} else {
-			if (message.hasHeaders()) {
-				throw new IllegalStateException("SOAP headers found on non-soap message");
-			}
-			writeContents(writer);
-		}
-		writer.writeEndDocument();
-		writer.flush();
-	}
-	
-	private void writeMultipartMessage(OutputStream out) throws Exception {
-		Session session = Session.getDefaultInstance(new Properties(), null);
-		MimeMessage mime = new MimeMessage(session);
-		// Add soap part
-		MimeBodyPart soapPart = new MimeBodyPart();
-		soapPart.setContentID("<" + SOAP_PART_ID + ">");
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-		writeSimpleMessage(baos);
-		soapPart.setDataHandler(new DataHandler(new ByteArrayDataSource(baos.toByteArray(), "text/xml")));
-		parts.addBodyPart(soapPart);
-		// Add attachments
-		for (Iterator itr = message.getAttachments().entrySet().iterator(); itr
-				.hasNext();) {
-			Map.Entry entry = (Map.Entry) itr.next();
-			String id = (String) entry.getKey();
-			DataHandler dh = (DataHandler) entry.getValue();
-			MimeBodyPart part = new MimeBodyPart();
-			part.setDataHandler(dh);
-			part.setContentID("<" + id + ">");
-			parts.addBodyPart(part);
-		}
-		mime.setContent(parts);
-		mime.writeTo(out);
-	}
-	
-	private void writeSoapEnvelope(XMLStreamWriter writer) throws Exception {
-		QName envelope = getEnvelopeName();
-		String soapUri = envelope.getNamespaceURI();
-		String soapPrefix = envelope.getPrefix();
-		writer.setPrefix(soapPrefix, soapUri);
+    public static final String SOAP_PART_ID = "soap-request";
+
+    private SoapMessage message;
+
+    private String contentType;
+
+    private SoapMarshaler marshaler;
+
+    private MimeMultipart parts;
+
+    public SoapWriter(SoapMarshaler marshaler, SoapMessage message) {
+        this.marshaler = marshaler;
+        this.message = message;
+        this.contentType = prepare();
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void write(OutputStream out) throws Exception {
+        if (message.hasAttachments()) {
+            writeMultipartMessage(out);
+        } else {
+            writeSimpleMessage(out);
+        }
+    }
+
+    private String prepare() {
+        if (message.hasAttachments()) {
+            parts = new MimeMultipart("related; type=\"text/xml\"; start=\"<" + SOAP_PART_ID + ">\"");
+            return parts.getContentType();
+        } else {
+            return "text/xml";
+        }
+    }
+
+    private void writeSimpleMessage(OutputStream out) throws Exception {
+        XMLStreamWriter writer = marshaler.getOutputFactory().createXMLStreamWriter(out);
+        writer.writeStartDocument();
+        if (marshaler.isSoap()) {
+            writeSoapEnvelope(writer);
+        } else {
+            if (message.hasHeaders()) {
+                throw new IllegalStateException("SOAP headers found on non-soap message");
+            }
+            if (message.getFault() != null) {
+                if (message.getFault().getDetails() != null) {
+                    XMLStreamReader reader = marshaler.getSourceTransformer().toXMLStreamReader(
+                            message.getFault().getDetails());
+                    XMLStreamHelper.copy(reader, writer, marshaler.isRepairingNamespace());
+                } else {
+                    throw new IllegalStateException("Cannot write non xml faults for non soap messages");
+                }
+            } else if (message.getSource() != null) {
+                writeContents(writer);
+            }
+        }
+        writer.writeEndDocument();
+        writer.flush();
+    }
+
+    private void writeMultipartMessage(OutputStream out) throws Exception {
+        Session session = Session.getDefaultInstance(new Properties(), null);
+        MimeMessage mime = new MimeMessage(session);
+        // Add soap part
+        MimeBodyPart soapPart = new MimeBodyPart();
+        soapPart.setContentID("<" + SOAP_PART_ID + ">");
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        writeSimpleMessage(baos);
+        soapPart.setDataHandler(new DataHandler(new ByteArrayDataSource(baos.toByteArray(), "text/xml")));
+        parts.addBodyPart(soapPart);
+        // Add attachments
+        for (Iterator itr = message.getAttachments().entrySet().iterator(); itr.hasNext();) {
+            Map.Entry entry = (Map.Entry) itr.next();
+            String id = (String) entry.getKey();
+            DataHandler dh = (DataHandler) entry.getValue();
+            MimeBodyPart part = new MimeBodyPart();
+            part.setDataHandler(dh);
+            part.setContentID("<" + id + ">");
+            parts.addBodyPart(part);
+        }
+        mime.setContent(parts);
+        mime.writeTo(out);
+    }
+
+    private void writeSoapEnvelope(XMLStreamWriter writer) throws Exception {
+        QName envelope = getEnvelopeName();
+        String soapUri = envelope.getNamespaceURI();
+        String soapPrefix = envelope.getPrefix();
+        writer.setPrefix(soapPrefix, soapUri);
         writer.writeStartElement(soapPrefix, SoapMarshaler.ENVELOPE, soapUri);
         if (!marshaler.isRepairingNamespace()) {
-        	writer.writeNamespace(soapPrefix, soapUri);
-            //XMLStreamHelper.writeNamespacesExcludingPrefixAndNamespace(out, in, soapPrefix, soapUri);
+            writer.writeNamespace(soapPrefix, soapUri);
+            // XMLStreamHelper.writeNamespacesExcludingPrefixAndNamespace(out, in, soapPrefix, soapUri);
         }
         // Write Header
         if (message.getHeaders() != null && message.getHeaders().size() > 0) {
             writer.writeStartElement(soapPrefix, SoapMarshaler.HEADER, soapUri);
             for (Iterator it = message.getHeaders().values().iterator(); it.hasNext();) {
-            	DocumentFragment df = (DocumentFragment) it.next();
-            	Element e = (Element) df.getFirstChild();
-            	XMLStreamHelper.copy(new W3CDOMStreamReader(e), writer, marshaler.isRepairingNamespace());
+                DocumentFragment df = (DocumentFragment) it.next();
+                Element e = (Element) df.getFirstChild();
+                XMLStreamHelper.copy(new W3CDOMStreamReader(e), writer, marshaler.isRepairingNamespace());
             }
             writer.writeEndElement();
         }
         // Write Body
         writer.writeStartElement(soapPrefix, SoapMarshaler.BODY, soapUri);
         if (message.getFault() != null) {
-        	writeFault(writer);
+            writeFault(writer);
         } else if (message.getSource() != null) {
-        	writeContents(writer);
-        }  
+            writeContents(writer);
+        }
         writer.writeEndElement();
         writer.writeEndElement();
-	}
-	
-	private void writeContents(XMLStreamWriter writer) throws Exception {
+    }
+
+    private void writeContents(XMLStreamWriter writer) throws Exception {
         XMLStreamReader reader = marshaler.getSourceTransformer().toXMLStreamReader(message.getSource());
         XMLStreamHelper.copy(reader, writer, marshaler.isRepairingNamespace());
-	}
-	
-	private void writeFault(XMLStreamWriter writer) throws Exception {
-		QName envelope = getEnvelopeName();
-		String soapUri = envelope.getNamespaceURI();
+    }
+
+    private void writeFault(XMLStreamWriter writer) throws Exception {
+        QName envelope = getEnvelopeName();
+        String soapUri = envelope.getNamespaceURI();
         if (SoapMarshaler.SOAP_11_URI.equals(soapUri)) {
-        	writeSoap11Fault(writer);
+            writeSoap11Fault(writer);
         } else {
-        	writeSoap12Fault(writer);
+            writeSoap12Fault(writer);
         }
-	}
+    }
+
+    private void writeSoap11Fault(XMLStreamWriter writer) throws Exception {
+        // TODO
+        writeSoap12Fault(writer);
+    }
+
+    private void writeSoap12Fault(XMLStreamWriter writer) throws Exception {
+        QName envelope = getEnvelopeName();
+        String soapUri = envelope.getNamespaceURI();
+        String soapPrefix = envelope.getPrefix();
+        writer.setPrefix(soapPrefix, soapUri);
+        SoapFault fault = message.getFault();
 
-	private void writeSoap11Fault(XMLStreamWriter writer) throws Exception {
-		// TODO
-		writeSoap12Fault(writer);
-	}
-	
-	private void writeSoap12Fault(XMLStreamWriter writer) throws Exception {
-		QName envelope = getEnvelopeName();
-		String soapUri = envelope.getNamespaceURI();
-		String soapPrefix = envelope.getPrefix();
-		writer.setPrefix(soapPrefix, soapUri);
-		SoapFault fault = message.getFault();
-		
         writer.writeStartElement(soapPrefix, "Fault", soapUri);
         String code = fault.getCode();
         if (code != null) {
-        	writer.writeStartElement(soapPrefix, "Code", soapUri);
-        	writer.writeStartElement(soapPrefix, "Value", soapUri);
-        	writer.writeCharacters(soapPrefix + ":" + code);
-        	writer.writeEndElement();
+            writer.writeStartElement(soapPrefix, "Code", soapUri);
+            writer.writeStartElement(soapPrefix, "Value", soapUri);
+            writer.writeCharacters(soapPrefix + ":" + code);
+            writer.writeEndElement();
             String subcode = fault.getSubcode();
             if (subcode != null) {
-            	writer.writeStartElement(soapPrefix, "Subcode", soapUri);
-            	writer.writeStartElement(soapPrefix, "Value", soapUri);
-            	writer.writeCharacters(subcode);
-            	writer.writeEndElement();
+                writer.writeStartElement(soapPrefix, "Subcode", soapUri);
+                writer.writeStartElement(soapPrefix, "Value", soapUri);
+                writer.writeCharacters(subcode);
+                writer.writeEndElement();
                 writer.writeEndElement();
             }
             writer.writeEndElement();
         }
         String reason = fault.getReason();
-        if (reason == null) {
+        if (reason == null && fault.getCause() != null) {
             reason = fault.getCause().toString();
         }
-    	writer.writeStartElement(soapPrefix, "Reason", soapUri);
-    	writer.writeStartElement(soapPrefix, "Text", soapUri);
-    	writer.writeAttribute(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI, "lang", "en-US");
-    	writer.writeCharacters(reason);
-    	writer.writeEndElement();
-    	writer.writeEndElement();
-
+        if (reason != null) {
+            writer.writeStartElement(soapPrefix, "Reason", soapUri);
+            writer.writeStartElement(soapPrefix, "Text", soapUri);
+            writer.writeAttribute(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI, "lang", "en-US");
+            writer.writeCharacters(reason);
+            writer.writeEndElement();
+            writer.writeEndElement();
+        }
         String node = fault.getNode();
         if (node != null) {
-        	writer.writeStartElement(soapPrefix, "Node", soapUri);
-        	writer.writeCharacters(node);
-        	writer.writeEndElement();
+            writer.writeStartElement(soapPrefix, "Node", soapUri);
+            writer.writeCharacters(node);
+            writer.writeEndElement();
         }
 
         String role = fault.getRole();
         if (role != null) {
-        	writer.writeStartElement(soapPrefix, "Role", soapUri);
-        	writer.writeCharacters(role);
-        	writer.writeEndElement();
+            writer.writeStartElement(soapPrefix, "Role", soapUri);
+            writer.writeCharacters(role);
+            writer.writeEndElement();
         }
-        
+
         Source details = fault.getDetails();
         if (details != null) {
-        	writer.writeStartElement(soapPrefix, "Details", soapUri);
-            XMLStreamReader reader = marshaler.getSourceTransformer().toXMLStreamReader(message.getSource());
+            writer.writeStartElement(soapPrefix, "Details", soapUri);
+            XMLStreamReader reader = marshaler.getSourceTransformer().toXMLStreamReader(details);
             XMLStreamHelper.copy(reader, writer, marshaler.isRepairingNamespace());
             writer.writeEndElement();
         }
-        
+
         writer.writeEndElement();
-	}
-		
-	protected QName getEnvelopeName() {
-		QName name = message.getEnvelopeName();
-		if (name == null) {
-			name = new QName(marshaler.soapUri, SoapMarshaler.ENVELOPE, marshaler.prefix);
-		} else if (name.getPrefix() == null) {
-			name = new 	QName(name.getNamespaceURI(), name.getLocalPart(), marshaler.prefix); 
-		}
-		return name;
-	}
+    }
+
+    protected QName getEnvelopeName() {
+        QName name = message.getEnvelopeName();
+        if (name == null) {
+            name = new QName(marshaler.soapUri, SoapMarshaler.ENVELOPE, marshaler.prefix);
+        } else if (name.getPrefix() == null) {
+            name = new QName(name.getNamespaceURI(), name.getLocalPart(), marshaler.prefix);
+        }
+        return name;
+    }
 
 }