@@ -49,18 +49,6 @@ public abstract class BaseArangoDriver {
49
49
50
50
private static final Pattern databaseNamePattern = Pattern .compile ("^[a-zA-Z][a-zA-Z0-9\\ -_]{0,63}$" );
51
51
52
- // protected String createDocumentHandle(long collectionId, long documentId)
53
- // {
54
- // // validateCollectionNameは不要
55
- // return collectionId + "/" + documentId;
56
- // }
57
- //
58
- // protected String createDocumentHandle(String collectionName, long
59
- // documentId) throws ArangoException {
60
- // validateCollectionName(collectionName);
61
- // return collectionName + "/" + documentId;
62
- // }
63
-
64
52
protected String createDocumentHandle (long collectionId , String documentKey ) {
65
53
return collectionId + "/" + documentKey ;
66
54
}
@@ -106,7 +94,7 @@ protected void validateDatabaseName(String database, boolean allowNull) throws A
106
94
}
107
95
} else {
108
96
valid = databaseNamePattern .matcher (database ).matches ();
109
- if (database . equals ( "_system" )) {
97
+ if ("_system" . equals ( database )) {
110
98
valid = true ;
111
99
}
112
100
}
@@ -185,7 +173,7 @@ private int checkServerErrors(HttpResponseEntity res) throws ArangoException {
185
173
186
174
if (statusCode >= 400 ) { // always throws ArangoException
187
175
DefaultEntity defaultEntity = new DefaultEntity ();
188
- if (res .getText () != null && !res .getText (). equalsIgnoreCase ( "" ) && statusCode != 500 ) {
176
+ if (res .getText () != null && !"" . equals ( res .getText ()) && statusCode != 500 ) {
189
177
JsonParser jsonParser = new JsonParser ();
190
178
JsonElement jsonElement = jsonParser .parse (res .getText ());
191
179
JsonObject jsonObject = jsonElement .getAsJsonObject ();
@@ -194,47 +182,7 @@ private int checkServerErrors(HttpResponseEntity res) throws ArangoException {
194
182
JsonElement errorNumber = jsonObject .get ("errorNum" );
195
183
defaultEntity .setErrorNumber (errorNumber .getAsInt ());
196
184
} else {
197
- String statusPhrase = "" ;
198
- switch (statusCode ) {
199
- case 400 :
200
- statusPhrase = "Bad Request" ;
201
- break ;
202
- case 401 :
203
- statusPhrase = "Unauthorized" ;
204
- break ;
205
- case 403 :
206
- statusPhrase = "Forbidden" ;
207
- break ;
208
- case 404 :
209
- statusPhrase = "Not Found" ;
210
- break ;
211
- case 405 :
212
- statusPhrase = "Method Not Allowed" ;
213
- break ;
214
- case 406 :
215
- statusPhrase = "Not Acceptable" ;
216
- break ;
217
- case 407 :
218
- statusPhrase = "Proxy Authentication Required" ;
219
- break ;
220
- case 408 :
221
- statusPhrase = "Request Time-out" ;
222
- break ;
223
- case 409 :
224
- statusPhrase = "Conflict" ;
225
- break ;
226
- case 500 :
227
- statusPhrase = "Internal Server Error" ;
228
- break ;
229
- default :
230
- statusPhrase = "unknown error" ;
231
- break ;
232
- }
233
-
234
- defaultEntity .setErrorMessage (statusPhrase );
235
- if (statusCode == 500 ) {
236
- defaultEntity .setErrorMessage (statusPhrase + ": " + res .getText ());
237
- }
185
+ defaultEntity .setErrorMessage (res .createStatusPhrase ());
238
186
}
239
187
240
188
defaultEntity .setCode (statusCode );
@@ -271,7 +219,6 @@ protected <T extends BaseEntity> T createEntity(
271
219
return null ;
272
220
}
273
221
boolean isDocumentEntity = false ;
274
- // boolean requestSuccessful = true;
275
222
276
223
// the following was added to ensure, that attributes with a key like
277
224
// "error", "code", "errorNum"
@@ -286,17 +233,8 @@ protected <T extends BaseEntity> T createEntity(
286
233
try {
287
234
EntityDeserializers .setParameterized (pclazz );
288
235
289
- T entity = createEntityImpl (res , clazz );
290
- if (entity == null ) {
291
- Class <?> c = MissingInstanceCreater .getMissingClass (clazz );
292
- entity = ReflectionUtils .newInstance (c );
293
- } else if (res .isBatchRepsonse ()) {
294
- try {
295
- entity = clazz .newInstance ();
296
- } catch (Exception e ) {
297
- throw new ArangoException (e );
298
- }
299
- }
236
+ T entity = createEntityWithFallback (res , clazz );
237
+
300
238
setStatusCode (res , entity );
301
239
if (validate ) {
302
240
validate (res , entity );
@@ -316,6 +254,22 @@ protected <T extends BaseEntity> T createEntity(
316
254
}
317
255
}
318
256
257
+ private <T extends BaseEntity > T createEntityWithFallback (HttpResponseEntity res , Class <T > clazz )
258
+ throws ArangoException {
259
+ T entity = createEntityImpl (res , clazz );
260
+ if (entity == null ) {
261
+ Class <?> c = MissingInstanceCreater .getMissingClass (clazz );
262
+ entity = ReflectionUtils .newInstance (c );
263
+ } else if (res .isBatchRepsonse ()) {
264
+ try {
265
+ entity = clazz .newInstance ();
266
+ } catch (Exception e ) {
267
+ throw new ArangoException (e );
268
+ }
269
+ }
270
+ return entity ;
271
+ }
272
+
319
273
/**
320
274
* Gets the raw JSON string with results, from the Http response
321
275
*
@@ -371,57 +325,58 @@ protected void setStatusCode(HttpResponseEntity res, BaseEntity entity) throws A
371
325
372
326
protected void validate (HttpResponseEntity res , BaseEntity entity ) throws ArangoException {
373
327
374
- if (entity != null ) {
375
- if (entity .isError ()) {
376
- throw new ArangoException (entity );
377
- }
328
+ if (entity != null && entity .isError ()) {
329
+ throw new ArangoException (entity );
378
330
}
379
331
380
332
// Custom Error
381
333
if (res .getStatusCode () >= 400 ) {
382
334
335
+ BaseEntity tmpEntity = entity ;
336
+ if (tmpEntity == null ) {
337
+ tmpEntity = new DefaultEntity ();
338
+ }
339
+
383
340
if (res .isTextResponse ()) {
384
- // entity.setErrorNumber(0);
385
- entity .setErrorNumber (res .getStatusCode ());
386
- entity .setErrorMessage (res .getText ());
341
+ tmpEntity .setErrorNumber (res .getStatusCode ());
342
+ tmpEntity .setErrorMessage (res .getText ());
387
343
} else {
388
- entity .setErrorNumber (res .getStatusCode ());
389
- entity .setErrorMessage (res .getStatusPhrase ());
344
+ tmpEntity .setErrorNumber (res .getStatusCode ());
345
+ tmpEntity .setErrorMessage (res .getStatusPhrase ());
390
346
}
391
347
392
348
switch (res .getStatusCode ()) {
393
349
case 401 :
394
- entity .setErrorMessage ("Unauthorized" );
350
+ tmpEntity .setErrorMessage ("Unauthorized" );
395
351
break ;
396
352
case 403 :
397
- entity .setErrorMessage ("Forbidden" );
353
+ tmpEntity .setErrorMessage ("Forbidden" );
398
354
break ;
399
355
default :
400
356
}
401
357
402
- throw new ArangoException (entity );
358
+ throw new ArangoException (tmpEntity );
403
359
}
404
360
}
405
361
406
362
@ SuppressWarnings ("unchecked" )
407
363
protected <T > T createEntityImpl (HttpResponseEntity res , Class <T > type ) throws ArangoException {
364
+ T result = null ;
408
365
if (res .isJsonResponse ()) {
409
366
try {
410
- return EntityFactory .createEntity (res .getText (), type );
367
+ result = EntityFactory .createEntity (res .getText (), type );
411
368
} catch (JsonSyntaxException e ) {
412
369
throw new ArangoException ("got JsonSyntaxException while creating entity" , e );
413
370
} catch (JsonParseException e ) {
414
371
throw new ArangoException ("got JsonParseException while creating entity" , e );
415
372
}
416
- }
417
- if (res .isDumpResponse () && StreamEntity .class .isAssignableFrom (type )) {
418
- return (T ) new StreamEntity (res .getStream ());
419
- }
420
- if (res .getText () != null && res .getText ().length () > 0 ) {
373
+ } else if (res .isDumpResponse () && StreamEntity .class .isAssignableFrom (type )) {
374
+ result = (T ) new StreamEntity (res .getStream ());
375
+ } else if (StringUtils .isNotEmpty (res .getText ())) {
421
376
throw new ArangoException ("expected JSON result from server but got: " + res .getText ());
422
377
}
423
378
424
- return null ;
379
+ return result ;
425
380
}
426
381
427
382
protected String createEndpointUrl (String database , Object ... paths ) throws ArangoException {
0 commit comments