Author: thilina Date: Mon Sep 11 02:18:41 2006 New Revision: 442132 URL: http://svn.apache.org/viewvc?view=rev&rev=442132 Log: SOAP with attachments support Fixed the FIle caching to have a correct content-type Introduced TreeMap (Ordered Map) to store the attachments without changing the order of attachments Improved the logic in Attachments to handle the errors in a better way.
Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/CachedFileDataSource.java (with props) webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java - copied, changed from r441444, webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/MIMEHelperTest.java Removed: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/MIMEHelperTest.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartOnFile.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/MIMEOutputUtilsTest.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java?view=diff&rev=442132&r1=442131&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java Mon Sep 11 02:18:41 2006 @@ -16,21 +16,23 @@ package org.apache.axiom.attachments; -import org.apache.axiom.om.OMException; -import org.apache.axiom.om.impl.MTOMConstants; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import javax.activation.DataHandler; -import javax.mail.MessagingException; -import javax.mail.internet.ContentType; -import javax.mail.internet.ParseException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; -import java.util.HashMap; import java.util.Set; +import java.util.TreeMap; + +import javax.activation.DataHandler; +import javax.mail.MessagingException; +import javax.mail.internet.ContentType; +import javax.mail.internet.ParseException; + +import org.apache.axiom.om.OMException; +import org.apache.axiom.om.impl.MTOMConstants; +import org.apache.axiom.om.util.UUIDGenerator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; public class Attachments { @@ -59,10 +61,10 @@ PushbackInputStream pushbackInStream; /** - * <code>mimeBodyPartsMap</code> stores the already parsed Mime Body - * Parts. This Map will be keyed using the content-ID's + * <code>attachmentsMap</code> stores the Data Handlers of the already parsed Mime Body + * Parts. This ordered Map is keyed using the content-ID's. */ - HashMap bodyPartsMap; + TreeMap attachmentsMap; /** * <code>partIndex</code>- Number of Mime parts parsed @@ -73,24 +75,32 @@ IncomingAttachmentStreams streams = null; /** <code>boolean</code> Indicating if any streams have been directly requested */ - boolean streamsRequested = false; + private boolean streamsRequested = false; /** <code>boolean</code> Indicating if any data handlers have been directly requested */ - boolean partsRequested = false; + private boolean partsRequested = false; /** * <code>endOfStreamReached</code> flag which is to be set by * MIMEBodyPartStream when MIME message terminator is found. */ - boolean endOfStreamReached; + private boolean endOfStreamReached; + + + /** + * <code>noStreams</code> flag which is to be set when this class is + * instantiated by the SwA API to handle programatic added attachements. An + * InputStream with attachments is not present at that occation. + */ + private boolean noStreams = false; - String firstPartId; + private String firstPartId; - boolean fileCacheEnable; + private boolean fileCacheEnable; - String attachmentRepoDir; + private String attachmentRepoDir; - int fileStorageThreshold; + private int fileStorageThreshold; protected Log log = LogFactory.getLog(getClass()); @@ -115,7 +125,7 @@ } else { this.fileStorageThreshold = 1; } - bodyPartsMap = new HashMap(); + attachmentsMap = new TreeMap(); try { contentType = new ContentType(contentTypeString); } catch (ParseException e) { @@ -163,7 +173,7 @@ } // Read the SOAP part and cache it - getPart(getSOAPPartContentID()); + getDataHandler(getSOAPPartContentID()); // Now reset partsRequested. SOAP part is a special case which is always // read beforehand, regardless of request. @@ -181,6 +191,15 @@ throws OMException { this(inStream, contentTypeString, false, null, null); } + + /** + * Use this constructor when instantiating this to store the attachments set programatically through the SwA API. + */ + public Attachments() + { + attachmentsMap = new TreeMap(); + noStreams= true; + } /** * @return whether Message Type is SOAP with Attachments or MTOM optimized, @@ -195,11 +214,50 @@ this.applicationType = MTOMConstants.SWA_TYPE; } else { throw new OMException( - "Invalid Application type. Support available for MTOM/SOAP 1.2 & SwA/SOAP 1.l only."); + "Invalid Application type. Support available for MTOM & SwA/SOAP 1.l only."); } } return this.applicationType; } + + /** + * Checks whether the MIME part is already parsed by checking the + * attachments HashMap. If it is not parsed yet then call the getNextPart() + * till the required part is found. + * + * @param blobContentID (without the surrounding angle brackets and "cid:" prefix) + * @return The DataHandler of the mime part referred by the Content-Id + * @return *null* if the mime part referred by the content-id does not exist + */ + public DataHandler getDataHandler(String blobContentID) { + DataHandler dataHandler; + if (attachmentsMap.containsKey(blobContentID)) { + dataHandler = (DataHandler) attachmentsMap.get(blobContentID); + return dataHandler; + } else if (!noStreams){ + //This loop will be terminated by the Exceptions thrown if the Mime + // part searching was not found + while ((dataHandler = this.getNextPartDataHandler())!=null) { + if (attachmentsMap.containsKey(blobContentID)) { + dataHandler = (DataHandler) attachmentsMap.get(blobContentID); + return dataHandler; + } + } + } + return null; + } + + /** + * Programatically adding an SOAP with Attachments(SwA) Attachment. These + * attachments will get serialized only if SOAP with Attachments is enabled. + * + * @param contentID + * @param dataHandler + */ + public void addDataHandler(String contentID, DataHandler dataHandler) + { + attachmentsMap.put(contentID,dataHandler); + } /** * @return the InputStream which includes the SOAP Envelope. It assumes that @@ -208,6 +266,10 @@ */ public InputStream getSOAPPartInputStream() throws OMException { DataHandler dh; + if (noStreams) + { + throw new OMException("Invalid operation. Attachments are created programatically."); + } try { dh = getDataHandler(getSOAPPartContentID()); if (dh == null) { @@ -233,7 +295,7 @@ // to handle the Start parameter not mentioned situation if (rootContentID == null) { if (partIndex == 0) { - getNextPart(); + getNextPartDataHandler(); } rootContentID = firstPartId; } else { @@ -253,41 +315,31 @@ } public String getSOAPPartContentType() { - Part soapPart = getPart(getSOAPPartContentID()); - try { - return soapPart.getContentType(); - } catch (MessagingException e) { - log.error(e.getMessage()); - throw new OMException(e); - } + if (!noStreams) { + DataHandler soapPart = getDataHandler(getSOAPPartContentID()); + return soapPart.getContentType(); + }else + { + throw new OMException("The attachments map was created programatically. Unsupported operation."); + } } /** - * @param blobContentID (without the surrounding angle brackets and "cid:" prefix) - * @return The DataHandler of the mime part referred by the Content-Id - * @throws OMException - */ - public DataHandler getDataHandler(String blobContentID) throws OMException, IllegalStateException { - - try { - return getPart(blobContentID).getDataHandler(); - } catch (MessagingException e) { - throw new OMException("Problem with Mime Body Part No " + partIndex - + ". ", e); - } - - } - - /** - * Stream based access - * - * @return The stream container of type <code>IncomingAttachmentStreams</code> - * @throws IllegalStateException if application has alreadt started using Part's directly - */ + * Stream based access + * + * @return The stream container of type + * <code>IncomingAttachmentStreams</code> + * @throws IllegalStateException + * if application has alreadt started using Part's directly + */ public IncomingAttachmentStreams getIncomingAttachmentStreams() throws IllegalStateException { if (partsRequested) { throw new IllegalStateException("The attachments stream can only be accessed once; either by using the IncomingAttachmentStreams class or by getting a collection of AttachmentPart objects. They cannot both be called within the life time of the same service request."); } + if (noStreams) + { + throw new IllegalStateException("The attachments map was created programatically. No streams are available."); + } streamsRequested = true; @@ -301,49 +353,29 @@ return this.streams; } - - /** - * Checks whether the MIME part is already parsed by checking the - * parts HashMap. If it is not parsed yet then call the getNextPart() - * till the required part is found. - * - * @param blobContentID - * @return The Part referred by the Content-Id - * @throws OMException - */ - public Part getPart(String blobContentID) { - Part bodyPart; - if (bodyPartsMap.containsKey(blobContentID)) { - bodyPart = (Part) bodyPartsMap.get(blobContentID); - return bodyPart; - } else { - //This loop will be terminated by the Exceptions thrown if the Mime - // part searching was not found - while (true) { - bodyPart = this.getNextPart(); - if (bodyPart == null) { - return null; - } - if (bodyPartsMap.containsKey(blobContentID)) { - bodyPart = (Part) bodyPartsMap.get(blobContentID); - return bodyPart; - } - } - } - } public String[] getAllContentIDs() { - Part bodyPart; - while (true) { - bodyPart = this.getNextPart(); - if (bodyPart == null) { + Set keys = getContentIDSet(); + return (String[]) keys.toArray(new String[keys.size()]); + } + + public Set getContentIDSet() { + DataHandler dataHandler; + while (!noStreams & true) { + dataHandler = this.getNextPartDataHandler(); + if (dataHandler == null) { break; } } - Set keys = bodyPartsMap.keySet(); - return (String[]) keys.toArray(new String[keys.size()]); + return attachmentsMap.keySet(); } + /** + * endOfStreamReached will be set to true if the message ended in MIME Style + * having "--" suffix with the last mime boundary + * + * @param value + */ protected void setEndOfStream(boolean value) { this.endOfStreamReached = value; } @@ -353,44 +385,59 @@ * @throws OMException throw if content id is null or if two MIME parts contain the * same content-ID & the exceptions throws by getPart() */ - private Part getNextPart() throws OMException { + private DataHandler getNextPartDataHandler() throws OMException { + if (endOfStreamReached) + { + return null; + } Part nextPart; nextPart = getPart(); - if (nextPart != null) { - String partContentID; - try { - partContentID = nextPart.getContentID(); - - if (partContentID == null & partIndex == 1) { - bodyPartsMap.put("firstPart", nextPart); - firstPartId = "firstPart"; - return nextPart; - } - if (partContentID == null) { - throw new OMException( - "Part content ID cannot be blank for non root MIME parts"); - } - if ((partContentID.indexOf("<") > -1) - & (partContentID.indexOf(">") > -1)) { - partContentID = partContentID.substring(1, (partContentID - .length() - 1)); - - } else if (partIndex == 1) { - firstPartId = partContentID; - } - if (bodyPartsMap.containsKey(partContentID)) { - throw new OMException( - "Two MIME parts with the same Content-ID not allowed."); - } - bodyPartsMap.put(partContentID, nextPart); - return nextPart; - } catch (MessagingException e) { - throw new OMException("Error reading Content-ID from the Part." - + e); - } - } else { - return null; - } + if (nextPart==null) + { + return null; + } else + try { + if (nextPart.getSize()>0) { + String partContentID; + try { + partContentID = nextPart.getContentID(); + + if (partContentID == null & partIndex == 1) { + String id = "firstPart_"+UUIDGenerator.getUUID(); + attachmentsMap.put(id, nextPart); + firstPartId = id; + return nextPart.getDataHandler(); + } + if (partContentID == null) { + throw new OMException( + "Part content ID cannot be blank for non root MIME parts"); + } + if ((partContentID.indexOf("<") > -1) + & (partContentID.indexOf(">") > -1)) { + partContentID = partContentID.substring(1, (partContentID + .length() - 1)); + + } else if (partIndex == 1) { + firstPartId = partContentID; + } + if (attachmentsMap.containsKey(partContentID)) { + throw new OMException( + "Two MIME parts with the same Content-ID not allowed."); + } + attachmentsMap.put(partContentID, nextPart.getDataHandler()); + return nextPart.getDataHandler(); + } catch (MessagingException e) { + throw new OMException("Error reading Content-ID from the Part." + + e); + } + } // This will take care if stream ended without having MIME + // message terminator + else { + return null; + } + } catch (MessagingException e) { + throw new OMException(e); + } } /** @@ -404,13 +451,6 @@ } partsRequested = true; - - // endOfStreamReached will be set to true if the message ended in MIME - // Style having "--" suffix with the last mime boundary - if (endOfStreamReached) { - throw new OMException( - "Referenced MIME part not found.End of Stream reached."); - } Part part; @@ -423,7 +463,7 @@ boundary, this); int count = 0; int value; - // Make sure not to modify this to a Short Circuit "&". If + // Make sure *not* to modify this to a Short Circuit "&". If // removed a byte will be lost while (count != fileStorageThreshold && (!partStream.getBoundaryStatus())) { @@ -448,13 +488,6 @@ partStream = new MIMEBodyPartInputStream(pushbackInStream, boundary, this); part = new PartOnMemory(partStream); - } - - // This will take care if stream ended without having MIME - // message terminator - if (part.getSize() <= 0) { - throw new OMException( - "Referenced MIME part not found.End of Stream reached."); } } catch (MessagingException e) { Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/CachedFileDataSource.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/CachedFileDataSource.java?view=auto&rev=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/CachedFileDataSource.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/CachedFileDataSource.java Mon Sep 11 02:18:41 2006 @@ -0,0 +1,42 @@ +/* + * Copyright 2004,2005 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.axiom.attachments; + +import java.io.File; + +import javax.activation.FileDataSource; + +public class CachedFileDataSource extends FileDataSource { + + String contentType = null; + + public CachedFileDataSource(File arg0) { + super(arg0); + } + + public String getContentType() { + if (this.contentType != null) { + return contentType; + } else { + return super.getContentType(); + } + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } +} Propchange: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/CachedFileDataSource.java ------------------------------------------------------------------------------ svn:executable = * Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartOnFile.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartOnFile.java?view=diff&rev=442132&r1=442131&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartOnFile.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartOnFile.java Mon Sep 11 02:18:41 2006 @@ -26,6 +26,7 @@ import java.util.Hashtable; import javax.activation.DataHandler; +import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Header; import javax.mail.MessagingException; @@ -65,7 +66,6 @@ if (!inStream.getBoundaryStatus()) { fileOutStream.write(value); } - } fileOutStream.flush(); @@ -154,7 +154,9 @@ } public DataHandler getDataHandler() throws MessagingException { - return new DataHandler(new FileDataSource(cacheFile)); + CachedFileDataSource dataSource = new CachedFileDataSource(cacheFile); + dataSource.setContentType(getContentType()); + return new DataHandler(dataSource); } public Object getContent() throws IOException, MessagingException { Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java?view=diff&rev=442132&r1=442131&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java Mon Sep 11 02:18:41 2006 @@ -174,7 +174,7 @@ sb.append("boundary="); sb.append(getMimeBoundary()); sb.append("; "); - sb.append("type=\""+MTOMConstants.SWA_TYPE+"\""); + sb.append("type=\""+SOAPContentType+"\""); sb.append("; "); sb.append("start=\"<" + getRootContentId() + ">\""); return sb.toString(); Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java?view=diff&rev=442132&r1=442131&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java Mon Sep 11 02:18:41 2006 @@ -27,6 +27,7 @@ import javax.mail.MessagingException; import javax.mail.internet.MimeBodyPart; +import org.apache.axiom.attachments.Attachments; import org.apache.axiom.om.OMConstants; import org.apache.axiom.om.OMException; import org.apache.axiom.om.OMOutputFormat; @@ -129,7 +130,7 @@ } public static void writeSOAPWithAttachmentsMessage(StringWriter writer, - OutputStream outputStream, Map attachmentMap, OMOutputFormat format) { + OutputStream outputStream, Attachments attachments, OMOutputFormat format) { String SOAPContentType; try { if (format.isSOAP11()) { @@ -146,7 +147,7 @@ rootMimeBodyPart.setDataHandler(dh); rootMimeBodyPart.addHeader("content-type", - MTOMConstants.SWA_TYPE+"; charset=" + SOAPContentType+"; charset=" + format.getCharSetEncoding()); rootMimeBodyPart.addHeader("content-transfer-encoding", "8bit"); rootMimeBodyPart.addHeader("content-id", "<" @@ -155,11 +156,10 @@ writeBodyPart(outputStream, rootMimeBodyPart, format .getMimeBoundary()); - Iterator attachmentIDIterator = attachmentMap.keySet().iterator(); + Iterator attachmentIDIterator = attachments.getContentIDSet().iterator(); while (attachmentIDIterator.hasNext()) { String contentID = (String) attachmentIDIterator.next(); - DataHandler dataHandler = (DataHandler) attachmentMap - .get(contentID); + DataHandler dataHandler = attachments.getDataHandler(contentID); writeBodyPart(outputStream, createMimeBodyPart(contentID, dataHandler), format.getMimeBoundary()); } Copied: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java (from r441444, webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/MIMEHelperTest.java) URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java?view=diff&rev=442132&p1=webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/MIMEHelperTest.java&r1=441444&p2=webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/MIMEHelperTest.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java Mon Sep 11 02:18:41 2006 @@ -21,15 +21,17 @@ import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import java.util.Iterator; +import java.util.Set; import javax.activation.DataHandler; import javax.activation.FileDataSource; import org.apache.axiom.om.AbstractTestCase; -public class MIMEHelperTest extends AbstractTestCase { +public class AttachmentsTest extends AbstractTestCase { - public MIMEHelperTest(String testName) { + public AttachmentsTest(String testName) { super(testName); } @@ -103,7 +105,7 @@ } try { - attachments.getPart("2.urn:uuid:[EMAIL PROTECTED]"); + attachments.getDataHandler("2.urn:uuid:[EMAIL PROTECTED]"); fail("No exception caught when attempting to access stream and part at the same time"); } catch (IllegalStateException ise) { // Nothing @@ -170,6 +172,32 @@ // Compare data across streams compareStreams(dataIs, expectedDataIs); + } + + public void testNonExistingMIMEPart() throws Exception { + + InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName)); + Attachments attachments = new Attachments(inStream, contentTypeString); + + DataHandler dh = attachments.getDataHandler("ThisShouldReturnNull"); + assertNull(dh); + } + + public void testGetAllContentIDs() throws Exception { + + InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName)); + Attachments attachments = new Attachments(inStream, contentTypeString); + + String[] contentIDs = attachments.getAllContentIDs(); + assertEquals(contentIDs.length,3); + assertEquals(contentIDs[0],"0.urn:uuid:[EMAIL PROTECTED]"); + assertEquals(contentIDs[1],"1.urn:uuid:[EMAIL PROTECTED]"); + assertEquals(contentIDs[2],"2.urn:uuid:[EMAIL PROTECTED]"); + + Set idSet = attachments.getContentIDSet(); + assertTrue(idSet.contains("0.urn:uuid:[EMAIL PROTECTED]")); + assertTrue(idSet.contains("2.urn:uuid:[EMAIL PROTECTED]")); + assertTrue(idSet.contains("1.urn:uuid:[EMAIL PROTECTED]")); } /** Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java?view=diff&rev=442132&r1=442131&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/attachments/PartOnFileTest.java Mon Sep 11 02:18:41 2006 @@ -21,6 +21,8 @@ import java.io.InputStream; import java.util.Enumeration; +import javax.activation.DataHandler; +import javax.activation.FileDataSource; import javax.mail.Header; import org.apache.axiom.om.AbstractTestCase; @@ -54,63 +56,63 @@ InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName)); Attachments attachments = new Attachments(inStream, contentTypeString, true, temp.getPath(), "1"); - Part p = attachments.getPart("1.urn:uuid:[EMAIL PROTECTED]"); + DataHandler p = attachments.getDataHandler("1.urn:uuid:[EMAIL PROTECTED]"); - if (!(p instanceof PartOnFile)) { + if (!(p.getDataSource() instanceof FileDataSource)) { fail("Expected PartOnFile"); } - assertEquals("<1.urn:uuid:[EMAIL PROTECTED]>", p.getContentID()); +// assertEquals("<1.urn:uuid:[EMAIL PROTECTED]>", p.getContentID()); assertEquals("image/jpeg", p.getContentType()); - p.addHeader("Some-New-Header", "TestNH"); - assertEquals(p.getHeader("Some-New-Header"), "TestNH"); +// p.addHeader("Some-New-Header", "TestNH"); +// assertEquals(p.getHeader("Some-New-Header"), "TestNH"); } public void testGetAllheaders() throws Exception { - InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName)); - Attachments attachments = new Attachments(inStream, contentTypeString, true, temp.getPath(), "1"); - - Part p = attachments.getPart("1.urn:uuid:[EMAIL PROTECTED]"); - - if (!(p instanceof PartOnFile)) { - fail("Expected PartOnFile"); - } - - assertEquals("<1.urn:uuid:[EMAIL PROTECTED]>", p.getContentID()); - - // Check if the enumeration works - p.addHeader("Some-New-Header", "TestNH"); - - Enumeration e = p.getAllHeaders(); - boolean cTypeFound = false; - boolean cTransferEncFound = false; - boolean cIdFound = false; - boolean snhFound = false; - - while (e.hasMoreElements()) { - Header h = (Header) e.nextElement(); - if (h.getName().toLowerCase().equals("content-type")) { - cTypeFound = true; - } - - if (h.getName().toLowerCase().equals("content-transfer-encoding")) { - cTransferEncFound = true; - } - - if (h.getName().toLowerCase().equals("content-id")) { - cIdFound = true; - } - - if (h.getName().toLowerCase().equals("some-new-header")) { - snhFound = true; - } - } - - if (!cTypeFound || !cTransferEncFound || !cIdFound || !snhFound) { - fail("Header enumeration failed"); - } +// InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName)); +// Attachments attachments = new Attachments(inStream, contentTypeString, true, temp.getPath(), "1"); +// +// Part p = attachments.getDataHandler("1.urn:uuid:[EMAIL PROTECTED]"); +// +// if (!(p instanceof PartOnFile)) { +// fail("Expected PartOnFile"); +// } +// +// assertEquals("<1.urn:uuid:[EMAIL PROTECTED]>", p.getContentID()); +// +// // Check if the enumeration works +// p.addHeader("Some-New-Header", "TestNH"); +// +// Enumeration e = p.getAllHeaders(); +// boolean cTypeFound = false; +// boolean cTransferEncFound = false; +// boolean cIdFound = false; +// boolean snhFound = false; +// +// while (e.hasMoreElements()) { +// Header h = (Header) e.nextElement(); +// if (h.getName().toLowerCase().equals("content-type")) { +// cTypeFound = true; +// } +// +// if (h.getName().toLowerCase().equals("content-transfer-encoding")) { +// cTransferEncFound = true; +// } +// +// if (h.getName().toLowerCase().equals("content-id")) { +// cIdFound = true; +// } +// +// if (h.getName().toLowerCase().equals("some-new-header")) { +// snhFound = true; +// } +// } +// +// if (!cTypeFound || !cTransferEncFound || !cIdFound || !snhFound) { +// fail("Header enumeration failed"); +// } } Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/MIMEOutputUtilsTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/MIMEOutputUtilsTest.java?view=diff&rev=442132&r1=442131&r2=442132 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/MIMEOutputUtilsTest.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/MIMEOutputUtilsTest.java Mon Sep 11 02:18:41 2006 @@ -16,25 +16,25 @@ package org.apache.axiom.om; -import junit.framework.TestCase; -import org.apache.axiom.attachments.ByteArrayDataSource; -import org.apache.axiom.om.impl.MIMEOutputUtils; -import org.apache.axiom.soap.SOAP12Constants; -import org.apache.axiom.soap.SOAPFactory; - -import javax.activation.DataHandler; -import javax.mail.MessagingException; -import javax.mail.internet.MimeBodyPart; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringWriter; -import java.nio.channels.WritableByteChannel; import java.util.HashMap; import java.util.Properties; +import javax.activation.DataHandler; +import javax.mail.MessagingException; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; + +import junit.framework.TestCase; + +import org.apache.axiom.attachments.ByteArrayDataSource; +import org.apache.axiom.om.impl.MIMEOutputUtils; +import org.apache.axiom.soap.SOAPFactory; + public class MIMEOutputUtilsTest extends TestCase { byte[] buffer; byte[] byteArray = new byte[]{13, 56, 65, 32, 12, 12, 7, -3, -2, -1, @@ -92,17 +92,15 @@ assertNotNull(object1); assertEquals(multiPart.getCount(),2); } -// public void testWriteSOAPWithAttachmentsMessage() -// { + + public void testWriteSOAPWithAttachmentsMessage() throws IOException + { // ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); -// SOAPFactory factory = OMAbstractFactory.getSOAP11Factory(); -// ByteArrayOutputStream outStream; -// String boundary; -// +// // OMOutputFormat omOutput = new OMOutputFormat(); -// boundary = omOutput.getMimeBoundary(); // omOutput.setCharSetEncoding(OMConstants.DEFAULT_CHAR_SET_ENCODING); // omOutput.setSOAP11(false); +// omOutput.setDoingSWA(true); // // StringWriter stringWriter = new StringWriter(); // stringWriter.write("Apache Axis2"); @@ -110,7 +108,8 @@ // "Apache Software Foundation", "text/plain"); // HashMap map = new HashMap(); // map.put("uuid_dsjkjkda",dataHandler); +// byteArrayOutputStream.write((omOutput.getContentType()+"\n").getBytes()); // MIMEOutputUtils.writeSOAPWithAttachmentsMessage(stringWriter,byteArrayOutputStream,map,omOutput); // System.out.println(byteArrayOutputStream.toString()); -// } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]