@@ -416,39 +416,48 @@ 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 :
434-  return  Status .fromCode (Status .FAILED_PRECONDITION .getCode ())
435-  .withDescription (e .getMessage ());
444+  return  Status .fromCode (Status .FAILED_PRECONDITION .getCode ()).withDescription (errorMessage );
436445 case  NOT_FOUND :
437-  return  Status .fromCode (Status .NOT_FOUND .getCode ()).withDescription (e . getMessage () );
446+  return  Status .fromCode (Status .NOT_FOUND .getCode ()).withDescription (errorMessage );
438447 case  DEADLINE_EXCEEDED :
439-  return  Status .fromCode (Status .DEADLINE_EXCEEDED .getCode ()).withDescription (e . getMessage () );
448+  return  Status .fromCode (Status .DEADLINE_EXCEEDED .getCode ()).withDescription (errorMessage );
440449 case  RESOURCE_EXHAUSTED :
441-  return  Status .fromCode (Status .RESOURCE_EXHAUSTED .getCode ()).withDescription (e . getMessage () );
450+  return  Status .fromCode (Status .RESOURCE_EXHAUSTED .getCode ()).withDescription (errorMessage );
442451 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 );
444453 case  UNAUTHENTICATED :
445-  return  Status .fromCode (Status .UNAUTHENTICATED .getCode ()).withDescription (e . getMessage () );
454+  return  Status .fromCode (Status .UNAUTHENTICATED .getCode ()).withDescription (errorMessage );
446455 case  UNIMPLEMENTED :
447-  return  Status .fromCode (Status .UNIMPLEMENTED .getCode ()).withDescription (e . getMessage () );
456+  return  Status .fromCode (Status .UNIMPLEMENTED .getCode ()).withDescription (errorMessage );
448457 case  UNAVAILABLE :
449-  return  Status .fromCode (Status .UNAVAILABLE .getCode ()).withDescription (e . getMessage () );
458+  return  Status .fromCode (Status .UNAVAILABLE .getCode ()).withDescription (errorMessage );
450459 case  UNKNOWN :
451-  return  Status .fromCode (Status .UNKNOWN .getCode ()).withDescription (e . getMessage () );
460+  return  Status .fromCode (Status .UNKNOWN .getCode ()).withDescription (errorMessage );
452461 default :
453462 return  Status .fromCode (Status .UNKNOWN .getCode ())
454463 .withDescription ("Unsupported Spanner error code: "  + e .getErrorCode ());
0 commit comments