@@ -416,39 +416,49 @@ public Status sendOutcome(SpannerActionOutcome outcome) {
416416
417417 /** Map Cloud ErrorCode to Status. */
418418 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+ }
419429 switch (e .getErrorCode ()) {
420430 case INVALID_ARGUMENT :
421- return Status .fromCode (Status .INVALID_ARGUMENT .getCode ()).withDescription (e . getMessage () );
431+ return Status .fromCode (Status .INVALID_ARGUMENT .getCode ()).withDescription (errorMessage );
422432 case PERMISSION_DENIED :
423- return Status .fromCode (Status .PERMISSION_DENIED .getCode ()).withDescription (e . getMessage () );
433+ return Status .fromCode (Status .PERMISSION_DENIED .getCode ()).withDescription (errorMessage );
424434 case ABORTED :
425- return Status .fromCode (Status .ABORTED .getCode ()).withDescription (e . getMessage () );
435+ return Status .fromCode (Status .ABORTED .getCode ()).withDescription (errorMessage );
426436 case ALREADY_EXISTS :
427- return Status .fromCode (Status .ALREADY_EXISTS .getCode ()).withDescription (e . getMessage () );
437+ return Status .fromCode (Status .ALREADY_EXISTS .getCode ()).withDescription (errorMessage );
428438 case CANCELLED :
429- return Status .fromCode (Status .CANCELLED .getCode ()).withDescription (e . getMessage () );
439+ return Status .fromCode (Status .CANCELLED .getCode ()).withDescription (errorMessage );
430440 case INTERNAL :
431441 return Status .fromCode (Status .INTERNAL .getCode ())
432- .withDescription (e . getMessage () + e .getReason () == null ? "" : ": " + e .getReason ());
442+ .withDescription (errorMessage + e .getReason () == null ? "" : ": " + e .getReason ());
433443 case FAILED_PRECONDITION :
434444 return Status .fromCode (Status .FAILED_PRECONDITION .getCode ())
435- .withDescription (e . getMessage () );
445+ .withDescription (errorMessage );
436446 case NOT_FOUND :
437- return Status .fromCode (Status .NOT_FOUND .getCode ()).withDescription (e . getMessage () );
447+ return Status .fromCode (Status .NOT_FOUND .getCode ()).withDescription (errorMessage );
438448 case DEADLINE_EXCEEDED :
439- return Status .fromCode (Status .DEADLINE_EXCEEDED .getCode ()).withDescription (e . getMessage () );
449+ return Status .fromCode (Status .DEADLINE_EXCEEDED .getCode ()).withDescription (errorMessage );
440450 case RESOURCE_EXHAUSTED :
441- return Status .fromCode (Status .RESOURCE_EXHAUSTED .getCode ()).withDescription (e . getMessage () );
451+ return Status .fromCode (Status .RESOURCE_EXHAUSTED .getCode ()).withDescription (errorMessage );
442452 case OUT_OF_RANGE :
443- return Status .fromCode (Status .OUT_OF_RANGE .getCode ()).withDescription (e . getMessage () );
453+ return Status .fromCode (Status .OUT_OF_RANGE .getCode ()).withDescription (errorMessage );
444454 case UNAUTHENTICATED :
445- return Status .fromCode (Status .UNAUTHENTICATED .getCode ()).withDescription (e . getMessage () );
455+ return Status .fromCode (Status .UNAUTHENTICATED .getCode ()).withDescription (errorMessage );
446456 case UNIMPLEMENTED :
447- return Status .fromCode (Status .UNIMPLEMENTED .getCode ()).withDescription (e . getMessage () );
457+ return Status .fromCode (Status .UNIMPLEMENTED .getCode ()).withDescription (errorMessage );
448458 case UNAVAILABLE :
449- return Status .fromCode (Status .UNAVAILABLE .getCode ()).withDescription (e . getMessage () );
459+ return Status .fromCode (Status .UNAVAILABLE .getCode ()).withDescription (errorMessage );
450460 case UNKNOWN :
451- return Status .fromCode (Status .UNKNOWN .getCode ()).withDescription (e . getMessage () );
461+ return Status .fromCode (Status .UNKNOWN .getCode ()).withDescription (errorMessage );
452462 default :
453463 return Status .fromCode (Status .UNKNOWN .getCode ())
454464 .withDescription ("Unsupported Spanner error code: " + e .getErrorCode ());
0 commit comments