1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.io.entity;
29
30 import java.io.ByteArrayInputStream;
31 import java.io.ByteArrayOutputStream;
32 import java.io.IOException;
33 import java.io.InputStream;
34 import java.io.ObjectOutputStream;
35 import java.io.OutputStream;
36 import java.io.Serializable;
37
38 import org.apache.hc.core5.annotation.Contract;
39 import org.apache.hc.core5.annotation.ThreadingBehavior;
40 import org.apache.hc.core5.http.ContentType;
41 import org.apache.hc.core5.util.Args;
42
43
44
45
46
47
48 @Contract(threading = ThreadingBehavior.IMMUTABLE_CONDITIONAL)
49 public class SerializableEntity extends AbstractHttpEntity {
50
51 private final Serializable serializable;
52
53
54
55
56
57
58
59
60 public SerializableEntity(
61 final Serializable serializable, final ContentType contentType, final String contentEncoding) {
62 super(contentType, contentEncoding);
63 this.serializable = Args.notNull(serializable, "Source object");
64 }
65
66
67
68
69
70
71
72 public SerializableEntity(final Serializable serializable, final ContentType contentType) {
73 this(serializable, contentType, null);
74 }
75
76 @Override
77 public final InputStream getContent() throws IOException, IllegalStateException {
78 final ByteArrayOutputStream buf = new ByteArrayOutputStream();
79 writeTo(buf);
80 return new ByteArrayInputStream(buf.toByteArray());
81 }
82
83 @Override
84 public final long getContentLength() {
85 return -1;
86 }
87
88 @Override
89 public final boolean isRepeatable() {
90 return true;
91 }
92
93 @Override
94 public final boolean isStreaming() {
95 return false;
96 }
97
98 @Override
99 public final void writeTo(final OutputStream outStream) throws IOException {
100 Args.notNull(outStream, "Output stream");
101 final ObjectOutputStream out = new ObjectOutputStream(outStream);
102 out.writeObject(this.serializable);
103 out.flush();
104 }
105
106 @Override
107 public final void close() throws IOException {
108 }
109
110 }