1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.compiler;
22
23 import javax.tools.JavaFileObject;
24 import javax.tools.SimpleJavaFileObject;
25 import java.io.*;
26 import java.net.URI;
27 import java.net.URISyntaxException;
28
29 /***
30 * Captures the output of the java compiler in memory
31 */
32 public class MemoryJavaFileObject extends SimpleJavaFileObject {
33
34 private ByteArrayOutputStream out;
35
36 public MemoryJavaFileObject(String name, JavaFileObject.Kind kind) {
37 super(toURI(name), kind);
38 }
39
40 public InputStream openInputStream() throws IOException,
41 IllegalStateException, UnsupportedOperationException {
42 return new ByteArrayInputStream(out.toByteArray());
43 }
44
45 public OutputStream openOutputStream() throws IOException,
46 IllegalStateException, UnsupportedOperationException {
47 return out = new ByteArrayOutputStream();
48 }
49
50 private static URI toURI(String name) {
51 try {
52 return new URI(name);
53 } catch (URISyntaxException e) {
54 throw new RuntimeException(e);
55 }
56 }
57
58 public byte[] toByteArray() {
59 return out.toByteArray();
60 }
61 }