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/04/27 11:43:08 UTC
svn commit: r397492 - in /incubator/servicemix/trunk/servicemix-soap/src:
main/java/org/apache/servicemix/soap/marshalers/SoapReader.java
test/java/org/apache/servicemix/soap/marshalers/SoapMessageMarshalerTest.java
Author: gnodet
Date: Thu Apr 27 02:43:07 2006
New Revision: 397492
URL: http://svn.apache.org/viewcvs?rev=397492&view=rev
Log:
SM-409: Do not assume that first part of multi mime message is xml
Patch provided by Stefan Klinger, thx !
Modified:
incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapReader.java
incubator/servicemix/trunk/servicemix-soap/src/test/java/org/apache/servicemix/soap/marshalers/SoapMessageMarshalerTest.java
Modified: incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapReader.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapReader.java?rev=397492&r1=397491&r2=397492&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapReader.java (original)
+++ incubator/servicemix/trunk/servicemix-soap/src/main/java/org/apache/servicemix/soap/marshalers/SoapReader.java Thu Apr 27 02:43:07 2006
@@ -28,11 +28,13 @@
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import org.apache.servicemix.jbi.jaxp.ExtendedXMLStreamReader;
import org.apache.servicemix.jbi.jaxp.FragmentStreamReader;
import org.apache.servicemix.jbi.jaxp.StaxSource;
+import org.apache.servicemix.jbi.jaxp.StringSource;
import org.apache.servicemix.soap.SoapFault;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
@@ -46,6 +48,8 @@
public class SoapReader {
private SoapMarshaler marshaler;
+
+ protected static final Source EMPTY_CONTENT = new StringSource("<payload/>");
public SoapReader(SoapMarshaler marshaler) {
this.marshaler = marshaler;
@@ -139,13 +143,29 @@
ContentType type = new ContentType(mime.getContentType());
String contentId = type.getParameter("start");
// Get request
- MimeBodyPart contentPart;
+ MimeBodyPart contentPart = null;
if (contentId != null) {
contentPart = (MimeBodyPart) multipart.getBodyPart(contentId);
} else {
- contentPart = (MimeBodyPart) multipart.getBodyPart(0);
+ for (int i = 0; i < multipart.getCount(); i++) {
+ MimeBodyPart contentPart2 = (MimeBodyPart) multipart.getBodyPart(i);
+ String contentType = contentPart2.getContentType();
+
+ if (contentType.indexOf("xml") >= 0) {
+ contentPart = contentPart2;
+ break;
+ }
+ }
}
- SoapMessage message = read(contentPart.getInputStream());
+
+ SoapMessage message = null;
+ if (contentPart != null) {
+ message = read(contentPart.getInputStream());
+ } else {
+ message = new SoapMessage();
+ message.setSource(EMPTY_CONTENT);
+ }
+
// Get attachments
for (int i = 0; i < multipart.getCount(); i++) {
MimeBodyPart part = (MimeBodyPart) multipart.getBodyPart(i);
Modified: incubator/servicemix/trunk/servicemix-soap/src/test/java/org/apache/servicemix/soap/marshalers/SoapMessageMarshalerTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-soap/src/test/java/org/apache/servicemix/soap/marshalers/SoapMessageMarshalerTest.java?rev=397492&r1=397491&r2=397492&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-soap/src/test/java/org/apache/servicemix/soap/marshalers/SoapMessageMarshalerTest.java (original)
+++ incubator/servicemix/trunk/servicemix-soap/src/test/java/org/apache/servicemix/soap/marshalers/SoapMessageMarshalerTest.java Thu Apr 27 02:43:07 2006
@@ -21,9 +21,14 @@
import java.io.InputStream;
import java.net.URI;
import java.util.Iterator;
+import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
+import javax.mail.Session;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
import javax.xml.namespace.QName;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
@@ -197,7 +202,35 @@
checkServiceNameNamespace((DocumentFragment) headers.next());
assertFalse(headers.hasNext());
}
-
+
+ public void testReadNonSoapMessageWithAttachmentsAndNoSource() throws Exception {
+ Session session = Session.getDefaultInstance(new Properties(), null);
+ MimeMessage message = new MimeMessage(session);
+ MimeMultipart multipart = new MimeMultipart();
+ MimeBodyPart mimePart = new MimeBodyPart();
+ mimePart.setText("This is a dummy text");
+ mimePart.setContentID("<bla1>");
+ multipart.addBodyPart(mimePart);
+ mimePart = new MimeBodyPart();
+ mimePart.setContentID("<bla2>");
+ mimePart.setContent("<html>dummy</html>", "text/html");
+ multipart.addBodyPart(mimePart);
+ message.setContent(multipart);
+ message.setHeader("Content-Type", multipart.getContentType());
+ message.saveChanges();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ message.writeTo(baos);
+ log.info(baos.toString());
+
+ SoapMarshaler marshaler = new SoapMarshaler(true);
+ SoapMessage msg = marshaler.createReader().read(new ByteArrayInputStream(baos.toByteArray()), multipart.getContentType());
+ assertTrue(msg.getSource().equals(SoapReader.EMPTY_CONTENT));
+ SoapWriter writer = marshaler.createWriter(msg);
+ baos = new ByteArrayOutputStream();
+ writer.write(baos);
+ log.info(baos.toString());
+ }
+
protected void checkUserIdNamespace(Node node) throws Exception {
CachedXPathAPI cachedXPathAPI = new CachedXPathAPI();
NodeIterator iterator = cachedXPathAPI.selectNodeIterator(node, "//*[local-name() = 'userId']");