org.apache.ws.jaxme.js.pattern
public class ProxyGenerator extends Object
This class is a generator for the proxy object pattern. A proxy object performs the same task as an object created by the {@link java.lang.reflect.Proxy} class: It delegates its method calls to an internal instance.
In the case of {@link java.lang.reflect.Proxy} this works by invoking a so-called {@link java.lang.reflect.InvocationHandler}. The InvocationHandler calls the actual object via Java reflection.
In our case, the proxy object is an instance of a generated class. The main advantage of the generated approach is that you can customize the proxy class quite easily by overwriting it. Compared to the creation of an InvocationHandler, this saves a lot of hazzle.
Method Summary | |
---|---|
JavaSource | generate(JavaSourceFactory pFactory, JavaQName pTargetName, InterfaceDescription[] pInterfaces) Generates a class implementing the given interfaces. |
protected void | generateInterfaceMethods(JavaSource pJs, Map pGeneratedMethods, JavaSource pInterface) Generates the methods for a given interface. |
protected JavaField | getBackingObjectField(JavaSource pJs, InterfaceDescription[] pInterfaces) Generates the |
protected JavaConstructor | getConstructor(JavaSource pJs, InterfaceDescription[] pInterfaces) Creates a constructor with protected access and a single argument, the backing object. |
JavaQName | getExtendedClass() Returns the class extended by the generated proxy class. |
protected JavaMethod | getInterfaceMethod(JavaSource pJs, JavaMethod pMethod) Generated an instance of {@link JavaMethod} for the given {@link JavaMethod}. |
protected JavaSource | getJavaSource(JavaSourceFactory pFactory, JavaQName pTargetName) Creates the class. |
void | setExtendedClass(JavaQName pExtendedClass) Sets the class extended by the generated proxy class. |
Generates a class implementing the given interfaces.
Parameters: pFactory The ProxyGenerator will use this factory for creating instances of JavaSource. pTargetName Name of the generated class pInterfaces The interfaces being implemented by the generated class.
Throws: ClassNotFoundException
Generates the methods for a given interface.
Parameters: pJs The Java class being generated pGeneratedMethods A set of already generated methods; each entry in the set is an instance of {@link MethodKey}. The method creates a new instance of {@link MethodKey} and adds it to the set. A warning is written to {@link System#err}, if the method isn't unique.
Throws: ClassNotFoundException
Generates the backingObject
field.
Creates a constructor with protected access and a single argument, the backing object.
Returns the class extended by the generated proxy class. Defaults to {@link java.lang.Object}.
Generated an instance of {@link JavaMethod} for the given {@link JavaMethod}.
Creates the class.
Sets the class extended by the generated proxy class. Defaults to {@link java.lang.Object}.