1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.submit.transports.http;
14
15 import java.io.ByteArrayInputStream;
16 import java.io.File;
17 import java.io.FileInputStream;
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.io.OutputStream;
21
22 import javax.activation.DataSource;
23
24 import org.apache.commons.codec.binary.Base64;
25 import org.apache.commons.codec.binary.Hex;
26 import org.apache.xmlbeans.SchemaType;
27 import org.apache.xmlbeans.XmlBase64Binary;
28 import org.apache.xmlbeans.XmlHexBinary;
29
30 import com.eviware.soapui.SoapUI;
31 import com.eviware.soapui.impl.wsdl.support.xsd.SchemaUtils;
32
33 /***
34 * DataSource for XOP/MTOM attachments
35 *
36 * @author ole.matzura
37 */
38
39 public final class XOPPartDataSource implements DataSource
40 {
41 private String content;
42 private final String contentType;
43 private final SchemaType schemaType;
44 private File source;
45
46 public XOPPartDataSource(String content, String contentType, SchemaType schemaType)
47 {
48 this.content = content;
49 this.contentType = contentType;
50 this.schemaType = schemaType;
51 }
52
53 public XOPPartDataSource(File source, String contentType, SchemaType schemaType)
54 {
55 this.source = source;
56 this.contentType = contentType;
57 this.schemaType = schemaType;
58 }
59
60 public String getContentType()
61 {
62 return contentType;
63 }
64
65 public InputStream getInputStream() throws IOException
66 {
67 try
68 {
69 if( source != null )
70 {
71 return new FileInputStream( source );
72 }
73 if (SchemaUtils.isInstanceOf( schemaType, XmlHexBinary.type ))
74 {
75 return new ByteArrayInputStream(Hex.decodeHex(content.toCharArray()));
76 }
77 else if (SchemaUtils.isInstanceOf( schemaType, XmlBase64Binary.type ))
78 {
79 return new ByteArrayInputStream( Base64.decodeBase64( content.getBytes() ));
80 }
81 else throw new IOException( "Invalid type for XOPPartDataSource; " + schemaType.getName() );
82 }
83 catch (Exception e)
84 {
85 SoapUI.logError( e );
86 throw new IOException( e.toString() );
87 }
88 }
89
90 public String getName()
91 {
92 return schemaType.getName().toString();
93 }
94
95 public OutputStream getOutputStream() throws IOException
96 {
97 return null;
98 }
99 }