1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformer.simple;
12
13 import org.mule.RequestContext;
14 import org.mule.api.transformer.DiscoverableTransformer;
15 import org.mule.api.transformer.TransformerException;
16 import org.mule.api.transport.OutputHandler;
17 import org.mule.config.i18n.CoreMessages;
18 import org.mule.transformer.AbstractTransformer;
19 import org.mule.transformer.types.DataTypeFactory;
20 import org.mule.util.IOUtils;
21 import org.mule.util.StringMessageUtils;
22
23 import java.io.ByteArrayOutputStream;
24 import java.io.IOException;
25 import java.io.InputStream;
26 import java.io.UnsupportedEncodingException;
27
28
29
30
31
32
33 public class ObjectToString extends AbstractTransformer implements DiscoverableTransformer
34 {
35 protected static final int DEFAULT_BUFFER_SIZE = 80;
36
37
38 private int priorityWeighting = DiscoverableTransformer.DEFAULT_PRIORITY_WEIGHTING + 1;
39
40 public ObjectToString()
41 {
42 registerSourceType(DataTypeFactory.OBJECT);
43 registerSourceType(DataTypeFactory.BYTE_ARRAY);
44 registerSourceType(DataTypeFactory.INPUT_STREAM);
45 registerSourceType(DataTypeFactory.create(OutputHandler.class));
46
47
48 setReturnDataType(DataTypeFactory.TEXT_STRING);
49 }
50
51 @Override
52 public Object doTransform(Object src, String outputEncoding) throws TransformerException
53 {
54 String output = "";
55
56 if (src instanceof InputStream)
57 {
58 output = createStringFromInputStream((InputStream) src, outputEncoding);
59 }
60 else if (src instanceof OutputHandler)
61 {
62 output = createStringFromOutputHandler((OutputHandler) src, outputEncoding);
63 }
64 else if (src instanceof byte[])
65 {
66 output = createStringFromByteArray((byte[]) src, outputEncoding);
67 }
68 else
69 {
70 output = StringMessageUtils.toString(src);
71 }
72
73 return output;
74 }
75
76 protected String createStringFromInputStream(InputStream input, String outputEncoding)
77 throws TransformerException
78 {
79 try
80 {
81 ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
82 IOUtils.copy(input, byteOut);
83 return byteOut.toString(outputEncoding);
84 }
85 catch (IOException e)
86 {
87 throw new TransformerException(CoreMessages.errorReadingStream(), e);
88 }
89 finally
90 {
91 try
92 {
93 input.close();
94 }
95 catch (IOException e)
96 {
97 logger.warn("Could not close stream", e);
98 }
99 }
100 }
101
102 protected String createStringFromOutputHandler(OutputHandler handler, String outputEncoding)
103 throws TransformerException
104 {
105 ByteArrayOutputStream bytes = new ByteArrayOutputStream();
106 try
107 {
108 handler.write(RequestContext.getEvent(), bytes);
109 return bytes.toString(outputEncoding);
110 }
111 catch (IOException e)
112 {
113 throw new TransformerException(this, e);
114 }
115 }
116
117 protected String createStringFromByteArray(byte[] bytes, String outputEncoding)
118 throws TransformerException
119 {
120 try
121 {
122 return new String(bytes, outputEncoding);
123 }
124 catch (UnsupportedEncodingException e)
125 {
126 throw new TransformerException(this, e);
127 }
128 }
129
130 public int getPriorityWeighting()
131 {
132 return priorityWeighting;
133 }
134
135 public void setPriorityWeighting(int priorityWeighting)
136 {
137 this.priorityWeighting = priorityWeighting;
138 }
139 }