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 package org.apache.hc.client5.http.impl.classic;
28
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.io.OutputStream;
32 import java.util.List;
33 import java.util.Set;
34
35 import org.apache.hc.core5.function.Supplier;
36 import org.apache.hc.core5.http.ClassicHttpRequest;
37 import org.apache.hc.core5.http.Header;
38 import org.apache.hc.core5.http.HttpEntity;
39
40 class RequestEntityProxy implements HttpEntity {
41
42 static void enhance(final ClassicHttpRequest request) {
43 final HttpEntity entity = request.getEntity();
44 if (entity != null && !entity.isRepeatable() && !isEnhanced(entity)) {
45 request.setEntity(new RequestEntityProxy(entity));
46 }
47 }
48
49 static boolean isEnhanced(final HttpEntity entity) {
50 return entity instanceof RequestEntityProxy;
51 }
52
53 private final HttpEntity original;
54 private boolean consumed = false;
55
56 RequestEntityProxy(final HttpEntity original) {
57 super();
58 this.original = original;
59 }
60
61 public HttpEntity getOriginal() {
62 return original;
63 }
64
65 public boolean isConsumed() {
66 return consumed;
67 }
68
69 @Override
70 public boolean isRepeatable() {
71 if (!consumed) {
72 return true;
73 } else {
74 return original.isRepeatable();
75 }
76 }
77
78 @Override
79 public boolean isChunked() {
80 return original.isChunked();
81 }
82
83 @Override
84 public long getContentLength() {
85 return original.getContentLength();
86 }
87
88 @Override
89 public String getContentType() {
90 return original.getContentType();
91 }
92
93 @Override
94 public String getContentEncoding() {
95 return original.getContentEncoding();
96 }
97
98 @Override
99 public InputStream getContent() throws IOException, IllegalStateException {
100 return original.getContent();
101 }
102
103 @Override
104 public void writeTo(final OutputStream outStream) throws IOException {
105 consumed = true;
106 original.writeTo(outStream);
107 }
108
109 @Override
110 public boolean isStreaming() {
111 return original.isStreaming();
112 }
113
114 @Override
115 public Supplier<List<? extends Header>> getTrailers() {
116 return original.getTrailers();
117 }
118
119 @Override
120 public Set<String> getTrailerNames() {
121 return original.getTrailerNames();
122 }
123
124 @Override
125 public void close() throws IOException {
126 original.close();
127 }
128
129 @Override
130 public String toString() {
131 final StringBuilder sb = new StringBuilder("RequestEntityProxy{");
132 sb.append(original);
133 sb.append('}');
134 return sb.toString();
135 }
136
137 }