BEA Systems, Inc.


weblogic.apache.xalan.extensions
Class ExtensionHandlerJavaClass

java.lang.Object
  |
  +--weblogic.apache.xalan.extensions.ExtensionHandler
        |
        +--weblogic.apache.xalan.extensions.ExtensionHandlerJava
              |
              +--weblogic.apache.xalan.extensions.ExtensionHandlerJavaClass

public class ExtensionHandlerJavaClass
extends ExtensionHandlerJava

Represents an extension namespace for XPath that handles java classes. It is recommended that the class URI be of the form:

   xalan://fully.qualified.class.name
 
However, we do not enforce this. If the class name contains a a /, we only use the part to the right of the rightmost slash. In addition, we ignore any "class:" prefix. Provides functions to test a function's existence and call a function. Also provides functions to test an element's existence and call an element.

This class is based on an implementation from the Apache XML Project. In future releases the XML parser, XSLT processor, and associated classes will likely be updated to be based on a later version of the Apache implementations. Since Apache does not guarantee backwards compatibility between versions of their software, we cannot guarantee backwards compatibility of any of the classes contained in the weblogic.apache package or sub-packages.

Author:
Gary L Peskin

Fields inherited from class weblogic.apache.xalan.extensions.ExtensionHandlerJava
m_className
 
Fields inherited from class weblogic.apache.xalan.extensions.ExtensionHandler
m_namespaceUri, m_scriptLang
 
Constructor Summary
ExtensionHandlerJavaClass(java.lang.String namespaceUri, java.lang.String scriptLang, java.lang.String className)
          Construct a new extension namespace handler given all the information needed.
 
Method Summary
 java.lang.Object callFunction(java.lang.String funcName, java.util.Vector args, java.lang.Object methodKey, ExpressionContext exprContext)
          Process a call to a function in the java class represented by this ExtensionHandlerJavaClass.
 boolean isElementAvailable(java.lang.String element)
          Tests whether a certain element name is known within this namespace.
 boolean isFunctionAvailable(java.lang.String function)
          Tests whether a certain function name is known within this namespace.
 void processElement(java.lang.String localPart, ElemTemplateElement element, TransformerImpl transformer, Stylesheet stylesheetTree, java.lang.Object methodKey)
          Process a call to this extension namespace via an element.
 
Methods inherited from class weblogic.apache.xalan.extensions.ExtensionHandlerJava
getFromCache, putToCache
 
Methods inherited from class weblogic.apache.xalan.extensions.ExtensionHandler
getClassForName
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExtensionHandlerJavaClass

public ExtensionHandlerJavaClass(java.lang.String namespaceUri,
                                 java.lang.String scriptLang,
                                 java.lang.String className)
Construct a new extension namespace handler given all the information needed.

Parameters:
namespaceUri - the extension namespace URI that I'm implementing
scriptLang - language of code implementing the extension
className - the fully qualified class name of the class
Method Detail

isFunctionAvailable

public boolean isFunctionAvailable(java.lang.String function)
Tests whether a certain function name is known within this namespace. Simply looks for a method with the appropriate name. There is no information regarding the arguments to the function call or whether the method implementing the function is a static method or an instance method.

Parameters:
function - name of the function being tested
Returns:
true if its known, false if not.
Overrides:
isFunctionAvailable in class ExtensionHandler

isElementAvailable

public boolean isElementAvailable(java.lang.String element)
Tests whether a certain element name is known within this namespace. Looks for a method with the appropriate name and signature. This method examines both static and instance methods.

Parameters:
element - name of the element being tested
Returns:
true if its known, false if not.
Overrides:
isElementAvailable in class ExtensionHandler

callFunction

public java.lang.Object callFunction(java.lang.String funcName,
                                     java.util.Vector args,
                                     java.lang.Object methodKey,
                                     ExpressionContext exprContext)
                              throws javax.xml.transform.TransformerException
Process a call to a function in the java class represented by this ExtensionHandlerJavaClass. There are three possible types of calls:
   Constructor:
     classns:new(arg1, arg2, ...)

   Static method:
     classns:method(arg1, arg2, ...)

   Instance method:
     classns:method(obj, arg1, arg2, ...)
 
We use the following rules to determine the type of call made:
  1. If the function name is "new", call the best constructor for class represented by the namespace URI
  2. If the first argument to the function is of the class specified in the namespace or is a subclass of that class, look for the best method of the class specified in the namespace with the specified arguments. Compare all static and instance methods with the correct method name. For static methods, use all arguments in the compare. For instance methods, use all arguments after the first.
  3. Otherwise, select the best static or instance method matching all of the arguments. If the best method is an instance method, call the function using a default object, creating it if needed.

Parameters:
funcName - Function name.
args - The arguments of the function call.
methodKey - A key that uniquely identifies this class and method call.
exprContext - The context in which this expression is being executed.
Returns:
the return value of the function evaluation.
Throws:
javax.xml.transform.TransformerException -  
Overrides:
callFunction in class ExtensionHandler

processElement

public void processElement(java.lang.String localPart,
                           ElemTemplateElement element,
                           TransformerImpl transformer,
                           Stylesheet stylesheetTree,
                           java.lang.Object methodKey)
                    throws javax.xml.transform.TransformerException,
                           java.io.IOException
Process a call to this extension namespace via an element. As a side effect, the results are sent to the TransformerImpl's result tree. We invoke the static or instance method in the class represented by by the namespace URI. If we don't already have an instance of this class, we create one upon the first call.

Parameters:
localPart - Element name's local part.
element - The extension element being processed.
transformer - Handle to TransformerImpl.
stylesheetTree - The compiled stylesheet tree.
sourceTree - The root of the source tree (but don't assume it's a Document).
sourceNode - The current context node.
mode - The current mode.
methodKey - A key that uniquely identifies this element call.
Throws:
java.io.IOException - if loading trouble
javax.xml.transform.TransformerException - if parsing trouble
Overrides:
processElement in class ExtensionHandler

Documentation is available at
http://download.oracle.com/docs/cd/E13222_01/wls/docs70

Copyright © 2004 BEA Systems, Inc. All Rights Reserved.
WebLogic Server 7.0 API Reference