@@ -416,39 +416,48 @@ public Status sendOutcome(SpannerActionOutcome outcome) {
416
416
417
417
/** Map Cloud ErrorCode to Status. */
418
418
protected Status toStatus (SpannerException e ) {
419
+ String errorMessage = e .getMessage ();
420
+ com .google .rpc .Status rpcStatus = io .grpc .protobuf .StatusProto .fromThrowable (e );
421
+ if (rpcStatus != null ) {
422
+ if (rpcStatus .getDetailsCount () > 0 ) {
423
+ errorMessage += "/n" ;
424
+ }
425
+ for (int i = 0 ; i < rpcStatus .getDetailsCount (); i ++) {
426
+ errorMessage += "\n Error detail: " + rpcStatus .getDetails (i ).toString ();
427
+ }
428
+ }
419
429
switch (e .getErrorCode ()) {
420
430
case INVALID_ARGUMENT :
421
- return Status .fromCode (Status .INVALID_ARGUMENT .getCode ()).withDescription (e . getMessage () );
431
+ return Status .fromCode (Status .INVALID_ARGUMENT .getCode ()).withDescription (errorMessage );
422
432
case PERMISSION_DENIED :
423
- return Status .fromCode (Status .PERMISSION_DENIED .getCode ()).withDescription (e . getMessage () );
433
+ return Status .fromCode (Status .PERMISSION_DENIED .getCode ()).withDescription (errorMessage );
424
434
case ABORTED :
425
- return Status .fromCode (Status .ABORTED .getCode ()).withDescription (e . getMessage () );
435
+ return Status .fromCode (Status .ABORTED .getCode ()).withDescription (errorMessage );
426
436
case ALREADY_EXISTS :
427
- return Status .fromCode (Status .ALREADY_EXISTS .getCode ()).withDescription (e . getMessage () );
437
+ return Status .fromCode (Status .ALREADY_EXISTS .getCode ()).withDescription (errorMessage );
428
438
case CANCELLED :
429
- return Status .fromCode (Status .CANCELLED .getCode ()).withDescription (e . getMessage () );
439
+ return Status .fromCode (Status .CANCELLED .getCode ()).withDescription (errorMessage );
430
440
case INTERNAL :
431
441
return Status .fromCode (Status .INTERNAL .getCode ())
432
- .withDescription (e . getMessage () + e .getReason () == null ? "" : ": " + e .getReason ());
442
+ .withDescription (errorMessage + e .getReason () == null ? "" : ": " + e .getReason ());
433
443
case FAILED_PRECONDITION :
434
- return Status .fromCode (Status .FAILED_PRECONDITION .getCode ())
435
- .withDescription (e .getMessage ());
444
+ return Status .fromCode (Status .FAILED_PRECONDITION .getCode ()).withDescription (errorMessage );
436
445
case NOT_FOUND :
437
- return Status .fromCode (Status .NOT_FOUND .getCode ()).withDescription (e . getMessage () );
446
+ return Status .fromCode (Status .NOT_FOUND .getCode ()).withDescription (errorMessage );
438
447
case DEADLINE_EXCEEDED :
439
- return Status .fromCode (Status .DEADLINE_EXCEEDED .getCode ()).withDescription (e . getMessage () );
448
+ return Status .fromCode (Status .DEADLINE_EXCEEDED .getCode ()).withDescription (errorMessage );
440
449
case RESOURCE_EXHAUSTED :
441
- return Status .fromCode (Status .RESOURCE_EXHAUSTED .getCode ()).withDescription (e . getMessage () );
450
+ return Status .fromCode (Status .RESOURCE_EXHAUSTED .getCode ()).withDescription (errorMessage );
442
451
case OUT_OF_RANGE :
443
- return Status .fromCode (Status .OUT_OF_RANGE .getCode ()).withDescription (e . getMessage () );
452
+ return Status .fromCode (Status .OUT_OF_RANGE .getCode ()).withDescription (errorMessage );
444
453
case UNAUTHENTICATED :
445
- return Status .fromCode (Status .UNAUTHENTICATED .getCode ()).withDescription (e . getMessage () );
454
+ return Status .fromCode (Status .UNAUTHENTICATED .getCode ()).withDescription (errorMessage );
446
455
case UNIMPLEMENTED :
447
- return Status .fromCode (Status .UNIMPLEMENTED .getCode ()).withDescription (e . getMessage () );
456
+ return Status .fromCode (Status .UNIMPLEMENTED .getCode ()).withDescription (errorMessage );
448
457
case UNAVAILABLE :
449
- return Status .fromCode (Status .UNAVAILABLE .getCode ()).withDescription (e . getMessage () );
458
+ return Status .fromCode (Status .UNAVAILABLE .getCode ()).withDescription (errorMessage );
450
459
case UNKNOWN :
451
- return Status .fromCode (Status .UNKNOWN .getCode ()).withDescription (e . getMessage () );
460
+ return Status .fromCode (Status .UNKNOWN .getCode ()).withDescription (errorMessage );
452
461
default :
453
462
return Status .fromCode (Status .UNKNOWN .getCode ())
454
463
.withDescription ("Unsupported Spanner error code: " + e .getErrorCode ());
0 commit comments