20
20
import java .util .Map ;
21
21
22
22
import javax .inject .Inject ;
23
+ import javax .ws .rs .core .HttpHeaders ;
24
+ import javax .ws .rs .core .MediaType ;
23
25
24
26
import com .github .nmorel .gwtjackson .client .exception .JsonMappingException ;
25
27
import com .google .common .base .Strings ;
41
43
*/
42
44
public class DefaultRestRequestBuilderFactory implements RestRequestBuilderFactory {
43
45
private static final Map <HttpMethod , Method > HTTP_METHODS = Maps .newEnumMap (HttpMethod .class );
44
- private static final String CONTENT_TYPE = "Content-Type" ;
45
46
private static final String JSON_UTF8 = "application/json; charset=utf-8" ;
46
47
47
48
static {
@@ -75,7 +76,7 @@ public <A extends RestAction<?>> RequestBuilder build(A action, String securityT
75
76
76
77
RequestBuilder requestBuilder = new RequestBuilder (httpMethod , url );
77
78
78
- buildHeaders (requestBuilder , securityToken , action .getHeaderParams ());
79
+ buildHeaders (requestBuilder , securityToken , action .getPath (), action . getHeaderParams ());
79
80
buildBody (requestBuilder , action );
80
81
81
82
return requestBuilder ;
@@ -151,10 +152,14 @@ protected String serialize(Object object, String bodyType) {
151
152
return serialization .serialize (object , bodyType );
152
153
}
153
154
154
- private void buildHeaders (RequestBuilder requestBuilder , String securityToken , List <RestParameter > customHeaders )
155
+ private void buildHeaders (RequestBuilder requestBuilder , String securityToken , String path ,
156
+ List <RestParameter > customHeaders )
155
157
throws ActionException {
156
- requestBuilder .setHeader (CONTENT_TYPE , JSON_UTF8 );
157
- requestBuilder .setHeader (MODULE_BASE_HEADER , baseUrl );
158
+ requestBuilder .setHeader (HttpHeaders .ACCEPT , MediaType .APPLICATION_JSON );
159
+
160
+ if (!isAbsoluteUrl (path )) {
161
+ requestBuilder .setHeader (MODULE_BASE_HEADER , baseUrl );
162
+ }
158
163
159
164
if (!Strings .isNullOrEmpty (securityToken )) {
160
165
requestBuilder .setHeader (securityHeaderName , securityToken );
@@ -163,6 +168,10 @@ private void buildHeaders(RequestBuilder requestBuilder, String securityToken, L
163
168
for (RestParameter param : customHeaders ) {
164
169
requestBuilder .setHeader (param .getName (), encodeHeaderParam (param ));
165
170
}
171
+
172
+ if (requestBuilder .getHeader (HttpHeaders .CONTENT_TYPE ) == null ) {
173
+ requestBuilder .setHeader (HttpHeaders .CONTENT_TYPE , JSON_UTF8 );
174
+ }
166
175
}
167
176
168
177
private <A extends RestAction <?>> void buildBody (RequestBuilder requestBuilder , A action ) throws ActionException {
@@ -182,7 +191,15 @@ private String buildUrl(RestAction<?> restAction) throws ActionException {
182
191
183
192
String path = buildPath (restAction .getPath (), restAction .getPathParams ());
184
193
185
- return baseUrl + path + queryString ;
194
+ if (isAbsoluteUrl (path )) {
195
+ return path + queryString ;
196
+ } else {
197
+ return baseUrl + path + queryString ;
198
+ }
199
+ }
200
+
201
+ private boolean isAbsoluteUrl (String path ) {
202
+ return path .startsWith ("http://" ) || path .startsWith ("https://" );
186
203
}
187
204
188
205
private String buildPath (String rawPath , List <RestParameter > params ) throws ActionException {
0 commit comments