You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by di...@apache.org on 2006/04/19 21:21:40 UTC
svn commit: r395360 [2/2] - in /webservices/commons/trunk/modules/axiom:
src/org/apache/axiom/attachments/ test-resources/mtom/
test-resources/mtom/img/ test/org/apache/axiom/attachments/
Modified: webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnFile.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnFile.java?rev=395360&r1=395359&r2=395360&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnFile.java (original)
+++ webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnFile.java Wed Apr 19 12:21:36 2006
@@ -1,184 +1,193 @@
-/*
- * 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 org.apache.axiom.om.OMException;
-
-import javax.activation.DataHandler;
-import javax.activation.FileDataSource;
-import javax.mail.MessagingException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Enumeration;
-import java.util.HashMap;
-
-public class PartOnFile implements Part {
-
- File cacheFile;
-
- Part bodyPart;
-
- String contentType;
-
- String contentID;
-
- HashMap headers;
-
- public PartOnFile(PushbackFilePartInputStream inStream, String repoDir) {
- super();
-
- headers = new HashMap();
-
- if (repoDir == null) {
- repoDir = ".";
- }
- try {
- cacheFile = File.createTempFile("Axis2", ".att",
- (repoDir == null) ? null : new File(repoDir));
-
- FileOutputStream fileOutStream = new FileOutputStream(cacheFile);
- int value;
- value = parseTheHeaders(inStream);
- fileOutStream.write(value);
- while (!inStream.getBoundaryStatus()) {
- value = inStream.read();
- if (!inStream.getBoundaryStatus()) {
- fileOutStream.write(value);
- }
-
- }
-
- fileOutStream.flush();
- fileOutStream.close();
- } catch (IOException e) {
- throw new OMException("Error creating temporary File.", e);
- }
- }
-
- private int parseTheHeaders(InputStream inStream) throws IOException {
- int value;
- boolean readingHeaders = true;
- StringBuffer header = new StringBuffer();
- while (readingHeaders & (value = inStream.read()) != -1) {
- if (value == 13) {
- if ((value = inStream.read()) == 10) {
- if ((value = inStream.read()) == 13) {
- if ((value = inStream.read()) == 10) {
- putToMap(header);
- readingHeaders = false;
- }
- } else {
- putToMap(header);
- header = new StringBuffer();
- header.append((char) value);
- }
- } else {
- header.append(13);
- header.append(value);
- }
- } else {
- header.append((char) value);
- }
- }
- return value;
- }
-
- private void putToMap(StringBuffer header) {
- String headerString = header.toString();
- int delimiter = headerString.indexOf(":");
- headers.put(headerString.substring(0, delimiter).trim(), headerString
- .substring(delimiter + 1, headerString.length()).trim());
- }
-
- public String getContentID() {
- String cID = (String) headers.get("Content-ID");
- if (cID == null) {
- cID = (String) headers.get("Content-Id");
- if (cID == null) {
- cID = (String) headers.get("Content-id");
- if (cID == null) {
- cID = (String) headers.get("content-id");
- }
- }
-
- }
- return cID;
- }
-
- public int getSize() throws MessagingException {
- return (int) cacheFile.length();
- }
-
- public int getLineCount() throws MessagingException {
- throw new UnsupportedOperationException();
- }
-
- public String getDescription() throws MessagingException {
- throw new UnsupportedOperationException();
- }
-
- public void setDescription(String arg0) throws MessagingException {
- throw new UnsupportedOperationException();
- }
-
- public String getFileName() throws MessagingException {
- return cacheFile.getAbsolutePath();
- }
-
- public InputStream getInputStream() throws IOException, MessagingException {
- return new FileInputStream(cacheFile);
- }
-
- public DataHandler getDataHandler() throws MessagingException {
- return new DataHandler(new FileDataSource(cacheFile));
- }
-
- public Object getContent() throws IOException, MessagingException {
- return getDataHandler().getContent();
- }
-
- public void writeTo(OutputStream outStream) throws IOException,
- MessagingException {
- getDataHandler().writeTo(outStream);
- }
-
- public String getHeader(String arg0) throws MessagingException {
- String header;
- header = (String) headers.get(arg0);
- return header;
- }
-
- public Enumeration getAllHeaders() throws MessagingException {
- return null;
- }
-
- public String getContentType() throws MessagingException {
- String cType = (String) headers.get("Content-Type");
- if (cType == null) {
- cType = (String) headers.get("Content-type");
- if (cType == null) {
- cType = (String) headers.get("content-type");
- }
- }
- return cType;
- }
-
+/*
+ * 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 java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.mail.Header;
+import javax.mail.MessagingException;
+
+import org.apache.axiom.om.OMException;
+
+public class PartOnFile implements Part {
+
+ File cacheFile;
+
+ Part bodyPart;
+
+ String contentType;
+
+ String contentID;
+
+ Hashtable headers;
+
+ public PartOnFile(PushbackFilePartInputStream inStream, String repoDir) {
+ super();
+
+ headers = new Hashtable();
+
+ if (repoDir == null) {
+ repoDir = ".";
+ }
+ try {
+ cacheFile = File.createTempFile("Axis2", ".att",
+ (repoDir == null) ? null : new File(repoDir));
+
+ FileOutputStream fileOutStream = new FileOutputStream(cacheFile);
+ int value;
+ value = parseTheHeaders(inStream);
+ fileOutStream.write(value);
+ while (!inStream.getBoundaryStatus()) {
+ value = inStream.read();
+ if (!inStream.getBoundaryStatus()) {
+ fileOutStream.write(value);
+ }
+
+ }
+
+ fileOutStream.flush();
+ fileOutStream.close();
+ } catch (IOException e) {
+ throw new OMException("Error creating temporary File.", e);
+ }
+ }
+
+ private int parseTheHeaders(InputStream inStream) throws IOException {
+ int value;
+ boolean readingHeaders = true;
+ StringBuffer header = new StringBuffer();
+ while (readingHeaders & (value = inStream.read()) != -1) {
+ if (value == 13) {
+ if ((value = inStream.read()) == 10) {
+ if ((value = inStream.read()) == 13) {
+ if ((value = inStream.read()) == 10) {
+ putToMap(header);
+ readingHeaders = false;
+ }
+ } else {
+ putToMap(header);
+ header = new StringBuffer();
+ header.append((char) value);
+ }
+ } else {
+ header.append(13);
+ header.append(value);
+ }
+ } else {
+ header.append((char) value);
+ }
+ }
+ return value;
+ }
+
+ private void putToMap(StringBuffer header) {
+ String headerString = header.toString();
+ int delimiter = headerString.indexOf(":");
+
+ String name = headerString.substring(0, delimiter).trim();
+ String value= headerString.substring(delimiter + 1, headerString.length()).trim();
+
+ Header headerObj = new Header(name, value);
+ headers.put(name, headerObj);
+ }
+
+ public String getContentID() {
+ Header cID = (Header) headers.get("Content-ID");
+ if (cID == null) {
+ cID = (Header) headers.get("Content-Id");
+ if (cID == null) {
+ cID = (Header) headers.get("Content-id");
+ if (cID == null) {
+ cID = (Header) headers.get("content-id");
+ }
+ }
+
+ }
+ return (String) cID.getValue();
+ }
+
+ public int getSize() throws MessagingException {
+ return (int) cacheFile.length();
+ }
+
+ public int getLineCount() throws MessagingException {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getDescription() throws MessagingException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setDescription(String arg0) throws MessagingException {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getFileName() throws MessagingException {
+ return cacheFile.getAbsolutePath();
+ }
+
+ public InputStream getInputStream() throws IOException, MessagingException {
+ return new FileInputStream(cacheFile);
+ }
+
+ public DataHandler getDataHandler() throws MessagingException {
+ return new DataHandler(new FileDataSource(cacheFile));
+ }
+
+ public Object getContent() throws IOException, MessagingException {
+ return getDataHandler().getContent();
+ }
+
+ public void writeTo(OutputStream outStream) throws IOException,
+ MessagingException {
+ getDataHandler().writeTo(outStream);
+ }
+
+ public String getHeader(String arg0) throws MessagingException {
+ return (String) ((Header) headers.get(arg0)).getValue();
+ }
+
+ public void addHeader(String arg0, String arg1) throws MessagingException {
+ Header headerObj = new Header(arg0, arg1);
+ headers.put(arg0, headerObj);
+ }
+
+ public Enumeration getAllHeaders() throws MessagingException {
+ return headers.elements();
+ }
+
+ public String getContentType() throws MessagingException {
+ Header cType = (Header) headers.get("Content-Type");
+ if (cType == null) {
+ cType = (Header) headers.get("Content-type");
+ if (cType == null) {
+ cType = (Header) headers.get("content-type");
+ }
+ }
+ return (String) cType.getValue();
+ }
+
}
Modified: webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnMemory.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnMemory.java?rev=395360&r1=395359&r2=395360&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnMemory.java (original)
+++ webservices/commons/trunk/modules/axiom/src/org/apache/axiom/attachments/PartOnMemory.java Wed Apr 19 12:21:36 2006
@@ -1,66 +1,70 @@
-/*
- * 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 javax.activation.DataHandler;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-
-public class PartOnMemory implements Part{
-
- MimeBodyPart part;
- public PartOnMemory(InputStream partInStream) throws MessagingException
- {
- part = new MimeBodyPart(partInStream);
- }
-
- public int getSize() throws MessagingException {
- return part.getSize();
- }
-
- public String getContentType() throws MessagingException {
- return part.getContentType();
- }
-
- public String getFileName() throws MessagingException {
- return part.getFileName();
- }
-
- public InputStream getInputStream() throws IOException, MessagingException {
- return part.getInputStream();
- }
-
- public DataHandler getDataHandler() throws MessagingException {
- return part.getDataHandler();
- }
-
- public String getHeader(String arg0) throws MessagingException {
- return part.getHeader(arg0)[0];
- }
-
- public Enumeration getAllHeaders() throws MessagingException {
- return part.getAllHeaders();
- }
-
-
- public String getContentID() throws MessagingException {
- return part.getContentID();
- }
-}
+/*
+ * 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 javax.activation.DataHandler;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeBodyPart;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+
+public class PartOnMemory implements Part{
+
+ MimeBodyPart part;
+ public PartOnMemory(InputStream partInStream) throws MessagingException
+ {
+ part = new MimeBodyPart(partInStream);
+ }
+
+ public int getSize() throws MessagingException {
+ return part.getSize();
+ }
+
+ public String getContentType() throws MessagingException {
+ return part.getContentType();
+ }
+
+ public String getFileName() throws MessagingException {
+ return part.getFileName();
+ }
+
+ public InputStream getInputStream() throws IOException, MessagingException {
+ return part.getInputStream();
+ }
+
+ public DataHandler getDataHandler() throws MessagingException {
+ return part.getDataHandler();
+ }
+
+ public void addHeader(String arg0, String arg1) throws MessagingException {
+ part.addHeader(arg0, arg1);
+ }
+
+ public String getHeader(String arg0) throws MessagingException {
+ return part.getHeader(arg0)[0];
+ }
+
+ public Enumeration getAllHeaders() throws MessagingException {
+ return part.getAllHeaders();
+ }
+
+
+ public String getContentID() throws MessagingException {
+ return part.getContentID();
+ }
+}
Added: webservices/commons/trunk/modules/axiom/test-resources/mtom/MTOMAttachmentStream.bin
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/test-resources/mtom/MTOMAttachmentStream.bin?rev=395360&view=auto
==============================================================================
Binary files /tmp/tmpULG-_p and /tmp/tmplc_cLZ differ
Added: webservices/commons/trunk/modules/axiom/test-resources/mtom/img/test2.jpg
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/test-resources/mtom/img/test2.jpg?rev=395360&view=auto
==============================================================================
Binary file - no diff available.
Propchange: webservices/commons/trunk/modules/axiom/test-resources/mtom/img/test2.jpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/IncomingAttachmentInputTest.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/IncomingAttachmentInputTest.java?rev=395360&view=auto
==============================================================================
--- webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/IncomingAttachmentInputTest.java (added)
+++ webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/IncomingAttachmentInputTest.java Wed Apr 19 12:21:36 2006
@@ -0,0 +1,69 @@
+/*
+ * 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 java.io.FileInputStream;
+import java.io.InputStream;
+
+import org.apache.axiom.om.AbstractTestCase;
+
+
+/**
+ * Test the PartOnFile class
+ */
+
+public class IncomingAttachmentInputTest extends AbstractTestCase {
+
+ public IncomingAttachmentInputTest(String testName) {
+ super(testName);
+ }
+
+ String inMimeFileName = "mtom/MTOMAttachmentStream.bin";
+ String contentTypeString = "multipart/related; boundary=MIMEBoundaryurn:uuid:A3ADBAEE51A1A87B2A11443668160701; type=\"application/xop+xml\"; start=\"<0....@apache.org>\"; start-info=\"application/soap+xml\"; charset=UTF-8;action=\"mtomSample\"";
+ File temp;
+
+ public void testIncomingAttachmentInputStreamFunctions() throws Exception {
+ InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString);
+
+ // Get the inputstream container
+ IncomingAttachmentStreams ias = mimeHelper.getIncomingAttachmentStreams();
+
+ IncomingAttachmentInputStream dataIs;
+
+ // Img1 stream
+ dataIs = ias.getNextStream();
+
+ // Make sure it was the first attachment
+ assertEquals("<1....@apache.org>", dataIs.getContentId());
+
+ // Consume the stream
+ while (dataIs.read() != -1);
+
+ // Img2 stream
+ dataIs = ias.getNextStream();
+ assertEquals("<2....@apache.org>", dataIs.getContentId());
+
+ // Test if getContentType() works..
+ assertEquals("image/jpeg", dataIs.getContentType());
+
+ // Test if a adding/getting a header works
+ dataIs.addHeader("new-header", "test-value");
+ assertEquals("test-value", dataIs.getHeader("new-header"));
+ }
+}
Modified: webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/MIMEHelperTest.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/MIMEHelperTest.java?rev=395360&r1=395359&r2=395360&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/MIMEHelperTest.java (original)
+++ webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/MIMEHelperTest.java Wed Apr 19 12:21:36 2006
@@ -1,36 +1,183 @@
-/*
- * 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 junit.framework.TestCase;
-
-public class MIMEHelperTest extends TestCase {
-
-
- public void testMIMEHelper() {
- }
-
- public void testGetAttachmentSpecType() {
- }
-
- public void testGetSOAPPartInputStream() {
- }
-
- public void testGetDataHandler() {
- }
-
-}
\ No newline at end of file
+/*
+ * 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.awt.Image;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import javax.activation.DataHandler;
+import javax.imageio.ImageIO;
+
+import org.apache.axiom.attachments.utils.ImageDataSource;
+import org.apache.axiom.om.AbstractTestCase;
+
+public class MIMEHelperTest extends AbstractTestCase {
+
+ public MIMEHelperTest(String testName) {
+ super(testName);
+ }
+
+ String inMimeFileName = "mtom/MTOMAttachmentStream.bin";
+ String img1FileName = "mtom/img/test.jpg";
+ String img2FileName = "mtom/img/test2.jpg";
+
+ String contentTypeString = "multipart/related; boundary=MIMEBoundaryurn:uuid:A3ADBAEE51A1A87B2A11443668160701; type=\"application/xop+xml\"; start=\"<0....@apache.org>\"; start-info=\"application/soap+xml\"; charset=UTF-8;action=\"mtomSample\"";
+
+ public void testMIMEHelper() {
+ }
+
+ public void testGetAttachmentSpecType() {
+ }
+
+ public void testSimultaneousStreamAccess() throws Exception {
+ InputStream inStream;
+ MIMEHelper mimeHelper;
+
+ inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ mimeHelper = new MIMEHelper(inStream, contentTypeString);
+
+ mimeHelper.getDataHandler("2.urn:uuid:A3ADBAEE51A1A87B2A11443668160994@apache.org");
+
+ // This should throw an error
+ try {
+ mimeHelper.getIncomingAttachmentStreams();
+ fail("No exception caught when attempting to access datahandler and stream at the same time");
+ } catch (IllegalStateException ise) {
+ // Nothing
+ }
+
+ inStream.close();
+
+ // Try the other way around.
+ inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ mimeHelper = new MIMEHelper(inStream, contentTypeString);
+
+ mimeHelper.getIncomingAttachmentStreams();
+
+ // These should NOT throw error even though they are using part based access
+ try {
+ assertEquals("application/xop+xml; charset=UTF-8; type=\"application/soap+xml\";", mimeHelper.getSOAPPartContentType());
+ } catch (IllegalStateException ise) {
+ fail("No exception expected when requesting SOAP part data");
+ ise.printStackTrace();
+ }
+
+ try {
+ mimeHelper.getSOAPPartInputStream();
+ } catch (IllegalStateException ise) {
+ fail("No exception expected when requesting SOAP part data");
+ }
+
+ // These should throw an error
+ try {
+ mimeHelper.getDataHandler("2.urn:uuid:A3ADBAEE51A1A87B2A11443668160994@apache.org");
+ fail("No exception caught when attempting to access stream and datahandler at the same time");
+ } catch (IllegalStateException ise) {
+ // Nothing
+ }
+
+ // Additionally, we also need to ensure mutual exclusion if someone
+ // tries to access part data directly
+
+ try {
+ mimeHelper.getAllContentIDs();
+ fail("No exception caught when attempting to access stream and contentids list at the same time");
+ } catch (IllegalStateException ise) {
+ // Nothing
+ }
+
+ try {
+ mimeHelper.getPart("2.urn:uuid:A3ADBAEE51A1A87B2A11443668160994@apache.org");
+ fail("No exception caught when attempting to access stream and part at the same time");
+ } catch (IllegalStateException ise) {
+ // Nothing
+ }
+ }
+
+ public void testGetInputAttachhmentStreams() throws Exception {
+
+ Image expectedImage;
+ IncomingAttachmentInputStream dataIs;
+ ImageDataSource dataSource;
+ InputStream expectedDataIs;
+
+ InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString);
+
+ // Since SOAP part operated independently of other streams, access it
+ // directly, and then get to the streams. If this sequence throws an
+ // error, something is wrong with the stream handling code.
+ InputStream is = mimeHelper.getSOAPPartInputStream();
+ while (is.read() != -1);
+
+ // Get the inputstream container
+ IncomingAttachmentStreams ias = mimeHelper.getIncomingAttachmentStreams();
+
+ dataIs = ias.getNextStream();
+ expectedImage = ImageIO.read(new FileInputStream(getTestResourceFile(img1FileName)));
+ dataSource = new ImageDataSource("test1.jpg", expectedImage);
+ expectedDataIs = dataSource.getInputStream();
+ compareStreams(dataIs, expectedDataIs);
+
+ dataIs = ias.getNextStream();
+ expectedImage = ImageIO.read(new FileInputStream(getTestResourceFile(img2FileName)));
+ dataSource = new ImageDataSource("test2.jpg", expectedImage);
+ expectedDataIs = dataSource.getInputStream();
+ compareStreams(dataIs, expectedDataIs);
+
+ // Confirm that no more streams are left
+ assertEquals(null, ias.getNextStream());
+
+ // After all is done, we should *still* be able to access and
+ // re-consume the SOAP part stream, as it should be cached.. can we?
+ is = mimeHelper.getSOAPPartInputStream();
+ while (is.read() != -1);
+ }
+
+ private void compareStreams(InputStream data, InputStream expected) throws Exception {
+ // Compare data across streams
+ int i = 0, expectedData = 0;
+
+ while ((i = data.read()) != -1 && (expectedData = expected.read()) != -1) {
+ if (i != expectedData) {
+ fail("Data streams do not match: " + i + " != " + expectedData);
+ }
+ }
+
+ // Ensure that *both* streams have ended
+ if ((i == -1 && expected.read() != -1) || (expectedData == -1 && i != -1)) {
+ fail("Data streams do not match: " + i + " != " + expectedData);
+ }
+ }
+
+ public void testGetDataHandler() throws Exception {
+
+ InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString);
+
+ DataHandler dh = mimeHelper.getDataHandler("2.urn:uuid:A3ADBAEE51A1A87B2A11443668160994@apache.org");
+ InputStream dataIs = dh.getDataSource().getInputStream();
+
+ Image expectedImage = ImageIO.read(new FileInputStream(getTestResourceFile(img2FileName)));
+ ImageDataSource dataSource = new ImageDataSource("test.jpg", expectedImage);
+ InputStream expectedDataIs = dataSource.getInputStream();
+
+ // Compare data across streams
+ compareStreams(dataIs, expectedDataIs);
+ }
+}
Added: webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/PartOnFileTest.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/PartOnFileTest.java?rev=395360&view=auto
==============================================================================
--- webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/PartOnFileTest.java (added)
+++ webservices/commons/trunk/modules/axiom/test/org/apache/axiom/attachments/PartOnFileTest.java Wed Apr 19 12:21:36 2006
@@ -0,0 +1,142 @@
+/*
+ * 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 java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Enumeration;
+
+import javax.mail.Header;
+
+import org.apache.axiom.om.AbstractTestCase;
+
+
+/**
+ * Test the PartOnFile class
+ */
+
+public class PartOnFileTest extends AbstractTestCase {
+
+ public PartOnFileTest(String testName) {
+ super(testName);
+ }
+
+ String inMimeFileName = "mtom/MTOMAttachmentStream.bin";
+ String contentTypeString = "multipart/related; boundary=MIMEBoundaryurn:uuid:A3ADBAEE51A1A87B2A11443668160701; type=\"application/xop+xml\"; start=\"<0....@apache.org>\"; start-info=\"application/soap+xml\"; charset=UTF-8;action=\"mtomSample\"";
+
+ File temp;
+
+ public void setUp() throws Exception {
+ createTemporaryDirectory();
+ }
+
+ public void tearDown() throws Exception {
+ deleteTemporaryDirectory();
+ }
+
+ public void testHeaderGetSet() throws Exception {
+
+ InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString, true, temp.getPath(), "1");
+
+ Part p = mimeHelper.getPart("1.urn:uuid:A3ADBAEE51A1A87B2A11443668160943@apache.org");
+
+ if (!(p instanceof PartOnFile)) {
+ fail("Expected PartOnFile");
+ }
+
+ assertEquals("<1....@apache.org>", p.getContentID());
+ assertEquals("image/jpeg", p.getContentType());
+
+ p.addHeader("Some-New-Header", "TestNH");
+ assertEquals(p.getHeader("Some-New-Header"), "TestNH");
+ }
+
+ public void testGetAllheaders() throws Exception {
+
+ InputStream inStream = new FileInputStream(getTestResourceFile(inMimeFileName));
+ MIMEHelper mimeHelper = new MIMEHelper(inStream, contentTypeString, true, temp.getPath(), "1");
+
+ Part p = mimeHelper.getPart("1.urn:uuid:A3ADBAEE51A1A87B2A11443668160943@apache.org");
+
+ if (!(p instanceof PartOnFile)) {
+ fail("Expected PartOnFile");
+ }
+
+ assertEquals("<1....@apache.org>", 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");
+ }
+
+ }
+
+ private void createTemporaryDirectory() throws Exception {
+ temp = File.createTempFile("partOnFileTest", ".tmp");
+
+ if (!temp.delete()) {
+ fail("Cannot delete from temporary directory. File: " + temp.toURL());
+ }
+
+ if (!temp.mkdir()) {
+ fail("Cannot create a temporary location for part files");
+ }
+ }
+
+ private void deleteTemporaryDirectory() throws Exception {
+
+ String[] fileList = temp.list();
+ for (int i=0; i < fileList.length; i++) {
+ if (!(new File(temp, fileList[i])).delete()) {
+ System.err.println("WARNING: temporary directory removal failed.");
+ }
+ }
+
+ if (!temp.delete()) {
+ System.err.println("WARNING: temporary directory removal failed.");
+ }
+ }
+}