Package org.glassfish.pfl.basic.logex
Class WrapperGenerator
java.lang.Object
org.glassfish.pfl.basic.logex.WrapperGenerator
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.
- @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).
- Author:
- ken
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceExtension API available to override the default behavior of the WrapperGenerator.static classConvenience base class for implementations of Extension that don't need to override every method.static interfaceHidden interface implemented by the result of the makeWrapper call. -
Method Summary
Modifier and TypeMethodDescriptionstatic StringgetStandardLogId(Method method) Expose the standard log ID for the method.static <T> TmakeWrapper(Class<T> cls) Given an interface annotated with @ExceptionWrapper, return a proxy implementing the interface.static <T> TmakeWrapper(Class<T> cls, WrapperGenerator.Extension extension) Given an interface annotated with @ExceptionWrapper, return a proxy implementing the interface.
-
Method Details
-
getStandardLogId
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.
-
makeWrapper
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
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.
-