Common actions performed by the handler

Create a web service entry point

Many frameworks provide their own entry points into an application. A common example is to expose web services that are either identified in a configuration file or in annotations in the code. After searching in the application's configuration files or directly in the bytecode for designated entry points, the method F4FAction.addTaintedCallback can be used to create a tainted data entry point at the appropriate method.

Observe in the example: In EJB 2, web service entry points are declared by defining endpoints in the application's configuration file (ejb-jar.xml). Then handleApp loops through the beans declared in ejb-jar.xml and whenever an endpoint class is defined, it obtains the list of method names. It then declares their implementations as web service entry points using the addTaintedCallback method.

Replace a method

Modern frameworks frequently make use of virtual functions and abstraction to more loosely couple business components. While this can be an improvement to the development process, it creates difficulties for static analysis when the connection between virtual function and its implementation is handled in a configuration file or via annotations in the code. F4FAction.replaceCalls allows a handler to designate these connections.

Observe in the example: In EJB 2, each bean has a set of interfaces (local and remote) that declare how other beans may interact with it. This means that, wherever a bean's interface class.method is called, it is replaced by the framework with the actual ImplementationClass.method.

Starting at line 62, our example handler loops through each bean and takes its remote and local interfaces and replaces them with their actual implementations.

Logging

A handler can use the com.ibm.wala.andromeda.util.logging.TaintLogger class to log informative messages during execution - and to cause error messages to appear in the AppScan® Source user interface. The TaintLogger class employs the log4j library. To log a message, first obtain a Logger object by calling TaintLogger.i().getLogger(). Then, invoke logging methods on the Logger (for example, Logger.warn) to log the messages that you want. Log messages will appear in <data_dir>\logs\StaticAnalyzer_Errors.log (where <data_dir> is the location of your AppScan® Source program data, as described in Installation and user data file locations). If Logger.error or Logger.fatal is used to log a message, the error the message will also appear in the Console view in the AppScan® Source user interface.