Существует ли сообщение protobuf, которое поддерживает / расширяет java.lang.Исключение?

#exception #protocol-buffers

#исключение #буферы протокола

Вопрос:

Мы пытаемся представить CustomException в формате protobuf —

 public class CustomRestException extends RuntimeException {

private CustomRestErrorMessage customRestErrorMessage;
 public CustomRestException (CustomRestErrorMessage customRestErrorMessage, Throwable   cause) {
    super(cause);
    this.customRestErrorMessage= customRestErrorMessage;
 }
 public CustomRestException (CustomRestErrorMessage customRestErrorMessage) {
     this.customRestErrorMessage= customRestErrorMessage;
 }
}

public class CustomRestErrorMessage implements Serializable {

  private String causeMessage = "";
  private String errorCode = "";
  private String errorMessage = "";
  private String errorSubCode = "";
  private String stackTrace = "";
}
 

И вот CustomRestExceptionProtos .протофайл

 option java_package = "com.company.my.exception"; 
option java_outer_classname = "CustomRestExceptionProtos"; 

message CustomRestProtoException
 {
    required CustomRestProtoErrorMessage customRestErrorMessage = 1;
 }

message CustomRestProtoErrorMessage
 {
    required string errorCode = 1;
    required string errorMessage = 2;
    required string errorSubCode = 3;
    required string causeMessage = 4;     
    required string stackTrace= 5;
 }
 

Возможно ли представить этот «CustomRestExceptionProtos» как тип java.lang.Исключение в файле .proto ?

Ответ №1:

Если я правильно понял ваш вопрос, вы хотите, чтобы класс Java, созданный на основе вашего CustomRestProtoException типа сообщения, использовался для управления java.lang.Exception . Я думаю, что единственный способ добиться этого — написать плагин для расширения генерации кода Java:

http://code.google.com/apis/protocolbuffers/docs/reference/java-generated.html#plugins

Альтернативным и более простым подходом было бы ввести подкласс исключений Java-оболочки для хранения CustomRestProtoException объекта:

 public class CustomRestException extends Exception
{
    private CustomRestProtoException exception;

    // usual constructors etc.
}