Class WrapperGenerator


  • public class WrapperGenerator
    extends java.lang.Object
    Given an annotated interface, return a Proxy that implements that interface. Interface must be annotated with @ExceptionWrapper( String idPrefix, String loggerName ). id prefix defaults to empty, loggerName defaults to the package name of the annotated class.

    Also, note that this returned wrapper will always implement the MessageInfo interface, which provides a way to capture all of the messages and IDs used in the interface. This is used to generate resource bundles. In order for this to work, it is required that the interface declare a field

    public static final [class name] self = ExceptionWrapper.makeWrapper( ... ) ;

    This is necessary because the extension mechanism allows the construction of message IDs that cannot be predicted based on the annotations alone.

    The behavior of the implementation of each method on the interface is determined in part by its return type as follows:

    • void. Such a method can only log a message. Must have @Log, @Message is optional.
    • String. Such a method may log a message, and also returns the message. Both @Log and @Message are optional.
    • A subclass of Exception. Such a method may log a message, and also returns an exception containing the message. Both @Log and @Message are optional.
    Each method may be annotated as follows:
    • @Message( String value ). This defines the message to be placed in a resource bundle (generated at build time by a separate tool). The key to the resource bundle is <loggerName>.<methodName>. The message is prepended with the idPrefix and the id from the @Log annotation (if @Log is present, otherwise nothing is prepended to the message). If this annotation is not present, a default message is created from the method name and the arguments.
    • @Log( LogLevel level, int id ). The presence of this annotation indicates that a log record must be generated, and logger IF the appropriate logger is enabled at the given level (note that LogLevel is an enum used for the annotation, each member of which returns the java.util.logging.Level from a getLevel() method).
    In addition, the @Chain annotation may be used on a method parameter (whose type must be a subclass of Throwable) of a method that returns an exception to indicate that the parameter should be the cause of the returned exception. All other method parameters are used as arguments in formatting the message.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private WrapperGenerator()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) static WrapperGenerator.ReturnType classifyReturnType​(java.lang.reflect.Method method)  
      (package private) static int findAnnotatedParameter​(java.lang.annotation.Annotation[][] pannos, java.lang.Class<? extends java.lang.annotation.Annotation> cls)  
      (package private) static java.lang.String getMessage​(java.lang.reflect.Method method, java.lang.String prefix, WrapperGenerator.Extension extension)  
      (package private) static java.util.Map<java.lang.String,​java.lang.String> getMessageMap​(java.lang.Class<?> cls, WrapperGenerator.Extension extension)  
      (package private) static java.lang.String getMessageOrKey​(java.util.logging.Logger logger, java.lang.reflect.Method method, WrapperGenerator.Extension extension)  
      (package private) static java.lang.String getMsgKey​(java.lang.String logger, java.lang.reflect.Method method)  
      (package private) static java.lang.String getStandardLoggerName​(java.lang.Class<?> cls)  
      static java.lang.String getStandardLogId​(java.lang.reflect.Method method)
      Expose the standard log ID for the method.
      (package private) static java.lang.Object[] getWithSkip​(java.lang.Object[] args, int skip)  
      (package private) static java.lang.Object handleFullLogging​(Log log, java.lang.reflect.Method method, WrapperGenerator.ReturnType rtype, java.util.logging.Logger logger, java.lang.String idPrefix, java.lang.Object[] messageParams, java.lang.Throwable cause, WrapperGenerator.Extension extension)  
      (package private) static java.lang.String handleMessageOnly​(java.lang.reflect.Method method, WrapperGenerator.Extension extension, java.util.logging.Logger logger, java.lang.Object[] messageParams)  
      (package private) static boolean isMajorLevel​(java.util.logging.Level level)  
      (package private) static java.util.logging.LogRecord makeLogRecord​(java.util.logging.Level level, java.lang.String key, java.lang.Object[] args, java.util.logging.Logger logger)  
      (package private) static java.lang.Throwable makeStandardException​(java.lang.String msg, java.lang.reflect.Method method)  
      static <T> T makeWrapper​(java.lang.Class<T> cls)
      Given an interface annotated with @ExceptionWrapper, return a proxy implementing the interface.
      static <T> T makeWrapper​(java.lang.Class<T> cls, WrapperGenerator.Extension extension)
      Given an interface annotated with @ExceptionWrapper, return a proxy implementing the interface.
      (package private) static boolean needStackTrace​(java.util.logging.Level level, java.lang.reflect.Method method)  
      (package private) static void trimStackTrace​(java.lang.Throwable exc, java.util.logging.LogRecord lrec)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • WrapperGenerator

        private WrapperGenerator()
    • Method Detail

      • getStandardLogId

        public static java.lang.String getStandardLogId​(java.lang.reflect.Method method)
        Expose the standard log ID for the method. This is simply the annotated value in the @Log annotation: it is not processed in any way.
        Parameters:
        method - The method for which the ID is requested.
        Returns:
        The ID (as a string), or null if no @Log annotation is present.
      • makeStandardException

        static java.lang.Throwable makeStandardException​(java.lang.String msg,
                                                         java.lang.reflect.Method method)
      • getStandardLoggerName

        static java.lang.String getStandardLoggerName​(java.lang.Class<?> cls)
      • findAnnotatedParameter

        static int findAnnotatedParameter​(java.lang.annotation.Annotation[][] pannos,
                                          java.lang.Class<? extends java.lang.annotation.Annotation> cls)
      • getWithSkip

        static java.lang.Object[] getWithSkip​(java.lang.Object[] args,
                                              int skip)
      • getMsgKey

        static java.lang.String getMsgKey​(java.lang.String logger,
                                          java.lang.reflect.Method method)
      • getMessageMap

        static java.util.Map<java.lang.String,​java.lang.String> getMessageMap​(java.lang.Class<?> cls,
                                                                                    WrapperGenerator.Extension extension)
      • getMessage

        static java.lang.String getMessage​(java.lang.reflect.Method method,
                                           java.lang.String prefix,
                                           WrapperGenerator.Extension extension)
      • getMessageOrKey

        static java.lang.String getMessageOrKey​(java.util.logging.Logger logger,
                                                java.lang.reflect.Method method,
                                                WrapperGenerator.Extension extension)
      • handleMessageOnly

        static java.lang.String handleMessageOnly​(java.lang.reflect.Method method,
                                                  WrapperGenerator.Extension extension,
                                                  java.util.logging.Logger logger,
                                                  java.lang.Object[] messageParams)
      • makeLogRecord

        static java.util.logging.LogRecord makeLogRecord​(java.util.logging.Level level,
                                                         java.lang.String key,
                                                         java.lang.Object[] args,
                                                         java.util.logging.Logger logger)
      • trimStackTrace

        static void trimStackTrace​(java.lang.Throwable exc,
                                   java.util.logging.LogRecord lrec)
      • isMajorLevel

        static boolean isMajorLevel​(java.util.logging.Level level)
      • needStackTrace

        static boolean needStackTrace​(java.util.logging.Level level,
                                      java.lang.reflect.Method method)
      • handleFullLogging

        static java.lang.Object handleFullLogging​(Log log,
                                                  java.lang.reflect.Method method,
                                                  WrapperGenerator.ReturnType rtype,
                                                  java.util.logging.Logger logger,
                                                  java.lang.String idPrefix,
                                                  java.lang.Object[] messageParams,
                                                  java.lang.Throwable cause,
                                                  WrapperGenerator.Extension extension)
      • makeWrapper

        public static <T> T makeWrapper​(java.lang.Class<T> cls)
        Given an interface annotated with @ExceptionWrapper, return a proxy implementing the interface.
        Type Parameters:
        T - The annotated interface type.
        Parameters:
        cls - The class of the annotated interface.
        Returns:
        An instance of the interface.
      • makeWrapper

        public static <T> T makeWrapper​(java.lang.Class<T> cls,
                                        WrapperGenerator.Extension extension)
        Given an interface annotated with @ExceptionWrapper, return a proxy implementing the interface.
        Type Parameters:
        T - The annotated interface type.
        Parameters:
        cls - The class of the annotated interface.
        extension - The extension instance used to override the default behavior.
        Returns:
        An instance of the interface.