Return-Path: Delivered-To: apmail-axis-java-commits-archive@minotaur.apache.org Received: (qmail 42744 invoked from network); 30 Oct 2010 17:27:32 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 30 Oct 2010 17:27:32 -0000 Received: (qmail 77967 invoked by uid 500); 30 Oct 2010 17:27:32 -0000 Delivered-To: apmail-axis-java-commits-archive@axis.apache.org Received: (qmail 77949 invoked by uid 500); 30 Oct 2010 17:27:32 -0000 Mailing-List: contact java-commits-help@axis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: java-dev@axis.apache.org Delivered-To: mailing list java-commits@axis.apache.org Received: (qmail 77942 invoked by uid 99); 30 Oct 2010 17:27:32 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 30 Oct 2010 17:27:32 +0000 X-ASF-Spam-Status: No, hits=-1998.7 required=10.0 tests=ALL_TRUSTED,URI_HEX X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 30 Oct 2010 17:27:27 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 98F2423889E2; Sat, 30 Oct 2010 17:26:28 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1029125 [1/2] - in /axis/axis2/java/core/branches/1_5: ./ modules/distribution/ modules/kernel/src/org/apache/axis2/transport/http/util/ modules/kernel/test/org/apache/axis2/transport/http/util/ modules/parent/ modules/saaj/ modules/saaj/s... Date: Sat, 30 Oct 2010 17:26:28 -0000 To: java-commits@axis.apache.org From: veithen@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20101030172628.98F2423889E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: veithen Date: Sat Oct 30 17:26:27 2010 New Revision: 1029125 URL: http://svn.apache.org/viewvc?rev=1029125&view=rev Log: Merged a first set of SAAJ fixes from the trunk to the 1.5 branch. Merged revisions: 732539,732541,732873,732877,733293,733295,733304,733306,733348,733354,733394,733399,733463,733464,733533,733676 Issues fixed: AXIS2-4202, AXIS2-4203 Note: The merge of r733533 effectively reverts r958099, which was a fix for AXIS2-4752. This fix has been replaced by manually merging a piece of code from r793382 (which needs review, also on the trunk). Added: axis/axis2/java/core/branches/1_5/modules/saaj/test-resources/SwAmessage.bin - copied unchanged from r732539, webservices/axis2/trunk/java/modules/saaj/test-resources/SwAmessage.bin axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/SAAJTestUtil.java - copied unchanged from r732539, webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SAAJTestUtil.java Removed: axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/MimeHeadersEx.java axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/integration/EchoService.java Modified: axis/axis2/java/core/branches/1_5/ (props changed) axis/axis2/java/core/branches/1_5/modules/distribution/ (props changed) axis/axis2/java/core/branches/1_5/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java (props changed) axis/axis2/java/core/branches/1_5/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java (props changed) axis/axis2/java/core/branches/1_5/modules/parent/ (props changed) axis/axis2/java/core/branches/1_5/modules/saaj/pom.xml axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/util/SAAJUtil.java axis/axis2/java/core/branches/1_5/modules/saaj/test-resources/message.bin axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/MessageFactoryTest.java axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/SOAPFaultTest.java axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/integration/IntegrationTest.java axis/axis2/java/core/branches/1_5/modules/soapmonitor/module/ (props changed) axis/axis2/java/core/branches/1_5/modules/soapmonitor/module/pom.xml (props changed) axis/axis2/java/core/branches/1_5/modules/soapmonitor/module/src/main/java/org/apache/axis2/handlers/ (props changed) axis/axis2/java/core/branches/1_5/modules/soapmonitor/module/src/main/resources/META-INF/module.xml (props changed) axis/axis2/java/core/branches/1_5/modules/soapmonitor/servlet/ (props changed) axis/axis2/java/core/branches/1_5/modules/soapmonitor/servlet/src/main/java/org/apache/axis2/soapmonitor/applet/ (props changed) axis/axis2/java/core/branches/1_5/modules/soapmonitor/servlet/src/main/java/org/apache/axis2/soapmonitor/servlet/ (props changed) axis/axis2/java/core/branches/1_5/modules/transport/http/pom.xml (props changed) axis/axis2/java/core/branches/1_5/modules/transport/http/src/ (props changed) axis/axis2/java/core/branches/1_5/modules/transport/local/ (props changed) axis/axis2/java/core/branches/1_5/modules/webapp/src/main/java/org/apache/axis2/webapp/AdminAgent.java (props changed) axis/axis2/java/core/branches/1_5/modules/webapp/src/main/java/org/apache/axis2/webapp/AxisAdminServlet.java (props changed) Propchange: axis/axis2/java/core/branches/1_5/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Oct 30 17:26:27 2010 @@ -1,2 +1,2 @@ /axis/axis2/java/core/trunk:922914,922941,922983,935169,935174,935338,944347,944915,951385,960693,960976,960978,960984,960995,961012,961964,962844,963081,963147,965032,965036,965056,965068,965074,965213,965268,965277,965302,965454,966371,966401,966428,979882-979883,979886,981036,981038,981095,981188,981220-981221,981237,981262,981278,981293,981306,981311,981985,982387,982393,982795,982800,983101,983110,983114,983119-983120,983128,983185,983236,983270,983276,983280,983316,983363,983370,983372,985458,985464,985626,985634,985661,985715,985717,985744,985748,985752,985763,985791,985796,985851,986844,986889,987313,987712-987715,987783,987832,987873,987883,987913,987935,990350,990369,990377,990384,990394,990398,990404,990434,990449,1001279,1001452 -/webservices/axis2/trunk/java:728674,731798,732924,732927,732939,733539,733776,741873,748761,751964,754458,754467,754503,757151-757153,759488,759507,759878,759968,761025,761044,761709,761770,761952,763148,765102,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 +/webservices/axis2/trunk/java:728674,731798,732539,732541,732873,732877,732924,732927,732939,733293,733295,733304,733306,733348,733354,733394,733399,733463-733464,733533,733539,733676,733776,741873,748761,751964,754458,754467,754503,757151-757153,759488,759507,759878,759968,761025,761044,761709,761770,761952,763148,765102,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 Propchange: axis/axis2/java/core/branches/1_5/modules/distribution/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Oct 30 17:26:27 2010 @@ -1,2 +1,2 @@ /axis/axis2/java/core/trunk/modules/distribution:922914,922941,922983,935169,935174,935338,936434,944347,944915,951385,960693,960976,960978,960984,960995,961012,961964,962844,963081,963147,965032,965036,965056,965068,965074,965213,965268,965277,965302,965454,966371,966401,966428,979882-979883,979886,981036,981038,981095,981188,981220-981221,981237,981262,981278,981293,981306,981311,981985,982387,982393,982795,982800,983101,983110,983114,983119-983120,983128,983185,983236,983270,983276,983280,983316,983363,983370,983372,985458,985464,985626,985634,985661,985715,985717,985744,985748,985752,985763,985791,985796,985851,986844,986889,987313,987712-987715,987783,987832,987873,987883,987913,987935,990350,990369,990377,990384,990394,990398,990404,990434,990449,1001279,1001452 -/webservices/axis2/trunk/java/modules/distribution:728674,731798,732924,732927,732939,733539,733776,741873,748761,751964,754458,754467,754503,757151-757153,759488,759507,759878,759968,761025,761044,761709,761770,761952,763148,765102,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 +/webservices/axis2/trunk/java/modules/distribution:728674,731798,732539,732541,732873,732877,732924,732927,732939,733293,733295,733304,733306,733348,733354,733394,733399,733463-733464,733533,733539,733676,733776,741873,748761,751964,754458,754467,754503,757151-757153,759488,759507,759878,759968,761025,761044,761709,761770,761952,763148,765102,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 Propchange: axis/axis2/java/core/branches/1_5/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Oct 30 17:26:27 2010 @@ -1,2 +1,2 @@ /axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java:922914,922941,922983,935169,935174,935338,944347,944915,951385,960693,960976,960978,960984,960995,961012,961964,962844,963081,963147,965032,965036,965056,965068,965074,965213,965268,965277,965302,965454,966371,966401,966428,979882-979883,979886,981036,981038,981095,981188,981220-981221,981237,981262,981278,981293,981306,981311,981985,982387,982393,982795,982800,983101,983110,983114,983119-983120,983128,983185,983236,983270,983276,983280,983316,983363,983370,983372,985458,985464,985626,985634,985661,985715,985717,985744,985748,985752,985763,985791,985796,985851,986844,986889,987313,987712-987715,987783,987832,987873,987883,987913,987935,990350,990369,990377,990384,990394,990398,990404,990434,990449,1001279,1001452 -/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java:728674,731798,733539,751964,761709,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 +/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/QueryStringParser.java:728674,731798,732539,732541,732873,732877,733293,733295,733304,733306,733348,733354,733394,733399,733463-733464,733533,733539,733676,751964,761709,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 Propchange: axis/axis2/java/core/branches/1_5/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Oct 30 17:26:27 2010 @@ -1,2 +1,2 @@ /axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java:922914,922941,922983,935169,935174,935338,944347,944915,951385,960693,960976,960978,960984,960995,961012,961964,962844,963081,963147,965032,965036,965056,965068,965074,965213,965268,965277,965302,965454,966371,966401,966428,979882-979883,979886,981036,981038,981095,981188,981220-981221,981237,981262,981278,981293,981306,981311,981985,982387,982393,982795,982800,983101,983110,983114,983119-983120,983128,983185,983236,983270,983276,983280,983316,983363,983370,983372,985458,985464,985626,985634,985661,985715,985717,985744,985748,985752,985763,985791,985796,985851,986844,986889,987313,987712-987715,987783,987832,987873,987883,987913,987935,990350,990369,990377,990384,990394,990398,990404,990434,990449,1001279,1001452 -/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java:728674,731798,733539,751964,761709,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 +/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/transport/http/util/QueryStringParserTest.java:728674,731798,732539,732541,732873,732877,733293,733295,733304,733306,733348,733354,733394,733399,733463-733464,733533,733539,733676,751964,761709,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 Propchange: axis/axis2/java/core/branches/1_5/modules/parent/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sat Oct 30 17:26:27 2010 @@ -1,2 +1,2 @@ /axis/axis2/java/core/trunk/modules/parent:922914,922941,922983,935169,935174,935338,936434,944347,944915,951385,960693,960976,960978,960984,960995,961012,961964,962844,963081,963147,965032,965036,965056,965068,965074,965213,965268,965277,965302,965454,966371,966401,966428,979882-979883,979886,981036,981038,981095,981188,981220-981221,981237,981262,981278,981293,981306,981311,981985,982387,982393,982795,982800,983101,983110,983114,983119-983120,983128,983185,983236,983270,983276,983280,983316,983363,983370,983372,985458,985464,985626,985634,985661,985715,985717,985744,985748,985752,985763,985791,985796,985851,986844,986889,987313,987712-987715,987783,987832,987873,987883,987913,987935,990350,990369,990377,990384,990394,990398,990404,990434,990449,1001279,1001452 -/webservices/axis2/trunk/java/modules/parent:728674,731798,732924,732927,732939,733539,733776,741873,748761,751964,754458,754467,754503,757151-757153,759488,759507,759878,759968,761025,761044,761709,761770,761952,763148,765102,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 +/webservices/axis2/trunk/java/modules/parent:728674,731798,732539,732541,732873,732877,732924,732927,732939,733293,733295,733304,733306,733348,733354,733394,733399,733463-733464,733533,733539,733676,733776,741873,748761,751964,754458,754467,754503,757151-757153,759488,759507,759878,759968,761025,761044,761709,761770,761952,763148,765102,771051,777648,777882,777897,777934,778060,780546,783479,795431,801630,803725,805578,805981,805999,806085,806331,807160,807487,807512,816740,816804,816812,816891,817965,821686,821689,834058,834175,902271,904660,904780,905980 Modified: axis/axis2/java/core/branches/1_5/modules/saaj/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/pom.xml?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/pom.xml (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/pom.xml Sat Oct 30 17:26:27 2010 @@ -67,6 +67,18 @@ log4j test + + com.sun.xml.messaging.saaj + saaj-impl + 1.3 + test + + + javax.xml.soap + saaj-api + + + src Modified: axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java Sat Oct 30 17:26:27 2010 @@ -192,7 +192,6 @@ public class AttachmentPartImpl extends public void setContent(Object object, String contentType) { SAAJDataSource source; setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE, contentType); - Object contentObject; if (object instanceof String) { try { String s = (String)object; @@ -202,7 +201,6 @@ public class AttachmentPartImpl extends contentType, true); extractFilename(source); this.dataHandler = new DataHandler(source); - contentObject = object; } catch (java.io.IOException io) { throw new java.lang.IllegalArgumentException("Illegal Argument"); } @@ -214,7 +212,6 @@ public class AttachmentPartImpl extends contentType, true); extractFilename(source); this.dataHandler = new DataHandler(source); - contentObject = null; // the stream has been consumed } catch (java.io.IOException io) { throw new java.lang.IllegalArgumentException("Illegal Argument"); } @@ -225,20 +222,17 @@ public class AttachmentPartImpl extends contentType, true); extractFilename(source); this.dataHandler = new DataHandler(source); - contentObject = null; // the stream has been consumed } catch (java.io.IOException io) { throw new java.lang.IllegalArgumentException("Illegal Argument"); } } else if (object instanceof BufferedImage) { try { this.dataHandler = new DataHandler(object, contentType); - contentObject = null; // the stream has been consumed } catch (Exception e) { throw new java.lang.IllegalArgumentException(e.getMessage()); } } else if (object instanceof byte[]) { try { - contentObject = null; java.io.ByteArrayInputStream bais = new java.io.ByteArrayInputStream((byte[])object); source = new SAAJDataSource(bais, @@ -247,7 +241,6 @@ public class AttachmentPartImpl extends extractFilename(source); this.dataHandler = new DataHandler(source); - contentObject = object; } catch (Exception e) { throw new java.lang.IllegalArgumentException(e.getMessage()); } Modified: axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java Sat Oct 30 17:26:27 2010 @@ -19,6 +19,7 @@ package org.apache.axis2.saaj; +import org.apache.axiom.attachments.Attachments; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNode; @@ -33,6 +34,7 @@ import org.apache.axis2.client.ServiceCl import org.apache.axis2.context.MessageContext; import org.apache.axis2.engine.AxisConfiguration; import org.apache.axis2.engine.DispatchPhase; +import org.apache.axis2.engine.Phase; import org.apache.axis2.saaj.util.IDGenerator; import org.apache.axis2.saaj.util.SAAJUtil; import org.apache.axis2.saaj.util.UnderstandAllHeadersHandler; @@ -56,12 +58,10 @@ import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; -import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.StringTokenizer; @@ -74,8 +74,6 @@ public class SOAPConnectionImpl extends private boolean closed = false; private ServiceClient serviceClient; - private HashMap unaccessedAttachments = new HashMap(); - /** * Sends the given message to the specified endpoint and blocks until it has returned the @@ -122,12 +120,77 @@ public class SOAPConnectionImpl extends opClient.setOptions(options); - if (request.countAttachments() != 0) { // SOAPMessage with attachments - opClient.getOptions().setProperty(Constants.Configuration.ENABLE_MTOM, - Constants.VALUE_TRUE); - return handleSOAPMessage(request, opClient); - } else { // simple SOAPMessage - return handleSOAPMessage(request, opClient); + MessageContext requestMsgCtx = new MessageContext(); + org.apache.axiom.soap.SOAPEnvelope envelope = + SAAJUtil.toOMSOAPEnvelope(request.getSOAPPart().getDocumentElement()); + if (isMTOM(request)) { + Map attachmentMap = new HashMap(); + for (Iterator it = request.getAttachments(); it.hasNext(); ) { + AttachmentPart attachment = (AttachmentPart)it.next(); + String contentId = attachment.getContentId(); + if (contentId != null) { + DataHandler dh = attachment.getDataHandler(); + if (dh == null) { + throw new SOAPException("Attachment with NULL DataHandler"); + } + attachmentMap.put(contentId, dh); + } + } + insertAttachmentNodes(attachmentMap, envelope); + options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE); + } else if (request.countAttachments() != 0) { // SOAPMessage with attachments + Attachments attachments = requestMsgCtx.getAttachmentMap(); + for (Iterator it = request.getAttachments(); it.hasNext(); ) { + AttachmentPart attachment = (AttachmentPart)it.next(); + String contentId = attachment.getContentId(); + // Axiom currently doesn't support attachments without Content-ID + // (see WSCOMMONS-418); generate one if necessary. + if (contentId == null) { + contentId = IDGenerator.generateID(); + } + attachments.addDataHandler(contentId, attachment.getDataHandler()); + } + options.setProperty(Constants.Configuration.ENABLE_SWA, Constants.VALUE_TRUE); + } + + MessageContext responseMsgCtx; + try { + requestMsgCtx.setEnvelope(envelope); + opClient.addMessageContext(requestMsgCtx); + opClient.execute(true); + responseMsgCtx = + opClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE); + } catch (AxisFault ex) { + throw new SOAPException(ex.getMessage(), ex); + } + + SOAPMessage response = getSOAPMessage(responseMsgCtx.getEnvelope()); + Attachments attachments = requestMsgCtx.getAttachmentMap(); + for (String contentId : attachments.getAllContentIDs()) { + if (!contentId.equals(attachments.getSOAPPartContentID())) { + AttachmentPart ap = response.createAttachmentPart( + attachments.getDataHandler(contentId)); + ap.setContentId(contentId); + response.addAttachmentPart(ap); + } + } + + try { + requestMsgCtx.getTransportOut().getSender().cleanup(requestMsgCtx); + } catch (AxisFault axisFault) { + // log error + } + + return response; + } + + private static boolean isMTOM(SOAPMessage soapMessage) { + SOAPPart soapPart = soapMessage.getSOAPPart(); + String[] contentTypes = soapPart.getMimeHeader("Content-Type"); + if (contentTypes != null && contentTypes.length > 0) { + return SAAJUtil.normalizeContentType(contentTypes[0]).equals("application/xop+xml"); + } else { + return false; } } @@ -147,10 +210,8 @@ public class SOAPConnectionImpl extends } } - private static DispatchPhase getDispatchPhase(List phases) { - Iterator iter = phases.iterator(); - while(iter.hasNext()) { - Object phase = iter.next(); + private static DispatchPhase getDispatchPhase(List phases) { + for (Phase phase : phases) { if (phase instanceof DispatchPhase) { return (DispatchPhase)phase; } @@ -178,29 +239,6 @@ public class SOAPConnectionImpl extends closed = true; } - private SOAPMessage handleSOAPMessage(SOAPMessage request, - OperationClient opClient) throws SOAPException { - - MessageContext requestMsgCtx = new MessageContext(); - try { - requestMsgCtx.setEnvelope(toOMSOAPEnvelope(request)); - opClient.addMessageContext(requestMsgCtx); - opClient.execute(true); - - MessageContext msgCtx = - opClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE); - return getSOAPMessage(msgCtx.getEnvelope()); - } catch (Exception e) { - throw new SOAPException(e.getMessage(), e); - } finally { - try { - requestMsgCtx.getTransportOut().getSender().cleanup(requestMsgCtx); - } catch (Exception e) { - // ignore the error, better to log somewhere if possible. - } - } - } - /** * This method handles the conversion of an OM SOAP Envelope to a SAAJ SOAPMessage * @@ -248,15 +286,6 @@ public class SOAPConnectionImpl extends // Convert the body toSAAJElement(body, respOMSoapEnv.getBody(), response); - // if there are unrefferenced attachments, add that to response - if (!unaccessedAttachments.isEmpty()) { - Collection attachments = unaccessedAttachments.values(); - Iterator attachementsIterator = attachments.iterator(); - while (attachementsIterator.hasNext()) { - AttachmentPart attachment = (AttachmentPart)attachementsIterator.next(); - response.addAttachmentPart(attachment); - } - } return response; } @@ -327,61 +356,14 @@ public class SOAPConnectionImpl extends } /** - * Converts a SAAJ SOAPMessage to an OM SOAPEnvelope - * - * @param saajSOAPMsg - * @return - * @throws SOAPException - */ - protected org.apache.axiom.soap.SOAPEnvelope toOMSOAPEnvelope(SOAPMessage saajSOAPMsg) - throws SOAPException { - - final org.apache.axiom.soap.SOAPEnvelope omSOAPEnv = - SAAJUtil.toOMSOAPEnvelope(saajSOAPMsg.getSOAPPart().getDocumentElement()); - - - Map attachmentMap = new HashMap(); - final Iterator attachments = saajSOAPMsg.getAttachments(); - while (attachments.hasNext()) { - final AttachmentPart attachment = (AttachmentPart)attachments.next(); - if (attachment.getContentId() == null || - attachment.getContentId().trim().length() == 0) { - attachment.setContentId(IDGenerator.generateID()); - } - if (attachment.getDataHandler() == null) { - throw new SOAPException("Attachment with NULL DataHandler"); - } - attachmentMap.put(attachment.getContentId(), attachment); - } - - //Get keys of attachments to a hashmap - //This hashmap will be updated when attachment is accessed atleast once. - //Doing this here instead of inside insertAttachmentNodes()is much simpler - //as insertAttachmentNodes() has recursive calls - Set keySet = attachmentMap.keySet(); - Iterator keySetItr = keySet.iterator(); - HashMap keyAccessStatus = new HashMap(); - while (keySetItr.hasNext()) { - String key = (String)keySetItr.next(); - keyAccessStatus.put(key, "not-accessed"); - } - - insertAttachmentNodes(attachmentMap, omSOAPEnv, keyAccessStatus); - unaccessedAttachments = - getUnReferencedAttachmentNodes(attachmentMap, omSOAPEnv, keyAccessStatus); - - return omSOAPEnv; - } - - /** * Inserts the attachments in the proper places * * @param attachments * @param omEnvelope * @throws SOAPException */ - private void insertAttachmentNodes(Map attachments, - OMElement omEnvelope, HashMap keyAccessStatus) + private void insertAttachmentNodes(Map attachments, + OMElement omEnvelope) throws SOAPException { Iterator childIter = omEnvelope.getChildElements(); @@ -392,43 +374,18 @@ public class SOAPConnectionImpl extends if (contentID != null) {//This is an omEnvelope referencing an attachment child.build(); - AttachmentPart ap = ((AttachmentPart)attachments.get(contentID.trim())); + DataHandler dh = attachments.get(contentID.trim()); //update the key status as accessed - keyAccessStatus.put(contentID.trim(), "accessed"); - OMText text = new OMTextImpl(ap.getDataHandler(), true, + OMText text = new OMTextImpl(dh, true, omEnvelope.getOMFactory()); child.removeAttribute(hrefAttr); child.addChild(text); } else { //possibly there can be references in the children of this omEnvelope //so recurse through. - insertAttachmentNodes(attachments, child, keyAccessStatus); - } - } - } - - - private HashMap getUnReferencedAttachmentNodes(Map attachments, - OMElement omEnvelope, HashMap keyAccessStatus) - throws SOAPException { - - HashMap unaccessedAttachments = new HashMap(); - //now check for unaccessed keys - Set keySet = keyAccessStatus.keySet(); - Iterator keySetItr = keySet.iterator(); - while (keySetItr.hasNext()) { - String key = (String)keySetItr.next(); - String keyStatus = (String)keyAccessStatus.get(key); - if ("not-accessed".equals(keyStatus)) { - //The value for this key has not been accessed in the - //referencing attachment scenario.Hence it must be an - //unreferenced one. - AttachmentPart ap = ((AttachmentPart)attachments.get(key)); - unaccessedAttachments.put(key, ap); - keyAccessStatus.put(key, "accessed"); + insertAttachmentNodes(attachments, child); } } - return unaccessedAttachments; } /** Modified: axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java Sat Oct 30 17:26:27 2010 @@ -27,6 +27,7 @@ import org.apache.axiom.soap.SOAP12Const import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory; import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory; +import org.apache.axis2.saaj.util.SAAJUtil; import org.apache.axis2.transport.http.HTTPConstants; import javax.activation.DataHandler; @@ -55,30 +56,19 @@ public class SOAPMessageImpl extends SOA private SOAPPart soapPart; private Collection attachmentParts = new ArrayList(); - private MimeHeadersEx mimeHeaders; + private MimeHeaders mimeHeaders; - private Map props = new Hashtable(); + private Map props = new Hashtable(); private boolean saveRequired; public SOAPMessageImpl(SOAPEnvelopeImpl soapEnvelope) { - String contentType = null; - - - if (mimeHeaders != null) { - String contentTypes[] = mimeHeaders.getHeader(HTTPConstants.CONTENT_TYPE); - contentType = (contentTypes != null) ? contentTypes[0] : null; - } else { - this.mimeHeaders = new MimeHeadersEx(); - if (soapEnvelope.getOMFactory() instanceof SOAP11Factory) { - contentType = HTTPConstants.MEDIA_TYPE_TEXT_XML; - this.mimeHeaders.addHeader("content-type", contentType); - } else if (soapEnvelope.getOMFactory() instanceof SOAP12Factory) { - contentType = HTTPConstants.MEDIA_TYPE_APPLICATION_SOAP_XML; - this.mimeHeaders.addHeader("content-type", contentType); - } + this.mimeHeaders = new MimeHeaders(); + if (soapEnvelope.getOMFactory() instanceof SOAP11Factory) { + this.mimeHeaders.addHeader("content-type", HTTPConstants.MEDIA_TYPE_TEXT_XML); + } else if (soapEnvelope.getOMFactory() instanceof SOAP12Factory) { + this.mimeHeaders.addHeader("content-type", + HTTPConstants.MEDIA_TYPE_APPLICATION_SOAP_XML); } - - setCharsetEncoding(contentType); soapPart = new SOAPPartImpl(this, soapEnvelope); } @@ -90,18 +80,10 @@ public class SOAPMessageImpl extends SOA String contentTypes[] = mimeHeaders.getHeader(HTTPConstants.CONTENT_TYPE); if (contentTypes != null && contentTypes.length > 0) { tmpContentType = contentTypes[0]; - //tmpContentType can be like 'application/soap+xml; charset=UTF-8;' - //Only the first part is important - if (tmpContentType.indexOf(";") > -1) { - contentType = tmpContentType.substring(0, tmpContentType.indexOf(";")); - } else { - contentType = tmpContentType; - } + contentType = SAAJUtil.normalizeContentType(tmpContentType); } } - //Setting the whole content-type string to CharsetEncoding. - //Is this correct? - setCharsetEncoding(tmpContentType); + initCharsetEncodingFromContentType(tmpContentType); if (contentType != null) { soapPart = new SOAPPartImpl(this, inputstream, mimeHeaders); } else { @@ -109,8 +91,8 @@ public class SOAPMessageImpl extends SOA } this.mimeHeaders = (mimeHeaders == null) ? - new MimeHeadersEx() : - new MimeHeadersEx(mimeHeaders); + new MimeHeaders() : + SAAJUtil.copyMimeHeaders(mimeHeaders); } /** @@ -193,7 +175,7 @@ public class SOAPMessageImpl extends SOA * header that matches one of the given headers */ public Iterator getAttachments(javax.xml.soap.MimeHeaders headers) { - Collection matchingAttachmentParts = new ArrayList(); + Collection matchingAttachmentParts = new ArrayList(); Iterator iterator = getAttachments(); { AttachmentPartImpl part; @@ -439,14 +421,10 @@ public class SOAPMessageImpl extends SOA * @since SAAJ 1.3 */ public void removeAttachments(MimeHeaders headers) { - Collection newAttachmentParts = new ArrayList(); - Iterator attachmentPartsItr = attachmentParts.iterator(); - for (Iterator iter = attachmentPartsItr; iter.hasNext();) { - AttachmentPart attachmentPart = (AttachmentPart)iter.next(); - + Collection newAttachmentParts = new ArrayList(); + for (AttachmentPart attachmentPart : attachmentParts) { //Get all the headers - Iterator allMIMEHeaders = headers.getAllHeaders(); - for (Iterator iterator = allMIMEHeaders; iterator.hasNext();) { + for (Iterator iterator = headers.getAllHeaders(); iterator.hasNext();) { MimeHeader mimeHeader = (MimeHeader)iterator.next(); String[] headerValues = attachmentPart.getMimeHeader(mimeHeader.getName()); //if values for this header name, do not remove it @@ -487,7 +465,7 @@ public class SOAPMessageImpl extends SOA * * @param contentType */ - private void setCharsetEncoding(final String contentType) { + private void initCharsetEncodingFromContentType(final String contentType) { if (contentType != null) { int delimiterIndex = contentType.lastIndexOf("charset"); if (delimiterIndex > 0) { Modified: axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java Sat Oct 30 17:26:27 2010 @@ -31,6 +31,7 @@ import org.apache.axiom.soap.impl.dom.so import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory; import org.apache.axis2.builder.BuilderUtil; import org.apache.axis2.saaj.util.IDGenerator; +import org.apache.axis2.saaj.util.SAAJUtil; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -52,7 +53,6 @@ import org.w3c.dom.ProcessingInstruction import org.w3c.dom.Text; import org.w3c.dom.UserDataHandler; -import javax.xml.soap.MimeHeader; import javax.xml.soap.MimeHeaders; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPEnvelope; @@ -73,7 +73,6 @@ import javax.xml.transform.stream.Stream import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; -import java.io.InputStreamReader; import java.util.Iterator; public class SOAPPartImpl extends SOAPPart { @@ -83,15 +82,13 @@ public class SOAPPartImpl extends SOAPPa private Document document; private SOAPMessage soapMessage; private SOAPEnvelopeImpl envelope; - private MimeHeadersEx mimeHeaders = new MimeHeadersEx(); - - private Source source; + private final MimeHeaders mimeHeaders; public SOAPPartImpl(SOAPMessageImpl parentSoapMsg, SOAPEnvelopeImpl soapEnvelope) { //setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, IDGenerator.generateID()); //setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE, "text/xml"); - this.mimeHeaders = (MimeHeadersEx)parentSoapMsg.getMimeHeaders(); + this.mimeHeaders = parentSoapMsg.getMimeHeaders(); soapMessage = parentSoapMsg; envelope = soapEnvelope; document = soapEnvelope.getOwnerDocument(); @@ -105,41 +102,31 @@ public class SOAPPartImpl extends SOAPPa String fullContentTypeStr = ""; if (mimeHeaders == null) { //TODO : read string from constants - mimeHeaders = new MimeHeaders(); - mimeHeaders.addHeader("Content-ID", IDGenerator.generateID()); - mimeHeaders.addHeader("content-type", HTTPConstants.MEDIA_TYPE_APPLICATION_SOAP_XML); + this.mimeHeaders = new MimeHeaders(); + this.mimeHeaders.addHeader("Content-ID", IDGenerator.generateID()); + this.mimeHeaders.addHeader("content-type", HTTPConstants.MEDIA_TYPE_APPLICATION_SOAP_XML); } else { String contentTypes[] = mimeHeaders.getHeader(HTTPConstants.CONTENT_TYPE); if (contentTypes != null && contentTypes.length > 0) { fullContentTypeStr = contentTypes[0]; - contentType = extractFirstPart(fullContentTypeStr); + contentType = SAAJUtil.normalizeContentType(fullContentTypeStr); } + this.mimeHeaders = SAAJUtil.copyMimeHeaders(mimeHeaders); } - Iterator mimeHeaderIterator = mimeHeaders.getAllHeaders(); - while (mimeHeaderIterator.hasNext()) { - MimeHeader mimeHeader = (MimeHeader)mimeHeaderIterator.next(); - String value = mimeHeader.getValue(); - setMimeHeader(mimeHeader.getName(), value); - } soapMessage = parentSoapMsg; String knownEncoding = (String) soapMessage.getProperty(SOAPMessage.CHARACTER_SET_ENCODING); XMLStreamReader xmlReader = null; - InputStream modifiedInputStream = null; StAXSOAPModelBuilder builder = null; - InputStreamReader isReader = null; if (contentType.indexOf("multipart/related") == 0) { //This contains attachements try { Attachments attachments = new Attachments(inputStream, fullContentTypeStr, false, "", ""); - modifiedInputStream = attachments.getSOAPPartInputStream(); - isReader = new InputStreamReader(modifiedInputStream); - String soapEnvelopeNamespaceURI = BuilderUtil.getEnvelopeNamespace(fullContentTypeStr); @@ -180,15 +167,13 @@ public class SOAPPartImpl extends SOAPPa throw new SOAPException(e); } } else { - modifiedInputStream = inputStream; try { - isReader = new InputStreamReader(modifiedInputStream); XMLStreamReader streamReader = null; if(knownEncoding != null){ - streamReader = StAXUtils.createXMLStreamReader(modifiedInputStream, knownEncoding); + streamReader = StAXUtils.createXMLStreamReader(inputStream, knownEncoding); }else{ - streamReader = StAXUtils.createXMLStreamReader(modifiedInputStream); + streamReader = StAXUtils.createXMLStreamReader(inputStream); } if (HTTPConstants.MEDIA_TYPE_TEXT_XML.equals(contentType)) { @@ -201,10 +186,6 @@ public class SOAPPartImpl extends SOAPPa new SOAP12Factory(), SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI); - } else if (HTTPConstants.MEDIA_TYPE_MULTIPART_RELATED.equals(contentType)) { - builder = new StAXSOAPModelBuilder(streamReader, - new SOAP11Factory(), - null); } else { builder = new StAXSOAPModelBuilder(streamReader, new SOAP11Factory(), @@ -221,26 +202,11 @@ public class SOAPPartImpl extends SOAPPa envelope.element.build(); this.document = envelope.getOwnerDocument(); envelope.setSOAPPartParent(this); - javax.xml.transform.Source xmlSource = - new javax.xml.transform.stream.StreamSource( isReader); - this.source = xmlSource; } catch (Exception e) { throw new SOAPException(e); } } - private String extractFirstPart(String fullContentTypeStr) { - String contentType;//tmpContentType can be like 'application/soap+xml; charset=UTF-8;' - //Only the first part is important - if (fullContentTypeStr.indexOf(";") > -1) { - contentType = fullContentTypeStr.substring(0, fullContentTypeStr.indexOf(";")); - } else { - contentType = fullContentTypeStr; - } - return contentType; - } - - public SOAPPartImpl(SOAPMessageImpl parentSoapMsg, InputStream inputStream) throws SOAPException { this(parentSoapMsg, inputStream, null); @@ -370,7 +336,6 @@ public class SOAPPartImpl extends SOAPPa } public void setContent(Source source) throws SOAPException { - this.source = source; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -422,9 +387,7 @@ public class SOAPPartImpl extends SOAPPa * @see #setContent(javax.xml.transform.Source) setContent(javax.xml.transform.Source) */ public Source getContent() throws SOAPException { - DOMSource domSource = new DOMSource(this.document); - this.source = domSource; - return source; + return new DOMSource(this.document); } /** Modified: axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/util/SAAJUtil.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/util/SAAJUtil.java?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/util/SAAJUtil.java (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/src/org/apache/axis2/saaj/util/SAAJUtil.java Sat Oct 30 17:26:27 2010 @@ -30,8 +30,12 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.soap.MimeHeader; +import javax.xml.soap.MimeHeaders; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.util.Iterator; /** Utility class for the Axis2-WSS4J Module */ public class SAAJUtil { @@ -131,4 +135,32 @@ public class SAAJUtil { factory.setNamespaceAware(true); return factory.newDocumentBuilder().parse(bais).getDocumentElement(); } + + /** + * Create a copy of an existing {@link MimeHeaders} object. + * + * @param headers the object to copy + * @return a copy of the {@link MimeHeaders} object + */ + public static MimeHeaders copyMimeHeaders(MimeHeaders headers) { + MimeHeaders result = new MimeHeaders(); + Iterator iterator = headers.getAllHeaders(); + while (iterator.hasNext()) { + MimeHeader hdr = (MimeHeader)iterator.next(); + result.addHeader(hdr.getName(), hdr.getValue()); + } + return result; + } + + /** + * Normalize a content type specification. This removes all parameters + * from the content type and converts it to lower case. + * + * @param contentType the content type to normalize + * @return the normalized content type + */ + public static String normalizeContentType(String contentType) { + int idx = contentType.indexOf(";"); + return (idx == -1 ? contentType : contentType.substring(0, idx)).trim().toLowerCase(); + } } Modified: axis/axis2/java/core/branches/1_5/modules/saaj/test-resources/message.bin URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/test-resources/message.bin?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/test-resources/message.bin (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/test-resources/message.bin Sat Oct 30 17:26:27 2010 @@ -1,14 +1,14 @@ ---MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307 -content-type: application/xop+xml; charset=UTF-8; type="text/xml"; -content-transfer-encoding: binary -content-id: <0.urn:uuid:F02ECC18873CFB73E211412748909308@apache.org> - -This is Header1This is Header2This is Header3This is Header4This is Child1This is Child2 ---MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307 -content-type: text/xml -content-transfer-encoding: binary -content-id: <1.urn:uuid:F02ECC18873CFB73E211412748909349@apache.org> - -TATA - ---MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307-- +--MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307 +content-type: application/xop+xml; charset=UTF-8; type="text/xml"; +content-transfer-encoding: binary +content-id: <0.urn:uuid:F02ECC18873CFB73E211412748909308@apache.org> + +This is Header1This is Header2This is Header3This is Header4This is Child1This is Child2 +--MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307 +content-type: text/xml +content-transfer-encoding: binary +content-id: <1.urn:uuid:F02ECC18873CFB73E211412748909349@apache.org> + +TATA + +--MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307-- Modified: axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/MessageFactoryTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/MessageFactoryTest.java?rev=1029125&r1=1029124&r2=1029125&view=diff ============================================================================== --- axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/MessageFactoryTest.java (original) +++ axis/axis2/java/core/branches/1_5/modules/saaj/test/org/apache/axis2/saaj/MessageFactoryTest.java Sat Oct 30 17:26:27 2010 @@ -21,11 +21,17 @@ package org.apache.axis2.saaj; import org.custommonkey.xmlunit.XMLTestCase; +import javax.xml.soap.AttachmentPart; import javax.xml.soap.MessageFactory; import javax.xml.soap.MimeHeaders; import javax.xml.soap.SOAPMessage; +import javax.xml.soap.SOAPPart; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.Iterator; /** * @@ -127,4 +133,60 @@ public class MessageFactoryTest extends fail("Exception: " + e); } } + + // Unit tests for (unresolved) issue AXIS2-4189 +/* + public void testParseMTOMMessage() throws Exception { + SAAJTestUtil.execute(new SAAJTestUtil.Test() { + public void execute(MessageFactory mf) throws Exception { + MimeHeaders headers = new MimeHeaders(); + headers.addHeader("Content-Type", + "multipart/related; " + + "boundary=\"MIMEBoundaryurn:uuid:F02ECC18873CFB73E211412748909307\"; " + + "type=\"application/xop+xml\"; " + + "start=\"<0.urn:uuid:F02ECC18873CFB73E211412748909308@apache.org>\"; " + + "start-info=\"text/xml\"; " + + "charset=UTF-8;" + + "action=\"mtomSample\""); + InputStream in = new FileInputStream(System.getProperty("basedir", ".") + + "/test-resources/message.bin"); + SOAPMessage message = mf.createMessage(headers, in); + SOAPPart soapPart = message.getSOAPPart(); + assertEquals("<0.urn:uuid:F02ECC18873CFB73E211412748909308@apache.org>", + soapPart.getContentId()); + Iterator attachments = message.getAttachments(); + assertTrue(attachments.hasNext()); + AttachmentPart ap = (AttachmentPart)attachments.next(); + assertEquals("<1.urn:uuid:F02ECC18873CFB73E211412748909349@apache.org>", + ap.getContentId()); + assertFalse(attachments.hasNext()); + } + }); + } + + public void testParseSwAMessage() throws Exception { + SAAJTestUtil.execute(new SAAJTestUtil.Test() { + public void execute(MessageFactory mf) throws Exception { + MimeHeaders headers = new MimeHeaders(); + headers.addHeader("Content-Type", + "multipart/related; " + + "boundary=MIMEBoundaryurn_uuid_E3F7CE4554928DA89B1231365678616; " + + "type=\"text/xml\"; " + + "start=\"<0.urn:uuid:E3F7CE4554928DA89B1231365678617@apache.org>\""); + InputStream in = new FileInputStream(System.getProperty("basedir", ".") + + "/test-resources/SwAmessage.bin"); + SOAPMessage message = mf.createMessage(headers, in); + SOAPPart soapPart = message.getSOAPPart(); + assertEquals("<0.urn:uuid:E3F7CE4554928DA89B1231365678617@apache.org>", + soapPart.getContentId()); + Iterator attachments = message.getAttachments(); + assertTrue(attachments.hasNext()); + AttachmentPart ap = (AttachmentPart)attachments.next(); + assertEquals("", + ap.getContentId()); + assertFalse(attachments.hasNext()); + } + }); + } +*/ }