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;
+ }
}