[ https://issues.apache.org/jira/browse/WSCOMMONS-448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tim Mitchell updated WSCOMMONS-448: ----------------------------------- Description: We have a need to be able to identify how an SWA attachment was encoded in the message, by accessing the Content Transfer Encoding. Currently the DataHandler does contain this info, but there is no method you can use to get to the data. I have created a fix and an accompanying testcase. Please could you review the changes and if you're happy please could you integrate the fix. I intend to post on the Axiom mailing list to broadcast my suggestion. I've attached the diff details as an attachment. was: We have a need to be able to identify how an SWA attachment was encoded in the message, by accessing the Content Transfer Encoding. Currently the DataHandler does contain this info, but there is no method you can use to get to the data. I have created a fix and an accompanying testcase. Please could you review the changes and if you're happy please could you integrate the fix. I intend to post on the Axiom mailing list to broadcast my suggestion. The diff of the fixes are as follows. Please let me know if you would prefer me to post a zip of the changes: Index: modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnMemoryEnhanced.java =================================================================== --- modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnMemoryEnhanced.java (revision 749312) +++ modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnMemoryEnhanced.java (working copy) @@ -19,21 +19,22 @@ package org.apache.axiom.attachments.impl; -import org.apache.axiom.attachments.utils.BAAInputStream; -import org.apache.axiom.om.OMException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Hashtable; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.MessagingException; import javax.mail.internet.MimeUtility; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.Hashtable; +import org.apache.axiom.attachments.utils.BAAInputStream; +import org.apache.axiom.om.OMDataHandler; +import org.apache.axiom.om.OMException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * PartOnMemoryEnhanced stores the attachment in memory (in non-contigous byte arrays) @@ -83,7 +84,7 @@ } - class MyDataHandler extends DataHandler { + class MyDataHandler extends DataHandler implements OMDataHandler { DataSource ds; public MyDataHandler(DataSource ds) { @@ -99,6 +100,10 @@ BufferUtils.inputStream2OutputStream(is, os); } } + + public String getContentTransferEncoding() throws MessagingException { + return PartOnMemoryEnhanced.this.getContentTransferEncoding(); + } } /** Index: modules/axiom-api/src/main/java/org/apache/axiom/om/OMDataHandler.java =================================================================== --- modules/axiom-api/src/main/java/org/apache/axiom/om/OMDataHandler.java (revision 0) +++ modules/axiom-api/src/main/java/org/apache/axiom/om/OMDataHandler.java (revision 0) @@ -0,0 +1,17 @@ +package org.apache.axiom.om; + +import javax.mail.MessagingException; + + +/** + * Interface to allow the access the value of the content transfer encoding that the + * javax.activation.DataHandler doesn't allow you to do. + */ +public interface OMDataHandler { + + /** + * @return A String containing the value of the content transfer encoding header. + */ + public String getContentTransferEncoding() throws MessagingException; + +} Index: modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java =================================================================== --- modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java (revision 749312) +++ modules/axiom-tests/src/test/java/org/apache/axiom/attachments/AttachmentsTest.java (working copy) @@ -19,23 +19,24 @@ package org.apache.axiom.attachments; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Set; + +import javax.activation.DataHandler; + import org.apache.axiom.attachments.utils.IOUtils; import org.apache.axiom.om.AbstractTestCase; +import org.apache.axiom.om.OMDataHandler; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMOutputFormat; import org.apache.axiom.om.impl.MTOMXMLStreamWriter; import org.apache.axiom.om.impl.builder.XOPAwareStAXOMBuilder; import org.apache.axiom.om.util.CommonUtils; -import javax.activation.DataHandler; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; -import java.util.Set; - public class AttachmentsTest extends AbstractTestCase { public AttachmentsTest(String testName) { @@ -43,6 +44,7 @@ } String inMimeFileName = "mtom/MTOMAttachmentStream.bin"; + String inMimeFileName2 = "swa/SWAAttachmentBase64Stream.bin"; String img1FileName = "mtom/img/test.jpg"; String img2FileName = "mtom/img/test2.jpg"; @@ -56,6 +58,14 @@ "start-info=\"application/soap+xml\"; " + "charset=UTF-8;" + "action=\"mtomSample\""; + + String contentTypeString2 = + "multipart/related; " + + "boundary=\"" + boundary + "\"; " + + "type=\"text/xml\"; " + + "start=\"<" + start +">\"; " + + "start-info=\"text/xml\"; " + + "charset=UTF-8;"; public void testMIMEHelper() { } @@ -283,7 +293,29 @@ // Compare data across streams compareStreams(dataIs, expectedDataIs); } + + public void testGetContentTransferEncoding() throws Exception { + InputStream inStream = getTestResource(inMimeFileName); + Attachments attachments = new Attachments(inStream, contentTypeString); + DataHandler dh = attachments + .getDataHandler("2.urn:uuid:a3adbaee51a1a87b2a11443668160...@apache.org"); + + assertNotNull("DataHandler is null", dh); + assertTrue("DataHandler is not an instance of OMDataHandler", dh instanceof OMDataHandler); + String encodingType = ((OMDataHandler)dh).getContentTransferEncoding(); + assertTrue("Encoding Type not binary: " + encodingType, "binary".equals(encodingType)); + + InputStream inStream2 = getTestResource(inMimeFileName2); + Attachments attachments2 = new Attachments(inStream2, contentTypeString2); + dh = attachments2.getDataHandler("urn:uuid:F8FB8F9F7B7B7B678A1236015197849"); + + assertNotNull("DataHandler is null", dh); + assertTrue("DataHandler is not an instance of OMDataHandler", dh instanceof OMDataHandler); + encodingType = ((OMDataHandler)dh).getContentTransferEncoding(); + assertTrue("Encoding Type not base64: " + encodingType, "base64".equals(encodingType)); + } + public void testNonExistingMIMEPart() throws Exception { InputStream inStream = getTestResource(inMimeFileName); Index: modules/axiom-tests/test-resources/swa/SWAAttachmentBase64Stream.bin =================================================================== --- modules/axiom-tests/test-resources/swa/SWAAttachmentBase64Stream.bin (revision 0) +++ modules/axiom-tests/test-resources/swa/SWAAttachmentBase64Stream.bin (revision 0) @@ -0,0 +1,256 @@ +--MIMEBoundaryurn:uuid:A3ADBAEE51A1A87B2A11443668160701 +Content-Type: text/xml; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Content-ID: <0.urn:uuid:a3adbaee51a1a87b2a11443668160...@apache.org> + +<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:To>http://localhost:7081/axis2/services/SWAService</wsa:To><wsa:MessageID>urn:uuid:F8FB8F9F7B7B7B678A1236015197880</wsa:MessageID><wsa:Action>sendString</wsa:Action></soapenv:Header><soapenv:Body><SWAService:sendString xmlns:SWAService="http://test"><SWAService:clientString>Client Test</SWAService:clientString></SWAService:sendString><soapenv:SWAAttachment soapenv:href="cid:urn:uuid:F8FB8F9F7B7B7B678A1236015197849"></soapenv:SWAAttachment></soapenv:Body></soapenv:Envelope> +--MIMEBoundaryurn:uuid:A3ADBAEE51A1A87B2A11443668160701 +Content-Type: application/octet-stream +Content-Transfer-Encoding: base64 +Content-ID: <urn:uuid:F8FB8F9F7B7B7B678A1236015197849> + +/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB +AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEB +AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCABgAKcDASIA +AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA +AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 +ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm +p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA +AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx +BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK +U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 +uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD++iii +igAooooAKKKKACiiigAopGYKCTwFBLMSAAB1PPpgk+36/EP7Rv8AwUV/ZL/Zdguo/iX8TIrvX00D +/hItO8K+DNMvvFWqaxav4g0nwrDbQavZxxeCdHu28Qa/oVhdt4t8WeHNP0SHV7DWPEV/o+gTf2su +dSrSox5qtSFONm7zkor3Vd6tq9lrZa2OrB4LGZhiKWEwGExONxVacKdLD4WjUxFapUqTUKcIU6UZ +TlKc5RjFJNuTSWrPt+j19uvtX8o/xt/4OKtVuNQtLX4F+Ffh3pOivP4zs7zVdWs/EHxSuNTs/Dum +td2uueHPFem618PvC2kSXpntr60t4/DHxU086HE2sTTSXWpaB4f1f89/iL/wXo/a08SIlla+MPG1 +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 +--MIMEBoundaryurn:uuid:A3ADBAEE51A1A87B2A11443668160701-- \ No newline at end of file Index: modules/axiom-tests/pom.xml =================================================================== --- modules/axiom-tests/pom.xml (revision 749312) +++ modules/axiom-tests/pom.xml (working copy) @@ -134,8 +134,8 @@ <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> - <include>**/*Test.java</include> - <include>**/*TestCase.java</include> + <include>**/AttachmentsTest.java</include> + <!--include>**/*TestCase.java</include--> </includes> <excludes> <exclude>**/*AbstractOMSerializationTest.java</exclude> > Add access to the Content Transfer Encoding value from DataHandler > ------------------------------------------------------------------ > > Key: WSCOMMONS-448 > URL: https://issues.apache.org/jira/browse/WSCOMMONS-448 > Project: WS-Commons > Issue Type: Improvement > Components: AXIOM > Affects Versions: Axiom 1.2.8 > Reporter: Tim Mitchell > Fix For: Axiom 1.2.8 > > > We have a need to be able to identify how an SWA attachment was encoded in > the message, by accessing the Content Transfer Encoding. Currently the > DataHandler does contain this info, but there is no method you can use to get > to the data. > I have created a fix and an accompanying testcase. Please could you review > the changes and if you're happy please could you integrate the fix. > I intend to post on the Axiom mailing list to broadcast my suggestion. > I've attached the diff details as an attachment. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.