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